diff --git a/changelog/unreleased/docs.md b/changelog/unreleased/docs.md new file mode 100644 index 00000000..a95ab70a --- /dev/null +++ b/changelog/unreleased/docs.md @@ -0,0 +1,6 @@ +Enhancement: Extend the docs + +We have extended the documentation by adding a chapter about settings values. + +https://github.com/owncloud/ocis-settings/issues/11 +https://github.com/owncloud/ocis-settings/pulls/28 diff --git a/docs/_index.md b/docs/_index.md index ed4cf502..9e70356d 100644 --- a/docs/_index.md +++ b/docs/_index.md @@ -23,22 +23,24 @@ graph TD ows[ocis-web-settings] owc[ocis-web-core] end - ows ---|"listSettingsBundles(),
listSettingsValues(),
saveSettingsValue(value)"| os[ocis-settings] - owc ---|"listSettingsValues()
getSettingsValue(id)"| sdk[oC SDK] + ows ---|"listSettingsBundles(),
saveSettingsValue(value)"| os[ocis-settings] + owc ---|"listSettingsValues()"| sdk[oC SDK] sdk --- sdks{ocis-settings
available?} sdks ---|"yes"| os sdks ---|"no"| defaults[Use set of
default values] - oa[oCIS extensions
e.g. ocis-accounts] ---|"saveSettingsBundle(bundle),
getSettingsValue(id)"| os + oa[oCIS extensions
e.g. ocis-accounts] ---|"saveSettingsBundle(bundle)"| os {{< /mermaid >}} The diagram shows how the settings service integrates into oCIS: + **Settings management:** -- oCIS extensions can register settings bundles with the ocis-settings service. -- The settings frontend can be plugged into ocis-web, showing generated forms for changing settings values as a user. +- oCIS extensions can register *settings bundles* with the ocis-settings service. +- The settings frontend can be plugged into ocis-web, showing forms for changing *settings values* as a user. +The forms are generated from the registered *settings bundles*. **Settings usage:** -- Extensions can query ocis-settings for settings values of a user. -- The ownCloud SDK, used as a data abstraction layer for ocis-web, will query ocis-settings for settings values of a user, +- Extensions can query ocis-settings for *settings values* of a user. +- The ownCloud SDK, used as a data abstraction layer for ocis-web, will query ocis-settings for *settings values* of a user, if it's available. The SDK uses sensible defaults when ocis-settings is not part of the setup. For compatibility with ownCloud 10, a migration of ownCloud 10 settings into the storage of ocis-settings will be available. diff --git a/docs/glossary.md b/docs/glossary.md index 4a90da33..ffc9d861 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -33,3 +33,10 @@ In the context of this extension and oCIS in general, we are using the following - Collection of related settings - Registered by an ocis extension + +### Settings Value + +- Manifestation of a setting for a specific user +- E.g. used for customization (at runtime) in `ocis-web` +- `ocis-web-settings` extension for modifying settings values is provided by this service +- Can be queried and modified by other ocis extensions diff --git a/docs/values.md b/docs/values.md new file mode 100644 index 00000000..9e03c681 --- /dev/null +++ b/docs/values.md @@ -0,0 +1,75 @@ +--- +title: "Settings Values" +date: 2020-05-04T00:00:00+00:00 +weight: 51 +geekdocRepo: https://github.com/owncloud/ocis-settings +geekdocEditPath: edit/master/docs +geekdocFilePath: values.md +--- + +A **Settings Value** is the value an authenticated user has chosen for a specific setting, defined in a +*settings bundle*. For choosing settings values as a user the sole entry point is the ocis-web extension +provided by this service. + +## Identifying settings values + +A *settings value* is uniquely identified by four attributes. Three of them are coming from the definition of +the setting within it's settings bundle (see [Settings Bundles](https://owncloud.github.io/extensions/ocis_settings/bundles/) +for an example). The fourth identifies the user. +- extension: Key of the extension that registered the settings bundle, +- bundleKey: Key of the settings bundle, +- settingKey: Key of the setting as defined within the bundle, +- accountUuid: The UUID of the authenticated user who has saved the setting. + +{{< hint info >}} +When requests are going through `ocis-proxy`, the accountUuid attribute can be set to the static keyword `me` +instead of using a real UUID. `ocis-proxy` will take care of minting the UUID of the authenticated user into +a JWT, providing it in the HTTP header as `x-access-token`. That UUID is then used in this service, to replace +`me` with the actual UUID of the authenticated user. +{{< /hint >}} + +## Example of stored settings values + +```json +{ + "values": { + "language": { + "identifier": { + "extension": "ocis-accounts", + "bundleKey": "profile", + "settingKey": "language", + "accountUuid": "5681371f-4a6e-43bc-8bb5-9c9237fa9c58" + }, + "listValue": { + "values": [ + { + "stringValue": "de" + } + ] + } + }, + "timezone": { + "identifier": { + "extension": "ocis-accounts", + "bundleKey": "profile", + "settingKey": "timezone", + "accountUuid": "5681371f-4a6e-43bc-8bb5-9c9237fa9c58" + }, + "listValue": { + "values": [ + { + "stringValue": "Europe/Berlin" + } + ] + } + } + } +} +``` + +## gRPC endpoints +The obvious way of modifying settings is the ocis-web extension, as described earlier. However, services can +use the respective gRPC endpoints of the `ValueService` to query and modify *settings values* as well. +The gRPC endpoints require the same identifier attributes as described above, so for making a request to +the `ValueService` you will have to make sure that the accountUuid of the authenticated user is available in +your service at the time of the request.