conversions

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2020 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package conversions sits between CS3 type definitions and OCS API Responses

Index

Constants

View Source
const (
	// RoleLegacy provides backwards compatibility
	RoleLegacy string = "legacy"
	// RoleViewer grants non-editor role on a resource
	RoleViewer string = "viewer"
	// RoleEditor grants editor permission on a resource
	RoleEditor string = "editor"
	// RoleCoowner grants owner permissions on a resource
	RoleCoowner string = "coowner"
)

Variables

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

Functions

func AsCS3Permissions added in v0.1.0

AsCS3Permissions returns permission values as cs3api permissions TODO sort out mapping, this is just a first guess TODO use roles to make this configurable

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 LocalUserIDToString

func LocalUserIDToString(userID *userpb.UserId) string

LocalUserIDToString transforms a cs3api user id into an ocs data model without domain name

func Permissions2Role added in v0.1.0

func Permissions2Role(p Permissions) string

Permissions2Role performs permission conversions for user and federated shares

func Role2CS3Permissions added in v0.1.0

func Role2CS3Permissions(r string) (*provider.ResourcePermissions, error)

Role2CS3Permissions converts string roles (from the request body) into cs3 permissions TODO(refs) consider using a mask instead of booleans here, might reduce all this boilerplate

func UserIDToString added in v0.1.0

func UserIDToString(userID *userpb.UserId) string

UserIDToString transforms a cs3api user id into an ocs data model TODO This should be used instead of LocalUserIDToString bit it requires interpreting an @ on the client side TODO An alternative would be to send the idp / iss as an additional attribute. might be less intrusive

Types

type ExactMatchesData

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

ExactMatchesData hold exact matches

type MatchData

type MatchData struct {
	Label string          `json:"label" xml:"label"`
	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"`
}

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 grants no permissions on a resource
	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
	// PermissionAll grants all permissions on a resource
	PermissionAll Permissions = (1 << (iota - 1)) - 1
)

func NewPermissions

func NewPermissions(val int) (Permissions, error)

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

func Permissions2OCSPermissions added in v1.1.0

func Permissions2OCSPermissions(p *provider.ResourcePermissions) Permissions

TODO sort out mapping, this is just a first guess public link permissions to OCS permissions

func UserSharePermissions2OCSPermissions added in v0.1.0

func UserSharePermissions2OCSPermissions(sp *collaboration.SharePermissions) Permissions

UserSharePermissions2OCSPermissions transforms cs3api permissions into OCS Permissions data model

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 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"`
	// 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"`
	// ?
	AdditionalInfoOwner string `json:"additional_info_owner" xml:"additional_info_owner"`
	// ?
	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 receiver of the file. 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.
	ShareWith string `json:"share_with,omitempty" xml:"share_with,omitempty"`
	// The display name of the receiver of the file.
	ShareWithDisplayname string `json:"share_with_displayname,omitempty" xml:"share_with_displayname,omitempty"`
	// sharee Additional info
	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 PublicShare2ShareData

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

PublicShare2ShareData converts a cs3api public share into shareData data model

func UserShare2ShareData added in v1.3.0

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

UserShare2ShareData converts a cs3api user share into shareData data model TODO(jfd) merge userShare2ShareData with publicShare2ShareData

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

	// ShareTypeFederatedCloudShare represents a federated share
	ShareTypeFederatedCloudShare ShareType = 6
)

type ShareeData

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

ShareeData holds share recipient search results

Jump to

Keyboard shortcuts

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