diff --git a/changelog/unreleased/add-tus-global-capabilities.md b/changelog/unreleased/add-tus-global-capabilities.md new file mode 100644 index 0000000000..8b825b07b8 --- /dev/null +++ b/changelog/unreleased/add-tus-global-capabilities.md @@ -0,0 +1,9 @@ +Enhancement: Add TUS global capability + +The TUS global capabilities from Reva are now exposed. + +The advertised max chunk size can be configured using the "--upload-max-chunk-size" CLI switch or "REVA_FRONTEND_UPLOAD_MAX_CHUNK_SIZE" environment variable. +The advertised http method override can be configured using the "--upload-http-method-override" CLI switch or "REVA_FRONTEND_UPLOAD_HTTP_METHOD_OVERRIDE" environment variable. + +https://github.com/owncloud/ocis-reva/issues/177 +https://github.com/owncloud/ocis-reva/pull/228 diff --git a/pkg/command/frontend.go b/pkg/command/frontend.go index dd271311e6..0cc77fce4a 100644 --- a/pkg/command/frontend.go +++ b/pkg/command/frontend.go @@ -143,6 +143,13 @@ func Frontend(cfg *config.Config) *cli.Command { "blacklisted_files": []string{}, "undelete": true, "versioning": true, + "tus_support": map[string]interface{}{ + "version": "1.0.0", + "resumable": "1.0.0", + "extension": "creation,creation-with-upload", + "http_method_override": cfg.Reva.UploadHttpMethodOverride, + "max_chunk_size": int(cfg.Reva.UploadMaxChunkSize), + }, }, "dav": map[string]interface{}{}, "files_sharing": map[string]interface{}{ diff --git a/pkg/config/config.go b/pkg/config/config.go index 6641c20db0..671d046010 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -253,6 +253,9 @@ type Reva struct { // Configs can be used to configure the reva instance. // Services and Ports will be ignored if this is used Configs map[string]interface{} + // chunking and resumable upload config (TUS) + UploadMaxChunkSize int + UploadHttpMethodOverride string } // Tracing defines the available tracing configuration. diff --git a/pkg/flagset/frontend.go b/pkg/flagset/frontend.go index ac660f3383..974a083e35 100644 --- a/pkg/flagset/frontend.go +++ b/pkg/flagset/frontend.go @@ -157,5 +157,21 @@ func FrontendWithConfig(cfg *config.Config) []cli.Flag { EnvVars: []string{"REVA_GATEWAY_URL"}, Destination: &cfg.Reva.Gateway.URL, }, + + // Chunking + &cli.IntFlag{ + Name: "upload-max-chunk-size", + Value: 0, + Usage: "Max chunk size in bytes to advertise to clients through capabilities", + EnvVars: []string{"REVA_FRONTEND_UPLOAD_MAX_CHUNK_SIZE"}, + Destination: &cfg.Reva.UploadMaxChunkSize, + }, + &cli.StringFlag{ + Name: "upload-http-method-override", + Value: "", + Usage: "Specify an HTTP method (ex: POST) to use when uploading in case OPTIONS and PATCH are not available", + EnvVars: []string{"REVA_FRONTEND_UPLOAD_HTTP_METHOD_OVERRIDE"}, + Destination: &cfg.Reva.UploadHttpMethodOverride, + }, } }