conversions

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 11, 2022 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Overview

Package conversions sits between CS3 type definitions and OCS API Responses

Package conversions sits between CS3 type definitions and OCS API Responses

Index

Constants

View Source
const (
	// RoleViewer grants non-editor role on a resource.
	RoleViewer = "viewer"
	// RoleReader grants non-editor role on a resource
	RoleReader = "reader"
	// RoleEditor grants editor permission on a resource, including folders.
	RoleEditor = "editor"
	// RoleFileEditor grants editor permission on a single file.
	RoleFileEditor = "file-editor"
	// RoleCollaborator grants editor+resharing permissions on a resource.
	RoleCollaborator = "coowner"
	// RoleUploader grants uploader permission to upload onto a resource.
	RoleUploader = "uploader"
	// RoleManager grants manager permissions on a resource. Semantically equivalent to co-owner.
	RoleManager = "manager"
	// RoleUnknown is used for unknown roles.
	RoleUnknown = "unknown"
	// RoleLegacy provides backwards compatibility.
	RoleLegacy = "legacy"
	// RoleDenied grants no permission at all on a resource
	RoleDenied = "denied"
)

Variables

View Source
var (
	// ErrPermissionNotInRange defines a permission specific error.
	ErrPermissionNotInRange = fmt.Errorf("The provided permission is not between %d and %d", PermissionMin, PermissionMax)
)

Functions

func GetPublicShareManager

func GetPublicShareManager(manager string, m map[string]map[string]interface{}) (publicshare.Manager, error)

GetPublicShareManager returns a connection to a public share manager

func GetUserManager

func GetUserManager(manager string, m map[string]map[string]interface{}) (user.Manager, error)

GetUserManager returns a connection to a user share manager

func LocalGroupIDToString

func LocalGroupIDToString(groupID *grouppb.GroupId) string

LocalGroupIDToString transforms a cs3api group id into an ocs data model without domain name

func LocalUserIDToString

func LocalUserIDToString(userID *userpb.UserId) string

LocalUserIDToString transforms a cs3api user id into an ocs data model without domain name TODO ocs uses user names ... so an additional lookup is needed. see mapUserIds()

func ParseTimestamp

func ParseTimestamp(timestampString string) (*types.Timestamp, error)

ParseTimestamp tries to parses the ocs expiry into a CS3 Timestamp

func UserTypeString

func UserTypeString(userType userpb.UserType) string

UserTypeString returns human readable strings for various user types

Types

type ExactMatchesData

type ExactMatchesData struct {
	Users   []*MatchData `json:"users" xml:"users>element"`
	Groups  []*MatchData `json:"groups" xml:"groups>element"`
	Remotes []*MatchData `json:"remotes" xml:"remotes>element"`
}

ExactMatchesData hold exact matches

type MatchData

type MatchData struct {
	Label string          `json:"label" xml:"label,omitempty"`
	Value *MatchValueData `json:"value" xml:"value"`
}

MatchData describes a single match

type MatchValueData

type MatchValueData struct {
	ShareType               int    `json:"shareType" xml:"shareType"`
	ShareWith               string `json:"shareWith" xml:"shareWith"`
	ShareWithAdditionalInfo string `json:"shareWithAdditionalInfo" xml:"shareWithAdditionalInfo"`
}

MatchValueData holds the type and actual value

type Permissions

type Permissions uint

Permissions reflects the CRUD permissions used in the OCS sharing API

const (
	// PermissionInvalid represents an invalid permission
	PermissionInvalid Permissions = 0
	// PermissionRead grants read permissions on a resource
	PermissionRead Permissions = 1 << (iota - 1)
	// PermissionWrite grants write permissions on a resource
	PermissionWrite
	// PermissionCreate grants create permissions on a resource
	PermissionCreate
	// PermissionDelete grants delete permissions on a resource
	PermissionDelete
	// PermissionShare grants share permissions on a resource
	PermissionShare
	// PermissionDeny grants permissions to deny access on a resource
	// The recipient of the resource will then have PermissionNone.
	PermissionDeny
	// PermissionNone grants no permissions on a resource
	PermissionNone
	// PermissionMax is to be used within value range checks
	PermissionMax Permissions = (1 << (iota - 1)) - 1
	// PermissionAll grants all permissions on a resource
	PermissionAll = PermissionMax - PermissionNone
	// PermissionMin is to be used within value range checks
	PermissionMin = PermissionRead
)

func NewPermissions

func NewPermissions(val int) (Permissions, error)

NewPermissions creates a new Permissions instance. The value must be in the valid range.

func (Permissions) Contain

func (p Permissions) Contain(other Permissions) bool

Contain tests if the permissions contain another one.

type ResourceType

type ResourceType int

ResourceType indicates the OCS type of the resource

func (ResourceType) String

func (rt ResourceType) String() (s string)

type Role

type Role struct {
	Name string
	// contains filtered or unexported fields
}

Role is a set of ocs permissions and cs3 resource permissions under a common name.

func NewCollaboratorRole

func NewCollaboratorRole() *Role

NewCollaboratorRole creates a collaborator role

func NewDeniedRole

func NewDeniedRole() *Role

NewDeniedRole creates a fully denied role

func NewEditorRole

func NewEditorRole() *Role

NewEditorRole creates an editor role

func NewFileEditorRole

func NewFileEditorRole() *Role

NewFileEditorRole creates a file-editor role

func NewLegacyRoleFromOCSPermissions

func NewLegacyRoleFromOCSPermissions(p Permissions) *Role

NewLegacyRoleFromOCSPermissions tries to map a legacy combination of ocs permissions to cs3 resource permissions as a legacy role

func NewManagerRole

func NewManagerRole() *Role

NewManagerRole creates an editor role

func NewReaderRole

func NewReaderRole() *Role

NewReaderRole creates a reader role

func NewUnknownRole

func NewUnknownRole() *Role

NewUnknownRole creates an unknown role. An Unknown role has no permissions over a cs3 resource nor any ocs endpoint.

func NewUploaderRole

func NewUploaderRole() *Role

NewUploaderRole creates an uploader role

func NewViewerRole

func NewViewerRole() *Role

NewViewerRole creates a viewer role

func RoleFromName

func RoleFromName(name string) *Role

RoleFromName creates a role from the name

func RoleFromOCSPermissions

func RoleFromOCSPermissions(p Permissions) *Role

RoleFromOCSPermissions tries to map ocs permissions to a role

func RoleFromResourcePermissions

func RoleFromResourcePermissions(rp *provider.ResourcePermissions) *Role

RoleFromResourcePermissions tries to map cs3 resource permissions to a role

func (*Role) CS3ResourcePermissions

func (r *Role) CS3ResourcePermissions() *provider.ResourcePermissions

CS3ResourcePermissions for the role

func (*Role) OCSPermissions

func (r *Role) OCSPermissions() Permissions

OCSPermissions for the role

func (*Role) WebDAVPermissions

func (r *Role) WebDAVPermissions(isDir, isShared, isMountpoint, isPublic bool) string

WebDAVPermissions returns the webdav permissions used in propfinds, eg. "WCKDNVR"

from https://github.com/owncloud/core/blob/10715e2b1c85fc3855a38d2b1fe4426b5e3efbad/apps/dav/lib/Files/PublicFiles/SharedNodeTrait.php#L196-L215

	$p = '';
	if ($node->isDeletable() && $this->checkSharePermissions(Constants::PERMISSION_DELETE)) {
		$p .= 'D';
	}
	if ($node->isUpdateable() && $this->checkSharePermissions(Constants::PERMISSION_UPDATE)) {
		$p .= 'NV'; // Renameable, Moveable
	}
	if ($node->getType() === \OCP\Files\FileInfo::TYPE_FILE) {
		if ($node->isUpdateable() && $this->checkSharePermissions(Constants::PERMISSION_UPDATE)) {
			$p .= 'W';
		}
	} else {
		if ($node->isCreatable() && $this->checkSharePermissions(Constants::PERMISSION_CREATE)) {
			$p .= 'CK';
		}
	}

D = delete NV = update (renameable moveable) W = update (files only) CK = create (folders only) S = Shared R = Shareable M = Mounted Z = Deniable (NEW)

type ShareData

type ShareData struct {
	// TODO int?
	ID string `json:"id" xml:"id"`
	// The share’s type
	ShareType ShareType `json:"share_type" xml:"share_type"`
	// The username of the owner of the share.
	UIDOwner string `json:"uid_owner" xml:"uid_owner"`
	// The display name of the owner of the share.
	DisplaynameOwner string `json:"displayname_owner" xml:"displayname_owner"`
	// Additional info to identify the share owner, eg. the email or username
	AdditionalInfoOwner string `json:"additional_info_owner" xml:"additional_info_owner"`
	// The permission attribute set on the file.
	// TODO(jfd) change the default to read only
	Permissions Permissions `json:"permissions" xml:"permissions"`
	// The UNIX timestamp when the share was created.
	STime uint64 `json:"stime" xml:"stime"`
	// ?
	Parent string `json:"parent" xml:"parent"`
	// The UNIX timestamp when the share expires.
	Expiration string `json:"expiration" xml:"expiration"`
	// The public link to the item being shared.
	Token string `json:"token" xml:"token"`
	// The unique id of the user that owns the file or folder being shared.
	UIDFileOwner string `json:"uid_file_owner" xml:"uid_file_owner"`
	// The display name of the user that owns the file or folder being shared.
	DisplaynameFileOwner string `json:"displayname_file_owner" xml:"displayname_file_owner"`
	// Additional info to identify the file owner, eg. the email or username
	AdditionalInfoFileOwner string `json:"additional_info_file_owner" xml:"additional_info_file_owner"`
	// share state, 0 = accepted, 1 = pending, 2 = declined
	State int `json:"state" xml:"state"`
	// The path to the shared file or folder.
	Path string `json:"path" xml:"path"`
	// The type of the object being shared. This can be one of 'file' or 'folder'.
	ItemType string `json:"item_type" xml:"item_type"`
	// The RFC2045-compliant mimetype of the file.
	MimeType  string `json:"mimetype" xml:"mimetype"`
	StorageID string `json:"storage_id" xml:"storage_id"`
	Storage   uint64 `json:"storage" xml:"storage"`
	// The unique node id of the item being shared.
	ItemSource string `json:"item_source" xml:"item_source"`
	// The unique node id of the item being shared. For legacy reasons item_source and file_source attributes have the same value.
	FileSource string `json:"file_source" xml:"file_source"`
	// The unique node id of the parent node of the item being shared.
	FileParent string `json:"file_parent" xml:"file_parent"`
	// The basename of the shared file.
	FileTarget string `json:"file_target" xml:"file_target"`
	// The uid of the share recipient. This is either
	// - a GID (group id) if it is being shared with a group or
	// - a UID (user id) if the share is shared with a user.
	// - a password for public links
	ShareWith string `json:"share_with,omitempty" xml:"share_with,omitempty"`
	// The display name of the share recipient
	ShareWithDisplayname string `json:"share_with_displayname,omitempty" xml:"share_with_displayname,omitempty"`
	// Additional info to identify the share recipient, eg. the email or username
	ShareWithAdditionalInfo string `json:"share_with_additional_info" xml:"share_with_additional_info"`
	// Whether the recipient was notified, by mail, about the share being shared with them.
	MailSend int `json:"mail_send" xml:"mail_send"`
	// Name of the public share
	Name string `json:"name" xml:"name"`
	// URL of the public share
	URL string `json:"url,omitempty" xml:"url,omitempty"`
	// Attributes associated
	Attributes string `json:"attributes,omitempty" xml:"attributes,omitempty"`
}

ShareData represents https://doc.owncloud.com/server/developer_manual/core/ocs-share-api.html#response-attributes-1

func CS3Share2ShareData

func CS3Share2ShareData(ctx context.Context, share *collaboration.Share) (*ShareData, error)

CS3Share2ShareData converts a cs3api user share into shareData data model

func PublicShare2ShareData

func PublicShare2ShareData(share *link.PublicShare, r *http.Request, publicURL string) *ShareData

PublicShare2ShareData converts a cs3api public share into shareData data model

type ShareType

type ShareType int

ShareType denotes a type of share

const (
	// ShareTypeUser refers to user shares
	ShareTypeUser ShareType = 0

	// ShareTypePublicLink refers to public link shares
	ShareTypePublicLink ShareType = 3

	// ShareTypeGroup represents a group share
	ShareTypeGroup ShareType = 1

	// ShareTypeFederatedCloudShare represents a federated share
	ShareTypeFederatedCloudShare ShareType = 6

	// ShareTypeSpaceMembership represents an action regarding space members
	ShareTypeSpaceMembership ShareType = 7
)

type ShareeData

type ShareeData struct {
	Exact   *ExactMatchesData `json:"exact" xml:"exact"`
	Users   []*MatchData      `json:"users" xml:"users>element"`
	Groups  []*MatchData      `json:"groups" xml:"groups>element"`
	Remotes []*MatchData      `json:"remotes" xml:"remotes>element"`
}

ShareeData holds share recipient search results

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL