Frontend
The frontend service translates various owncloud related HTTP APIs to CS3 requests.
Currently, the frontend service handles requests for three functionalities, which are appprovider
, archiver
, datagateway
and ocs
.
The appprovider endpoint, by default /app
, forwards HTTP requests to the CS3 App Registry API
The archiver endpoint, by default /archiver
, implements zip and tar download for collections of files. It will internally use the CS3 API to initiate downloads and then stream the individual files as part of a compressed file.
The datagateway endpoint, by default /data
, forwards file up- and download requests to the correct CS3 data provider. OCIS starts a dataprovider as part of the storage-* services. The routing happens based on the JWT that was created by a storage provider in response to an InitiateFileDownload
or InitiateFileUpload
request.
The ocs endpoint, by default /ocs
, implements the ownCloud 10 Open Collaboration Services API by translating it into CS3 API requests. It can handle users, groups, capabilities and also implements the files sharing functionality on top of CS3. The /ocs/v[12].php/cloud/user/signing-key
is currently handled by the dedicated ocs service.
The frontend
service contains an eventhandler for handling ocs
related events. As of now, it only listens to the ShareCreated
event.
Aggregating share information is one of the most time consuming operations in OCIS. The service fetches a list of either received or created shares and has to stat every resource individually. While stats are fast, the default behavior scales linearly with the number of shares.
To save network trips the sharing implementation can cache the stat requests with an in memory cache or in Redis. It will shorten the response time by the network round-trip overhead at the cost of the API only eventually being updated.
Setting FRONTEND_OCS_RESOURCE_INFO_CACHE_TTL=60
would cache the stat info for 60 seconds. Increasing this value makes sense for large deployments with thousands of active users that keep the cache up to date. Low frequency usage scenarios should not expect a noticeable improvement.
While the frontend service does not persist any data, it does cache information about files and filesystem (Stat()
) responses and user information. Therefore, multiple instances of this service can be spawned in a bigger deployment like when using container orchestration with Kubernetes, when configuring FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE
and the related config options.
A lot of user management is made via the standardized libregraph API. Depending on how the system is configured, there might be some user attributes that an ocis instance admin can’t change because of properties coming from an external LDAP server, or similar. This can be the case when the ocis admin is not the LDAP admin. To ease life for admins, there are hints as capabilites telling the frontend which attributes are read-only to enable a different optical representation like being grayed out. To configure these hints, use the environment variable FRONTEND_READONLY_USER_ATTRIBUTES
, which takes a comma separated list of attributes, see the envvar for supported values.
You can find more details regarding available attributes at the libre-graph-api openapi-spec and on owncloud.dev.
The frontend
service can use a configured store via FRONTEND_OCS_STAT_CACHE_STORE
. Possible stores are:
memory
: Basic in-memory store and the default.redis-sentinel
: Stores data in a configured Redis Sentinel cluster.nats-js-kv
: Stores data using key-value-store feature of nats jetstreamnoop
: Stores nothing. Useful for testing. Not recommended in production environments.
Other store types may work but are not supported currently.
Note: The service can only be scaled if not using memory
store and the stores are configured identically over all instances!
Note that if you have used one of the deprecated stores, you should reconfigure to one of the supported ones as the deprecated stores will be removed in a later version.
Store specific notes:
- When using
redis-sentinel
, the Redis master to use is configured via e.g.OCIS_CACHE_STORE_NODES
in the form of<sentinel-host>:<sentinel-port>/<redis-master>
like10.10.0.200:26379/mymaster
. - When using
nats-js-kv
it is recommended to setOCIS_CACHE_STORE_NODES
to the same value asOCIS_EVENTS_ENDPOINT
. That way the cache uses the same nats instance as the event bus. - When using the
nats-js-kv
store, it is possible to setOCIS_CACHE_DISABLE_PERSISTENCE
to instruct nats to not persist cache data on disc.
When setting the FRONTEND_AUTO_ACCEPT_SHARES
to true
, all incoming shares will be accepted automatically. Users can overwrite this setting individually in their profile.
Note that the password policy currently impacts only public link password validation.
In Infinite Scale, the password policy is always enabled because the max-length restriction is always applying and should be taken into account by the clients.
With the password policy, mandatory criteria for the password can be defined via the environment variables listed below.
Generally, a password can contain any UTF-8 characters, however some characters are regarded as special since they are not used in ordinary texts. Which characters should be treated as special is defined by “The OWASP® Foundation” password-special-characters (between double quotes): " !"#$%&’()*+,-./:;<=>?@[]^_`{|}~"
The validation against the banned passwords list can be configured via a text file with words separated by new lines. If a user tries to set a password listed in the banned passwords list, the password can not be used (is invalid) even if the other mandatory criteria are passed. The admin can define the path of the banned passwords list file. If the file doesn’t exist in a location, Infinite Scale tries to load a file from the OCIS_CONFIG_DIR/OCIS_PASSWORD_POLICY_BANNED_PASSWORDS_LIST
. An option will be enabled when the file has been loaded successfully.
Following environment variables can be set to define the password policy behaviour:
OCIS_PASSWORD_POLICY_DISABLED
Disable the password policyOCIS_PASSWORD_POLICY_MIN_CHARACTERS
Define the minimum password length.OCIS_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS
Define the minimum number of uppercase letters.OCIS_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS
Define the minimum number of lowercase letters.OCIS_PASSWORD_POLICY_MIN_DIGITS
Define the minimum number of digits.OCIS_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS
Define the minimum number of special characters.OCIS_PASSWORD_POLICY_BANNED_PASSWORDS_LIST
Path to the ‘banned passwords list’ file.
These variables are global ocis variables because they are used not only in the frontend service, but also in the sharing service.
Note that a password can have a maximum length of 72 bytes. Depending on the alphabet used, a character is encoded by 1 to 4 bytes, defining the maximum length of a password indirectly. While US-ASCII will only need one byte, Latin alphabets and also Greek or Cyrillic ones need two bytes. Three bytes are needed for characters in Chinese, Japanese and Korean etc.
The capabilities endpoint (e.g. https://ocis.test/ocs/v1.php/cloud/capabilities?format=json) gives you following capabilities which are relevant for the password policy:
{
"ocs": {
"data": {
"capabilities": {
"password_policy": {
"min_characters": 10,
"max_characters": 72,
"min_lowercase_characters": 1,
"min_uppercase_characters": 2,
"min_digits": 1,
"min_special_characters": 1
}
}
}
}
}
For public accessible shares, independent if read only or writable, a password is enforced. To change this requirement, set the following environment variable to false
:
OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD
For public accessible writable shares, a password can be enforced. To change the current setting, set the following environment variable to true
:
OCIS_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD
Note that changing this environment variable only makes sense if
OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD
is set to false
.
|
|
Name | Type | Default Value | Description |
---|---|---|---|
OCIS_TRACING_ENABLED FRONTEND_TRACING_ENABLED |
bool | false | Activates tracing. |
OCIS_TRACING_TYPE FRONTEND_TRACING_TYPE |
string | The type of tracing. Defaults to ‘’, which is the same as ‘jaeger’. Allowed tracing types are ‘jaeger’ and ’’ as of now. | |
OCIS_TRACING_ENDPOINT FRONTEND_TRACING_ENDPOINT |
string | The endpoint of the tracing agent. | |
OCIS_TRACING_COLLECTOR FRONTEND_TRACING_COLLECTOR |
string | The HTTP endpoint for sending spans directly to a collector, i.e. http://jaeger-collector:14268/api/traces. Only used if the tracing endpoint is unset. | |
OCIS_LOG_LEVEL FRONTEND_LOG_LEVEL |
string | The log level. Valid values are: ‘panic’, ‘fatal’, ’error’, ‘warn’, ‘info’, ‘debug’, ’trace’. | |
OCIS_LOG_PRETTY FRONTEND_LOG_PRETTY |
bool | false | Activates pretty log output. |
OCIS_LOG_COLOR FRONTEND_LOG_COLOR |
bool | false | Activates colorized log output. |
OCIS_LOG_FILE FRONTEND_LOG_FILE |
string | The path to the log file. Activates logging to this file if set. | |
FRONTEND_DEBUG_ADDR | string | 127.0.0.1:9141 | Bind address of the debug server, where metrics, health, config and debug endpoints will be exposed. |
FRONTEND_DEBUG_TOKEN | string | Token to secure the metrics endpoint. | |
FRONTEND_DEBUG_PPROF | bool | false | Enables pprof, which can be used for profiling. |
FRONTEND_DEBUG_ZPAGES | bool | false | Enables zpages, which can be used for collecting and viewing in-memory traces. |
FRONTEND_HTTP_ADDR | string | 127.0.0.1:9140 | The bind address of the HTTP service. |
FRONTEND_HTTP_PROTOCOL | string | tcp | The transport protocol of the HTTP service. |
FRONTEND_HTTP_PREFIX | string | The Path prefix where the frontend can be accessed (defaults to /). | |
OCIS_CORS_ALLOW_ORIGINS FRONTEND_CORS_ALLOW_ORIGINS |
[]string | [https://localhost:9200] | A list of allowed CORS origins. See following chapter for more details: Access-Control-Allow-Origin at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin. See the Environment Variable Types description for more details. |
OCIS_CORS_ALLOW_METHODS FRONTEND_CORS_ALLOW_METHODS |
[]string | [OPTIONS HEAD GET PUT POST PATCH DELETE MKCOL PROPFIND PROPPATCH MOVE COPY REPORT SEARCH] | A list of allowed CORS methods. See following chapter for more details: Access-Control-Request-Method at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Request-Method. See the Environment Variable Types description for more details. |
OCIS_CORS_ALLOW_HEADERS FRONTEND_CORS_ALLOW_HEADERS |
[]string | [Origin Accept Content-Type Depth Authorization Ocs-Apirequest If-None-Match If-Match Destination Overwrite X-Request-Id X-Requested-With Tus-Resumable Tus-Checksum-Algorithm Upload-Concat Upload-Length Upload-Metadata Upload-Defer-Length Upload-Expires Upload-Checksum Upload-Offset X-HTTP-Method-Override Cache-Control] | A list of allowed CORS headers. See following chapter for more details: Access-Control-Request-Headers at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Request-Headers. See the Environment Variable Types description for more details. |
OCIS_CORS_ALLOW_CREDENTIALS FRONTEND_CORS_ALLOW_CREDENTIALS |
bool | false | Allow credentials for CORS.See following chapter for more details: Access-Control-Allow-Credentials at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials. |
OCIS_TRANSFER_SECRET | string | Transfer secret for signing file up- and download requests. | |
OCIS_JWT_SECRET FRONTEND_JWT_SECRET |
string | The secret to mint and validate jwt tokens. | |
OCIS_REVA_GATEWAY | string | com.owncloud.api.gateway | The CS3 gateway endpoint. |
OCIS_GRPC_CLIENT_TLS_MODE | string | TLS mode for grpc connection to the go-micro based grpc services. Possible values are ‘off’, ‘insecure’ and ‘on’. ‘off’: disables transport security for the clients. ‘insecure’ allows using transport security, but disables certificate verification (to be used with the autogenerated self-signed certificates). ‘on’ enables transport security, including server certificate verification. | |
OCIS_GRPC_CLIENT_TLS_CACERT | string | Path/File name for the root CA certificate (in PEM format) used to validate TLS server certificates of the go-micro based grpc services. | |
OCIS_MACHINE_AUTH_API_KEY FRONTEND_MACHINE_AUTH_API_KEY |
string | The machine auth API key used to validate internal requests necessary to access resources from other services. | |
FRONTEND_SKIP_USER_GROUPS_IN_TOKEN | bool | false | Disables the loading of user’s group memberships from the reva access token. |
FRONTEND_ENABLE_FAVORITES | bool | false | Enables the support for favorites in the clients. |
OCIS_SPACES_MAX_QUOTA FRONTEND_MAX_QUOTA |
uint64 | 0 | Set the global max quota value in bytes. A value of 0 equals unlimited. The value is provided via capabilities. |
FRONTEND_UPLOAD_MAX_CHUNK_SIZE | int | 10000000 | Sets the max chunk sizes in bytes for uploads via the clients. |
FRONTEND_UPLOAD_HTTP_METHOD_OVERRIDE | string | Advise TUS to replace PATCH requests by POST requests. | |
FRONTEND_DEFAULT_UPLOAD_PROTOCOL | string | tus | The default upload protocol to use in clients. Currently only ’tus’ is available. See the developer API documentation for more details about TUS. |
OCIS_ENABLE_OCM FRONTEND_ENABLE_FEDERATED_SHARING_INCOMING |
bool | false | Changing this value is NOT supported. Enables support for incoming federated sharing for clients. The backend behaviour is not changed. |
OCIS_ENABLE_OCM FRONTEND_ENABLE_FEDERATED_SHARING_OUTGOING |
bool | false | Changing this value is NOT supported. Enables support for outgoing federated sharing for clients. The backend behaviour is not changed. |
FRONTEND_SEARCH_MIN_LENGTH | int | 3 | Minimum number of characters to enter before a client should start a search for Share receivers. This setting can be used to customize the user experience if e.g too many results are displayed. |
OCIS_EDITION FRONTEND_EDITION |
string | Community | Edition of oCIS. Used for branding purposes. |
OCIS_DISABLE_SSE FRONTEND_DISABLE_SSE |
bool | false | When set to true, clients are informed that the Server-Sent Events endpoint is not accessible. |
FRONTEND_DEFAULT_LINK_PERMISSIONS | int | 1 | Defines the default permissions a link is being created with. Possible values are 0 (= internal link, for instance members only) and 1 (= public link with viewer permissions). Defaults to 1. |
OCIS_URL FRONTEND_PUBLIC_URL |
string | https://localhost:9200 | The public facing URL of the oCIS frontend. |
OCIS_MAX_CONCURRENCY FRONTEND_MAX_CONCURRENCY |
int | 1 | Maximum number of concurrent go-routines. Higher values can potentially get work done faster but will also cause more load on the system. Values of 0 or below will be ignored and the default value will be used. |
OCIS_INSECURE FRONTEND_APP_HANDLER_INSECURE |
bool | false | Allow insecure connections to the frontend. |
FRONTEND_APP_HANDLER_SECURE_VIEW_APP_ADDR | string | com.owncloud.api.collaboration | Service name or address of the app provider to use for secure view. Should match the service name or address of the registered CS3 app provider. |
FRONTEND_ARCHIVER_MAX_NUM_FILES | int64 | 10000 | Max number of files that can be packed into an archive. |
FRONTEND_ARCHIVER_MAX_SIZE | int64 | 1073741824 | Max size in bytes of the zip archive the archiver can create. |
OCIS_INSECURE FRONTEND_ARCHIVER_INSECURE |
bool | false | Allow insecure connections to the archiver. |
FRONTEND_DATA_GATEWAY_PREFIX | string | data | Path prefix for the data gateway. |
FRONTEND_OCS_PREFIX | string | ocs | URL path prefix for the OCS service. Note that the string must not start with ‘/’. |
FRONTEND_OCS_SHARE_PREFIX | string | /Shares | Path prefix for shares as part of an ocis resource. Note that the path must start with ‘/’. |
FRONTEND_OCS_PERSONAL_NAMESPACE | string | /users/{{.Id.OpaqueId}} | Home namespace identifier. |
FRONTEND_OCS_ADDITIONAL_INFO_ATTRIBUTE | string | {{.Mail}} | Additional information attribute for the user like {{.Mail}}. |
OCIS_CACHE_STORE FRONTEND_OCS_STAT_CACHE_STORE |
string | memory | The type of the cache store. Supported values are: ‘memory’, ‘redis-sentinel’, ’nats-js-kv’, ’noop’. See the text description for details. |
OCIS_CACHE_STORE_NODES FRONTEND_OCS_STAT_CACHE_STORE_NODES |
[]string | [127.0.0.1:9233] | A list of nodes to access the configured store. This has no effect when ‘memory’ store is configured. Note that the behaviour how nodes are used is dependent on the library of the configured store. See the Environment Variable Types description for more details. |
OCIS_CACHE_DATABASE | string | cache-stat | The database name the configured store should use. |
FRONTEND_OCS_STAT_CACHE_TABLE | string | The database table the store should use. | |
OCIS_CACHE_TTL FRONTEND_OCS_STAT_CACHE_TTL |
Duration | 5m0s | Default time to live for user info in the cache. Only applied when access tokens has no expiration. See the Environment Variable Types description for more details. |
OCIS_CACHE_DISABLE_PERSISTENCE FRONTEND_OCS_STAT_CACHE_DISABLE_PERSISTENCE |
bool | false | Disable persistence of the cache. Only applies when using the ’nats-js-kv’ store type. Defaults to false. |
OCIS_CACHE_AUTH_USERNAME FRONTEND_OCS_STAT_CACHE_AUTH_USERNAME |
string | The username to use for authentication. Only applies when using the ’nats-js-kv’ store type. | |
OCIS_CACHE_AUTH_PASSWORD FRONTEND_OCS_STAT_CACHE_AUTH_PASSWORD |
string | The password to use for authentication. Only applies when using the ’nats-js-kv’ store type. | |
FRONTEND_OCS_ENABLE_DENIALS | bool | false | EXPERIMENTAL: enable the feature to deny access on folders. |
OCIS_ENABLE_OCM FRONTEND_OCS_LIST_OCM_SHARES |
bool | true | Include OCM shares when listing shares. See the OCM service documentation for more details. |
OCIS_ENABLE_OCM FRONTEND_OCS_INCLUDE_OCM_SHAREES |
bool | false | Include OCM sharees when listing sharees. |
OCIS_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD FRONTEND_OCS_PUBLIC_SHARE_MUST_HAVE_PASSWORD |
bool | true | Set this to true if you want to enforce passwords on all public shares. |
OCIS_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD FRONTEND_OCS_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD |
bool | false | Set this to true if you want to enforce passwords for writable shares. Only effective if the setting for ‘passwords on all public shares’ is set to false. |
OCIS_SHOW_USER_EMAIL_IN_RESULTS | bool | false | Include user email addresses in responses. If absent or set to false emails will be omitted from results. Please note that admin users can always see all email addresses. |
FRONTEND_CHECKSUMS_SUPPORTED_TYPES | []string | [sha1 md5 adler32] | A list of checksum types that indicate to clients which hashes the server can use to verify upload integrity. Supported types are ‘sha1’, ‘md5’ and ‘adler32’. See the Environment Variable Types description for more details. |
FRONTEND_CHECKSUMS_PREFERRED_UPLOAD_TYPE | string | sha1 | The supported checksum type for uploads that indicates to clients supporting multiple hash algorithms which one is preferred by the server. Must be one out of the defined list of SUPPORTED_TYPES. |
FRONTEND_READONLY_USER_ATTRIBUTES | []string | [] | A list of user attributes to indicate as read-only. Supported values: ‘user.onPremisesSamAccountName’ (username), ‘user.displayName’, ‘user.mail’, ‘user.passwordProfile’ (password), ‘user.appRoleAssignments’ (role), ‘user.memberOf’ (groups), ‘user.accountEnabled’ (login allowed), ‘drive.quota’ (quota). See the Environment Variable Types description for more details. |
OCIS_LDAP_SERVER_WRITE_ENABLED FRONTEND_LDAP_SERVER_WRITE_ENABLED |
bool | true | Allow creating, modifying and deleting LDAP users via the GRAPH API. This can only be set to ’true’ when keeping default settings for the LDAP user and group attribute types (the ‘OCIS_LDAP_USER_SCHEMA_* and ‘OCIS_LDAP_GROUP_SCHEMA_* variables). |
FRONTEND_FULL_TEXT_SEARCH_ENABLED | bool | false | Set to true to signal the web client that full-text search is enabled. |
OCIS_EVENTS_ENDPOINT FRONTEND_EVENTS_ENDPOINT |
string | 127.0.0.1:9233 | The address of the event system. The event system is the message queuing service. It is used as message broker for the microservice architecture. |
OCIS_EVENTS_CLUSTER FRONTEND_EVENTS_CLUSTER |
string | ocis-cluster | The clusterID of the event system. The event system is the message queuing service. It is used as message broker for the microservice architecture. Mandatory when using NATS as event system. |
OCIS_INSECURE FRONTEND_EVENTS_TLS_INSECURE |
bool | false | Whether to verify the server TLS certificates. |
FRONTEND_EVENTS_TLS_ROOT_CA_CERTIFICATE OCS_EVENTS_TLS_ROOT_CA_CERTIFICATE |
string | The root CA certificate used to validate the server’s TLS certificate. If provided NOTIFICATIONS_EVENTS_TLS_INSECURE will be seen as false. | |
OCIS_EVENTS_ENABLE_TLS FRONTEND_EVENTS_ENABLE_TLS |
bool | false | Enable TLS for the connection to the events broker. The events broker is the ocis service which receives and delivers events between the services. |
OCIS_EVENTS_AUTH_USERNAME FRONTEND_EVENTS_AUTH_USERNAME |
string | The username to authenticate with the events broker. The events broker is the ocis service which receives and delivers events between the services. | |
OCIS_EVENTS_AUTH_PASSWORD FRONTEND_EVENTS_AUTH_PASSWORD |
string | The password to authenticate with the events broker. The events broker is the ocis service which receives and delivers events between the services. | |
FRONTEND_AUTO_ACCEPT_SHARES | bool | true | Defines if shares should be auto accepted by default. Users can change this setting individually in their profile. |
OCIS_SERVICE_ACCOUNT_ID FRONTEND_SERVICE_ACCOUNT_ID |
string | The ID of the service account the service should use. See the ‘auth-service’ service description for more details. | |
OCIS_SERVICE_ACCOUNT_SECRET FRONTEND_SERVICE_ACCOUNT_SECRET |
string | The service account secret. | |
OCIS_PASSWORD_POLICY_DISABLED FRONTEND_PASSWORD_POLICY_DISABLED |
bool | false | Disable the password policy. Defaults to false if not set. |
OCIS_PASSWORD_POLICY_MIN_CHARACTERS FRONTEND_PASSWORD_POLICY_MIN_CHARACTERS |
int | 8 | Define the minimum password length. Defaults to 8 if not set. |
OCIS_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS FRONTEND_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS |
int | 1 | Define the minimum number of uppercase letters. Defaults to 1 if not set. |
OCIS_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS FRONTEND_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS |
int | 1 | Define the minimum number of lowercase letters. Defaults to 1 if not set. |
OCIS_PASSWORD_POLICY_MIN_DIGITS FRONTEND_PASSWORD_POLICY_MIN_DIGITS |
int | 1 | Define the minimum number of digits. Defaults to 1 if not set. |
OCIS_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS FRONTEND_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS |
int | 1 | Define the minimum number of characters from the special characters list to be present. Defaults to 1 if not set. |
OCIS_PASSWORD_POLICY_BANNED_PASSWORDS_LIST FRONTEND_PASSWORD_POLICY_BANNED_PASSWORDS_LIST |
string | Path to the ‘banned passwords list’ file. This only impacts public link password validation. See the documentation for more details. |