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
- Variables
- func GetPublicShareManager(manager string, m map[string]map[string]interface{}) (publicshare.Manager, error)
- func GetUserManager(manager string, m map[string]map[string]interface{}) (user.Manager, error)
- func LocalGroupIDToString(groupID *grouppb.GroupId) string
- func LocalUserIDToString(userID *userpb.UserId) string
- func ParseTimestamp(timestampString string) (*types.Timestamp, error)
- func SufficientCS3Permissions(existing, requested *provider.ResourcePermissions) bool
- func UserTypeString(userType userpb.UserType) string
- type ExactMatchesData
- type MatchData
- type MatchValueData
- type Permissions
- type ResourceType
- type Role
- func NewCoownerRole() *Role
- func NewDeniedRole() *Role
- func NewEditorListGrantsRole() *Role
- func NewEditorLiteRole() *Role
- func NewEditorRole() *Role
- func NewFileEditorListGrantsRole() *Role
- func NewFileEditorRole() *Role
- func NewLegacyRoleFromOCSPermissions(p Permissions) *Role
- func NewManagerRole() *Role
- func NewNoneRole() *Role
- func NewSecureViewerRole() *Role
- func NewSpaceEditorRole() *Role
- func NewSpaceEditorWithoutVersionsRole() *Role
- func NewSpaceViewerRole() *Role
- func NewUnknownRole() *Role
- func NewUploaderRole() *Role
- func NewViewerListGrantsRole() *Role
- func NewViewerRole() *Role
- func RoleFromName(name string) *Role
- func RoleFromOCSPermissions(p Permissions, ri *provider.ResourceInfo) *Role
- func RoleFromResourcePermissions(rp *provider.ResourcePermissions, islink bool) *Role
- type ShareData
- func CS3Share2ShareData(ctx context.Context, share *collaboration.Share) *ShareData
- func OCMShare2ShareData(share *ocm.Share) (*ShareData, error)
- func PublicShare2ShareData(share *link.PublicShare, r *http.Request, publicURL string) *ShareData
- func ReceivedOCMShare2ShareData(share *ocm.ReceivedShare, path string) (*ShareData, error)
- type ShareType
- type ShareWithUserType
- type ShareeData
- type TokenInfo
Constants ¶
const ( ShareType = 0 ShareTypePublicLink ShareType = 3 ShareTypeGroup ShareType = 1 ShareTypeFederatedCloudShare ShareType = 6 ShareTypeSpaceMembershipUser ShareType = 7 ShareTypeSpaceMembershipGroup ShareType = 8 ShareWithUserTypeUser ShareWithUserType = 0 ShareWithUserTypeGuest ShareWithUserType = 1 )ShareTypeUser
const ( // RoleViewer grants non-editor role on a resource. RoleViewer = "viewer" // RoleViewerListGrants grants non-editor role on a resource. RoleViewerListGrants = "viewer-list-grants" // RoleSpaceViewer grants non-editor role on a space. RoleSpaceViewer = "spaceviewer" // RoleEditor grants editor permission on a resource, including folders. RoleEditor = "editor" // RoleEditorListGrants grants editor permission on a resource, including folders. RoleEditorListGrants = "editor-list-grants" // RoleSpaceEditor grants editor permission on a space. RoleSpaceEditor = "spaceeditor" // RoleSpaceEditorWithoutVersions grants editor permission without list/restore versions on a space. RoleSpaceEditorWithoutVersions = "spaceeditor-without-versions" // RoleFileEditor grants editor permission on a single file. RoleFileEditor = "file-editor" // RoleFileEditorListGrants grants editor permission on a single file. RoleFileEditorListGrants = "file-editor-list-grants" // RoleCoowner grants co-owner permissions on a resource. RoleCoowner = "coowner" // RoleEditorLite grants permission to upload and download to a resource. RoleEditorLite = "editor-lite" // RoleUploader grants uploader permission to upload onto a resource (no download). RoleUploader = "uploader" // RoleManager grants manager permissions on a resource. Semantically equivalent to co-owner. RoleManager = "manager" // RoleSecureViewer grants secure view permissions on a resource or space. RoleSecureViewer = "secure-viewer" // 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 ¶
var ( // ErrPermissionNotInRange defines a permission specific error. ErrPermissionNotInRange = fmt.Errorf("The provided permission is not between %d and %d", PermissionMinInput, PermissionMaxInput) // ErrZeroPermission defines a permission specific error ErrZeroPermission = errors.New("permission is zero") )
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 ¶
GetUserManager returns a connection to a user share manager
func LocalGroupIDToString ¶
LocalGroupIDToString transforms a cs3api group id into an ocs data model without domain name
func LocalUserIDToString ¶
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 ¶
ParseTimestamp tries to parse the ocs expiry into a CS3 Timestamp
func SufficientCS3Permissions ¶
func SufficientCS3Permissions(existing, requested *provider.ResourcePermissions) bool
SufficientCS3Permissions returns true if the `existing` permissions contain the `requested` permissions
func UserTypeString ¶
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 { UserType int `json:"userType" xml:"userType"` }
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 // PermissionAll grants all permissions on a resource PermissionAll Permissions = (1 << (iota - 1)) - 1 // PermissionMaxInput is to be used within value range checks PermissionMaxInput = PermissionAll // PermissionMinInput is to be used within value range checks PermissionMinInput = PermissionRead // PermissionsNone is to be used to deny access on a resource PermissionsNone = 64 )
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.
func (Permissions) String ¶
func (p Permissions) String() string
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 NewEditorListGrantsRole ¶ added in v2.24.0
func NewEditorListGrantsRole() *Role
NewEditorListGrantsRole creates an editor role. `sharing` indicates if sharing permission should be added
func NewEditorLiteRole ¶ added in v2.20.0
func NewEditorLiteRole() *Role
NewEditorLiteRole creates an editor-lite role
func NewEditorRole ¶
func NewEditorRole() *Role
NewEditorRole creates an editor role. `sharing` indicates if sharing permission should be added
func NewFileEditorListGrantsRole ¶ added in v2.24.0
func NewFileEditorListGrantsRole() *Role
NewFileEditorListGrantsRole creates a file-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 NewSecureViewerRole ¶ added in v2.20.0
func NewSecureViewerRole() *Role
NewSecureViewerRole creates a secure viewer role
func NewSpaceEditorWithoutVersionsRole ¶ added in v2.24.0
func NewSpaceEditorWithoutVersionsRole() *Role
NewSpaceEditorWithoutVersionsRole creates an editor without list/restore versions role
func NewSpaceViewerRole ¶
func NewSpaceViewerRole() *Role
NewSpaceViewerRole creates a spaceviewer 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 with no download permissions
func NewViewerListGrantsRole ¶ added in v2.24.0
func NewViewerListGrantsRole() *Role
NewViewerListGrantsRole creates a viewer role. `sharing` indicates if sharing permission should be added
func NewViewerRole ¶
func NewViewerRole() *Role
NewViewerRole creates a viewer role. `sharing` indicates if sharing permission should be added
func RoleFromOCSPermissions ¶
func RoleFromOCSPermissions(p Permissions, ri *provider.ResourceInfo) *Role
RoleFromOCSPermissions tries to map ocs permissions to a role TODO: rethink using this. ocs permissions cannot be assigned 1:1 to roles
func RoleFromResourcePermissions ¶
func RoleFromResourcePermissions(rp *provider.ResourcePermissions, islink bool) *Role
RoleFromResourcePermissions tries to map cs3 resource permissions to a role It needs to know whether this is a link or not, because empty permissions on links mean "INTERNAL LINK" while empty permissions on other resources mean "DENIAL". Obviously this is not optimal.
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 ¶
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) P = Purge from trashbin X = SecureViewable
type ShareData ¶
type ShareData struct { string `json:"id" xml:"id"` ShareType ShareType `json:"share_type" xml:"share_type"` UIDOwner string `json:"uid_owner" xml:"uid_owner"` DisplaynameOwner string `json:"displayname_owner" xml:"displayname_owner"` AdditionalInfoOwner string `json:"additional_info_owner" xml:"additional_info_owner"` // TODO(jfd) change the default to read only Permissions Permissions `json:"permissions" xml:"permissions"` STime uint64 `json:"stime" xml:"stime"` Parent string `json:"parent" xml:"parent"` Expiration string `json:"expiration" xml:"expiration"` Token string `json:"token" xml:"token"` UIDFileOwner string `json:"uid_file_owner" xml:"uid_file_owner"` DisplaynameFileOwner string `json:"displayname_file_owner" xml:"displayname_file_owner"` AdditionalInfoFileOwner string `json:"additional_info_file_owner" xml:"additional_info_file_owner"` State int `json:"state" xml:"state"` Path string `json:"path" xml:"path"` ItemType string `json:"item_type" xml:"item_type"` MimeType string `json:"mimetype" xml:"mimetype"` SpaceID string `json:"space_id" xml:"space_id"` // The space alias of the original file location ItemSource string `json:"item_source" xml:"item_source"` FileSource string `json:"file_source" xml:"file_source"` FileParent string `json:"file_parent" xml:"file_parent"` FileTarget string `json:"file_target" xml:"file_target"` // - 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"` // - 0 = normal user // - 1 = guest account ShareWithUserType ShareWithUserType `json:"share_with_user_type" xml:"share_with_user_type"` ShareWithDisplayname string `json:"share_with_displayname,omitempty" xml:"share_with_displayname,omitempty"` ShareWithAdditionalInfo string `json:"share_with_additional_info" xml:"share_with_additional_info"` MailSend int `json:"mail_send" xml:"mail_send"` Name string `json:"name" xml:"name"` URL string `json:"url,omitempty" xml:"url,omitempty"` Attributes string `json:"attributes,omitempty" xml:"attributes,omitempty"` Quicklink bool `json:"quicklink,omitempty" xml:"quicklink,omitempty"` // PasswordProtected bool `json:"password_protected,omitempty" xml:"password_protected,omitempty"` Hidden bool `json:"hidden" xml:"hidden"` }ID
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
CS3Share2ShareData converts a cs3api user share into shareData data model
func OCMShare2ShareData ¶
OCMShare2ShareData converts a cs3 ocm share into a share data model.
func PublicShare2ShareData ¶
PublicShare2ShareData converts a cs3api public share into shareData data model
func ReceivedOCMShare2ShareData ¶
func ReceivedOCMShare2ShareData(share *ocm.ReceivedShare, path string) (*ShareData, error)
ReceivedOCMShare2ShareData converts a cs3 ocm received share into a share data model.
type TokenInfo ¶
type TokenInfo struct { // for all callers Token string `json:"token" xml:"token"` LinkURL string `json:"link_url" xml:"link_url"` PasswordProtected bool `json:"password_protected" xml:"password_protected"` Aliaslink bool `json:"alias_link" xml:"alias_link"` // if not password protected ID string `json:"id" xml:"id"` StorageID string `json:"storage_id" xml:"storage_id"` SpaceID string `json:"space_id" xml:"space_id"` OpaqueID string `json:"opaque_id" xml:"opaque_id"` Path string `json:"path" xml:"path"` // if native access SpacePath string `json:"space_path" xml:"space_path"` SpaceAlias string `json:"space_alias" xml:"space_alias"` SpaceURL string `json:"space_url" xml:"space_url"` SpaceType string `json:"space_type" xml:"space_type"` }
TokenInfo holds token information