diff --git a/go.mod b/go.mod index eb32fc6007..f64e6a953b 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/blevesearch/bleve/v2 v2.1.0 github.com/coreos/go-oidc/v3 v3.0.0 github.com/cs3org/go-cs3apis v0.0.0-20210916072651-dd30db9dbe58 - github.com/cs3org/reva v1.13.1-0.20210921133241-ce466cb89fdc + github.com/cs3org/reva v1.13.1-0.20210923072026-e96fa872a8f5 github.com/disintegration/imaging v1.6.2 github.com/glauth/glauth v1.1.3-0.20210729125545-b9aecdfcac31 github.com/go-chi/chi/v5 v5.0.4 diff --git a/go.sum b/go.sum index d6b6c7bd4c..38bafe5cea 100644 --- a/go.sum +++ b/go.sum @@ -291,8 +291,8 @@ github.com/crewjam/saml v0.4.5/go.mod h1:qCJQpUtZte9R1ZjUBcW8qtCNlinbO363ooNl02S github.com/cs3org/cato v0.0.0-20200828125504-e418fc54dd5e/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= github.com/cs3org/go-cs3apis v0.0.0-20210916072651-dd30db9dbe58 h1:BxySl8qrPon7Yd98Ly8y45esk1zKaddnatKSgeoblXY= github.com/cs3org/go-cs3apis v0.0.0-20210916072651-dd30db9dbe58/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/reva v1.13.1-0.20210921133241-ce466cb89fdc h1:AS7xNqqxpsrg+xbTQU1GxBl0Tquiq7zH96iISsiXVVU= -github.com/cs3org/reva v1.13.1-0.20210921133241-ce466cb89fdc/go.mod h1:FQw3Asg4VbzthnQPRELjJPxGCSwvMq9FOWjJ1/r1ImU= +github.com/cs3org/reva v1.13.1-0.20210923072026-e96fa872a8f5 h1:qpmh61BjoH5GRg+XtLSW3J58QDa2sk58Ul9NXCAnqKE= +github.com/cs3org/reva v1.13.1-0.20210923072026-e96fa872a8f5/go.mod h1:FQw3Asg4VbzthnQPRELjJPxGCSwvMq9FOWjJ1/r1ImU= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= diff --git a/ocs/pkg/service/v0/data/capabilities.go b/ocs/pkg/service/v0/data/capabilities.go deleted file mode 100644 index e567df8453..0000000000 --- a/ocs/pkg/service/v0/data/capabilities.go +++ /dev/null @@ -1,171 +0,0 @@ -package data - -import ( - "encoding/xml" -) - -// ocsBool implements the xml/json Marshaler interface. The OCS API inconsistency require us to parse boolean values -// as native booleans for json requests but "truthy" 0/1 values for xml requests. -type ocsBool bool - -func (c *ocsBool) MarshalJSON() ([]byte, error) { - if *c { - return []byte("true"), nil - } - - return []byte("false"), nil -} - -func (c ocsBool) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if c { - return e.EncodeElement("1", start) - } - - return e.EncodeElement("0", start) -} - -// CapabilitiesData TODO document -type CapabilitiesData struct { - Capabilities *Capabilities `json:"capabilities" xml:"capabilities"` - Version *Version `json:"version" xml:"version"` -} - -// Capabilities groups several capability aspects -type Capabilities struct { - Core *CapabilitiesCore `json:"core" xml:"core"` - Checksums *CapabilitiesChecksums `json:"checksums" xml:"checksums"` - Files *CapabilitiesFiles `json:"files" xml:"files" mapstructure:"files"` - Dav *CapabilitiesDav `json:"dav" xml:"dav"` - FilesSharing *CapabilitiesFilesSharing `json:"files_sharing" xml:"files_sharing" mapstructure:"files_sharing"` - Notifications *CapabilitiesNotifications `json:"notifications" xml:"notifications"` -} - -// CapabilitiesCore holds webdav config -type CapabilitiesCore struct { - PollInterval int `json:"pollinterval" xml:"pollinterval" mapstructure:"poll_interval"` - WebdavRoot string `json:"webdav-root,omitempty" xml:"webdav-root,omitempty" mapstructure:"webdav_root"` - Status *Status `json:"status" xml:"status" mapstructure:"status"` - SupportURLSigning ocsBool `json:"support-url-signing,omitempty" xml:"support-url-signing,omitempty" mapstructure:"support-url-signing"` -} - -// Status holds basic status information -type Status struct { - Installed ocsBool `json:"installed" xml:"installed"` - Maintenance ocsBool `json:"maintenance" xml:"maintenance"` - NeedsDBUpgrade ocsBool `json:"needsDbUpgrade" xml:"needsDbUpgrade"` - Version string `json:"version" xml:"version"` - VersionString string `json:"versionstring" xml:"versionstring"` - Edition string `json:"edition" xml:"edition"` - ProductName string `json:"productname" xml:"productname"` - Hostname string `json:"hostname,omitempty" xml:"hostname,omitempty"` -} - -// CapabilitiesChecksums holds available hashes -type CapabilitiesChecksums struct { - SupportedTypes []string `json:"supportedTypes" xml:"supportedTypes>element" mapstructure:"supported_types"` - PreferredUploadType string `json:"preferredUploadType" xml:"preferredUploadType" mapstructure:"preferred_upload_type"` -} - -// CapabilitiesFilesTusSupport TODO this must be a summary of storages -type CapabilitiesFilesTusSupport struct { - Version string `json:"version" xml:"version"` - Resumable string `json:"resumable" xml:"resumable"` - Extension string `json:"extension" xml:"extension"` - MaxChunkSize int `json:"max_chunk_size" xml:"max_chunk_size" mapstructure:"max_chunk_size"` - HTTPMethodOverride string `json:"http_method_override" xml:"http_method_override" mapstructure:"http_method_override"` -} - -// CapabilitiesFiles TODO this is storage specific, not global. What effect do these options have on the clients? -type CapabilitiesFiles struct { - PrivateLinks ocsBool `json:"privateLinks" xml:"privateLinks" mapstructure:"private_links"` - BigFileChunking ocsBool `json:"bigfilechunking" xml:"bigfilechunking"` - Undelete ocsBool `json:"undelete" xml:"undelete"` - Versioning ocsBool `json:"versioning" xml:"versioning"` - BlacklistedFiles []string `json:"blacklisted_files" xml:"blacklisted_files>element" mapstructure:"blacklisted_files"` - TusSupport *CapabilitiesFilesTusSupport `json:"tus_support" xml:"tus_support" mapstructure:"tus_support"` -} - -// CapabilitiesDav holds dav endpoint config -type CapabilitiesDav struct { - Chunking string `json:"chunking" xml:"chunking"` - Trashbin string `json:"trashbin" xml:"trashbin"` - Reports []string `json:"reports" xml:"reports>element" mapstructure:"reports"` - ChunkingParallelUploadDisabled bool `json:"chunkingParallelUploadDisabled" xml:"chunkingParallelUploadDisabled"` -} - -// CapabilitiesFilesSharing TODO document -type CapabilitiesFilesSharing struct { - APIEnabled ocsBool `json:"api_enabled" xml:"api_enabled" mapstructure:"api_enabled"` - Resharing ocsBool `json:"resharing" xml:"resharing"` - GroupSharing ocsBool `json:"group_sharing" xml:"group_sharing" mapstructure:"group_sharing"` - AutoAcceptShare ocsBool `json:"auto_accept_share" xml:"auto_accept_share" mapstructure:"auto_accept_share"` - ShareWithGroupMembersOnly ocsBool `json:"share_with_group_members_only" xml:"share_with_group_members_only" mapstructure:"share_with_group_members_only"` - ShareWithMembershipGroupsOnly ocsBool `json:"share_with_membership_groups_only" xml:"share_with_membership_groups_only" mapstructure:"share_with_membership_groups_only"` - SearchMinLength int `json:"search_min_length" xml:"search_min_length" mapstructure:"search_min_length"` - DefaultPermissions int `json:"default_permissions" xml:"default_permissions" mapstructure:"default_permissions"` - UserEnumeration *CapabilitiesFilesSharingUserEnumeration `json:"user_enumeration" xml:"user_enumeration" mapstructure:"user_enumeration"` - Federation *CapabilitiesFilesSharingFederation `json:"federation" xml:"federation"` - Public *CapabilitiesFilesSharingPublic `json:"public" xml:"public"` - User *CapabilitiesFilesSharingUser `json:"user" xml:"user"` -} - -// CapabilitiesFilesSharingPublic TODO document -type CapabilitiesFilesSharingPublic struct { - Enabled ocsBool `json:"enabled" xml:"enabled"` - SendMail ocsBool `json:"send_mail" xml:"send_mail" mapstructure:"send_mail"` - SocialShare ocsBool `json:"social_share" xml:"social_share" mapstructure:"social_share"` - Upload ocsBool `json:"upload" xml:"upload"` - Multiple ocsBool `json:"multiple" xml:"multiple"` - SupportsUploadOnly ocsBool `json:"supports_upload_only" xml:"supports_upload_only" mapstructure:"supports_upload_only"` - Password *CapabilitiesFilesSharingPublicPassword `json:"password" xml:"password"` - ExpireDate *CapabilitiesFilesSharingPublicExpireDate `json:"expire_date" xml:"expire_date" mapstructure:"expire_date"` -} - -// CapabilitiesFilesSharingPublicPassword TODO document -type CapabilitiesFilesSharingPublicPassword struct { - EnforcedFor *CapabilitiesFilesSharingPublicPasswordEnforcedFor `json:"enforced_for" xml:"enforced_for" mapstructure:"enforced_for"` - Enforced ocsBool `json:"enforced" xml:"enforced"` -} - -// CapabilitiesFilesSharingPublicPasswordEnforcedFor TODO document -type CapabilitiesFilesSharingPublicPasswordEnforcedFor struct { - ReadOnly ocsBool `json:"read_only" xml:"read_only,omitempty" mapstructure:"read_only"` - ReadWrite ocsBool `json:"read_write" xml:"read_write,omitempty" mapstructure:"read_write"` - UploadOnly ocsBool `json:"upload_only" xml:"upload_only,omitempty" mapstructure:"upload_only"` -} - -// CapabilitiesFilesSharingPublicExpireDate TODO document -type CapabilitiesFilesSharingPublicExpireDate struct { - Enabled ocsBool `json:"enabled" xml:"enabled"` -} - -// CapabilitiesFilesSharingUser TODO document -type CapabilitiesFilesSharingUser struct { - SendMail ocsBool `json:"send_mail" xml:"send_mail" mapstructure:"send_mail"` -} - -// CapabilitiesFilesSharingUserEnumeration TODO document -type CapabilitiesFilesSharingUserEnumeration struct { - Enabled ocsBool `json:"enabled" xml:"enabled"` - GroupMembersOnly ocsBool `json:"group_members_only" xml:"group_members_only" mapstructure:"group_members_only"` -} - -// CapabilitiesFilesSharingFederation holds outgoing and incoming flags -type CapabilitiesFilesSharingFederation struct { - Outgoing ocsBool `json:"outgoing" xml:"outgoing"` - Incoming ocsBool `json:"incoming" xml:"incoming"` -} - -// CapabilitiesNotifications holds a list of notification endpoints -type CapabilitiesNotifications struct { - Endpoints []string `json:"ocs-endpoints" xml:"ocs-endpoints>element" mapstructure:"endpoints"` -} - -// Version holds version information -type Version struct { - Major int `json:"major" xml:"major"` - Minor int `json:"minor" xml:"minor"` - Micro int `json:"micro" xml:"micro"` // = patch level - String string `json:"string" xml:"string"` - Edition string `json:"edition" xml:"edition"` -} diff --git a/storage/pkg/command/frontend.go b/storage/pkg/command/frontend.go index 36d424a798..aee7807741 100644 --- a/storage/pkg/command/frontend.go +++ b/storage/pkg/command/frontend.go @@ -54,12 +54,32 @@ func Frontend(cfg *config.Config) *cli.Command { desktopRedirectURIs[port] = fmt.Sprintf("http://localhost:%d", (port + 1024)) } + archivers := []map[string]interface{}{ + { + "enabled": true, + "version": "2.0.0", + "formats": []string{"tar", "zip"}, + "archiver_url": cfg.Reva.Archiver.ArchiverURL, + }, + } + + appProviders := []map[string]interface{}{ + { + "enabled": true, + "version": "1.0.0", + "apps_url": cfg.Reva.AppProvider.AppsURL, + "open_url": cfg.Reva.AppProvider.OpenURL, + }, + } + filesCfg := map[string]interface{}{ "private_links": false, "bigfilechunking": false, "blacklisted_files": []string{}, "undelete": true, "versioning": true, + "archivers": archivers, + "app_providers": appProviders, } if cfg.Reva.DefaultUploadProtocol == "tus" { diff --git a/storage/pkg/config/config.go b/storage/pkg/config/config.go index 4b374a292b..5d377820fa 100644 --- a/storage/pkg/config/config.go +++ b/storage/pkg/config/config.go @@ -45,6 +45,8 @@ type AppProvider struct { ExternalAddr string Driver string WopiDriver WopiDriver + AppsURL string + OpenURL string } type WopiDriver struct { @@ -415,6 +417,7 @@ type OCDav struct { type Archiver struct { MaxNumFiles int64 MaxSize int64 + ArchiverURL string } // Reva defines the available reva configuration. diff --git a/storage/pkg/flagset/frontend.go b/storage/pkg/flagset/frontend.go index 71faba4235..93212bc9bf 100644 --- a/storage/pkg/flagset/frontend.go +++ b/storage/pkg/flagset/frontend.go @@ -217,6 +217,31 @@ func FrontendWithConfig(cfg *config.Config) []cli.Flag { Destination: &cfg.Reva.ChecksumPreferredUploadType, }, + // Archiver + &cli.StringFlag{ + Name: "archiver-url", + Value: flags.OverrideDefaultString(cfg.Reva.Archiver.ArchiverURL, "/archiver"), + Usage: "URL where the archiver is reachable", + EnvVars: []string{"STORAGE_FRONTEND_ARCHIVER_URL"}, + Destination: &cfg.Reva.Archiver.ArchiverURL, + }, + + // App Provider + &cli.StringFlag{ + Name: "appprovider-apps-url", + Value: flags.OverrideDefaultString(cfg.Reva.AppProvider.AppsURL, "/app/list"), + Usage: "URL where the app listing of the app provider is reachable", + EnvVars: []string{"STORAGE_FRONTEND_APP_PROVIDER_APPS_URL"}, + Destination: &cfg.Reva.AppProvider.AppsURL, + }, + &cli.StringFlag{ + Name: "appprovider-open-url", + Value: flags.OverrideDefaultString(cfg.Reva.AppProvider.OpenURL, "/app/open"), + Usage: "URL where files can be handed over to an application from the app provider", + EnvVars: []string{"STORAGE_FRONTEND_APP_PROVIDER_OPEN_URL"}, + Destination: &cfg.Reva.AppProvider.OpenURL, + }, + // Reva Middlewares Config &cli.StringSliceFlag{ Name: "user-agent-whitelist-lock-in",