You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit resolves inconsistencies in the use of RFC 2119 keywords
across the draft, including inappropriate uses of "REQUIRED" and
"RECOMMENDED", which have been replaced with "MUST" and "SHOULD"
as per BCP 14.
Key changes:
- Upgraded certain "SHOULD" statements to "MUST" for security, reliability, and interoperability
- Harmonized conflicting statements on resource discovery and identifier uniqueness
- Added clarifications for "sensitive data", "standard authentication protocol", and error formatting
- Reduced redundancy in API exposure requirements
These adjustments improve internal consistency and remove ambiguity for implementers ahead of IETF 123.
Closes: #206
Copy file name to clipboardExpand all lines: IETF-RFC.md
+34-34Lines changed: 34 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,8 +44,8 @@ Open Cloud Mesh only handles the necessary interactions up to the point where th
44
44
--- middle
45
45
46
46
# Terms
47
-
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
48
-
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
47
+
The key words "MUST", "MUST NOT", "MUST", "SHALL", "SHALL
48
+
NOT", "SHOULD", "SHOULD NOT", "SHOULD", "MAY", and
49
49
"OPTIONAL"in this document are to be interpreted as described in
50
50
RFC 2119.
51
51
@@ -139,11 +139,11 @@ Whereas the precise syntax of the Invite Message and the Invite Acceptance Gestu
139
139
* to the `/invite-accepted` path in the Invite Sender OCM Server's OCM API
140
140
* using `application/json` as the `Content-Type` HTTP request header
141
141
* its request body containing a JSON document representing an object with the following string fields:
142
-
* REQUIRED: `recipientProvider` - FQDN of the Invite Receiver OCM Server
143
-
* REQUIRED: `token` - the Invite Token. The Invite Sender OCM Server SHOULD recall which Invite Sender OCM Address this token was linked to
144
-
* REQUIRED: `userID` - the Invite Receiver's identifier at their OCM Server
145
-
* REQUIRED: `email` - non-normative / informational; an email address for the Invite Receiver. Not necessarily at the same FQDN as their OCM Server
146
-
* REQUIRED: `name` - human-readable name of the Invite Receiver, as a suggestion for display in the Invite Sender's address book
142
+
* MUST: `recipientProvider` - FQDN of the Invite Receiver OCM Server
143
+
* MUST: `token` - the Invite Token. The Invite Sender OCM Server SHOULD recall which Invite Sender OCM Address this token was linked to
144
+
* MUST: `userID` - the Invite Receiver's identifier at their OCM Server
145
+
* MUST: `email` - non-normative / informational; an email address for the Invite Receiver. Not necessarily at the same FQDN as their OCM Server
146
+
* MUST: `name` - human-readable name of the Invite Receiver, as a suggestion for display in the Invite Sender's address book
147
147
* using TLS
148
148
* using [httpsig](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12)
149
149
@@ -163,9 +163,9 @@ The Invite Acceptance Response SHOULD be a HTTP response:
163
163
* in response to the Invite Acceptance Request
164
164
* using `application/json` as the `Content-Type` HTTP response header
165
165
* its response body containing a JSON document representing an object with the following string fields:
166
-
* REQUIRED: `userID` - the Invite Sender's identifier at their OCM Server
167
-
* REQUIRED: `email` - non-normative / informational; an email address for the Invite Sender. Not necessarily at the same FQDN as their OCM Server
168
-
* REQUIRED: `name` - human-readable name of the Invite Sender, as a suggestion for display in the Invite Receiver's address book
166
+
* MUST: `userID` - the Invite Sender's identifier at their OCM Server
167
+
* MUST: `email` - non-normative / informational; an email address for the Invite Sender. Not necessarily at the same FQDN as their OCM Server
168
+
* MUST: `name` - human-readable name of the Invite Sender, as a suggestion for display in the Invite Receiver's address book
169
169
170
170
A 200 response status means the Invite Acceptance Request was successful.
171
171
A 400 response status means the Invite Token is invalid or does not exist.
@@ -239,11 +239,11 @@ Step 7: The JSON response body is the data that was discovered.
239
239
## Fields
240
240
The JSON response body offered by the Discoverable Server SHOULD contain the following information about its OCM API:
241
241
242
-
* REQUIRED: enabled (boolean) - Whether the OCM service is enabled at this endpoint
243
-
* REQUIRED: apiVersion (string) - The OCM API version this endpoint supports. Example: `"1.2.0"`
244
-
* REQUIRED: endPoint (string) - The URI of the OCM API available at this endpoint. Example: `"https://my-cloud-storage.org/ocm"`
242
+
* MUST: enabled (boolean) - Whether the OCM service is enabled at this endpoint
243
+
* MUST: apiVersion (string) - The OCM API version this endpoint supports. Example: `"1.2.0"`
244
+
* MUST: endPoint (string) - The URI of the OCM API available at this endpoint. Example: `"https://my-cloud-storage.org/ocm"`
245
245
* OPTIONAL: provider (string) - A friendly branding name of this endpoint. Example: `"MyCloudStorage"`
246
-
* REQUIRED: resourceTypes (array) - A list of all resource types this server supports in both the Sending Server role and the Receiving Server role, with their access protocols. Each item in this list should
246
+
* MUST: resourceTypes (array) - A list of all resource types this server supports in both the Sending Server role and the Receiving Server role, with their access protocols. Each item in this list should
247
247
itself be an object containing the following fields:
248
248
* name (string) - A supported resource type (file, folder, calendar, contact, ...).
249
249
Implementations MUST offer support for at least one resource type, where `file` is the commonly supported one. Each resource type is identified by its `name`:
@@ -301,10 +301,10 @@ itself be an object containing the following fields:
301
301
* OPTIONAL: publicKey (object) - The signatory used to sign outgoing request to confirm its origin. The
302
302
signatory is optional, but if present, it MUST contain two string fields, `id` and `publicKeyPem`.
303
303
properties:
304
-
* REQUIRED keyId (string) unique id of the key in URI format. The hostname set the origin of the
304
+
* MUST keyId (string) unique id of the key in URI format. The hostname set the origin of the
305
305
request and MUST be identical to the current discovery endpoint.
* REQUIRED publicKeyPem (string) - PEM-encoded version of the public key.
307
+
* MUST publicKeyPem (string) - PEM-encoded version of the public key.
308
308
Example: "-----BEGIN PUBLIC KEY-----\nMII...QDD\n-----END PUBLIC KEY-----\n"
309
309
* OPTIONAL: inviteAcceptDialog (string) - URL path of a web page where a user can accept an invite, when query parameters `"token"` and `"providerDomain"` are provided. Implementations that offer the `"invites"` capability SHOULD provide this URL as well in order to enhance the UX of the Invite Flow. If for example `"/index.php/apps/sciencemesh/accept"` is specified here then a WAYF Page SHOULD redirect the end-user to `/index.php/apps/sciencemesh/accept?token=zi5kooKu3ivohr9a&providerDomain=example.com`.
310
310
@@ -319,28 +319,28 @@ To create a Share, the Sending Server SHOULD make a HTTP POST request
319
319
320
320
## Fields
321
321
322
-
* REQUIRED shareWith (string)
322
+
* MUST shareWith (string)
323
323
Consumer specific identifier of the user, group or federation the provider
324
324
wants to share the resource with. This is known in advance.
325
325
Please note that the consumer service endpoint is known in advance
Provider specific identifier of the user that wants to share the
345
345
resource. Please note that the requesting provider is being
346
346
identified on a higher level, so the former `remote` property
@@ -352,20 +352,20 @@ To create a Share, the Sending Server SHOULD make a HTTP POST request
352
352
* OPTIONAL senderDisplayName (string)
353
353
Display name of the user that wants to share the resource
354
354
Example: "John Doe"
355
-
* REQUIRED shareType (string)
355
+
* MUST shareType (string)
356
356
SHOULD have a value of "user", "group", or "federation", to indicated that the first part
357
357
of the `shareWith` OCM Address refers to a Receiving Party who is a single user of the Receiving Server,
358
358
a group of users at the Receiving Servers, or a group of users that is spread out over various servers,
359
359
including at least one user at the Receiving Server.
360
-
* REQUIRED resourceType (string)
360
+
* MUST resourceType (string)
361
361
Resource type (file, folder, calendar, contact, ...)
362
362
* OPTIONAL expiration (integer)
363
363
The expiration time for the OCM share, in seconds
364
364
of UTC time since Unix epoch. If omitted, it is assumed
365
365
that the share does not expire.
366
366
* OPTIONAL code (string)
367
367
A nonce to be exchanged for a (potentially short-lived) bearer token at the Sending Server's /token endpoint.
368
-
* REQUIRED protocol (object)
368
+
* MUST protocol (object)
369
369
JSON object with specific options for each protocol.
370
370
The supported protocols are:
371
371
- `webdav`, to access the data
@@ -401,7 +401,7 @@ If `multi` is given, one or more protocol
401
401
only support `webdav`.
402
402
403
403
* Protocol details for `webdav` MAY contain:
404
-
* REQUIRED uri (string)
404
+
* MUST uri (string)
405
405
An URI to access the remote resource. The URI SHOULD be relative,
406
406
in which case the prefix exposed by the `/.well-known/ocm` endpoint MUST
407
407
be used. Absolute URIs are deprecated.
@@ -422,12 +422,12 @@ If `multi` is given, one or more protocol
422
422
signed HTTPS request. This MAY be used if the recipient provider exposes
423
423
the `receive-code` capability.
424
424
* Protocol details for `webapp` MAY contain:
425
-
* REQUIRED uri (string)
425
+
* MUST uri (string)
426
426
An URI to a client-browsable view of the shared resource, such that
427
427
users may use the web applications available at the site. The URI SHOULD
428
428
be relative, in which case the prefix exposed by the `/.well-known/ocm`
429
429
endpoint MUST be used. Absolute URIs are deprecated.
430
-
* REQUIRED viewMode (string)
430
+
* MUST viewMode (string)
431
431
The permissions granted to the sharee. A subset of:
432
432
- `view`allows access to the web app in view-only mode.
433
433
- `read`allows read and download access via the web app.
@@ -436,7 +436,7 @@ If `multi` is given, one or more protocol
436
436
An optional secret to be used to access the remote web app,
437
437
for example in the form of a bearer token.
438
438
* Protocol details for `datatx` MAY contain:
439
-
* REQUIRED srcUri (string)
439
+
* MUST srcUri (string)
440
440
An URI to access the remote resource. The URI SHOULD be relative,
441
441
in which case the prefix exposed by the `/.well-known/ocm` endpoint MUST
442
442
be used. Absolute URIs are deprecated.
@@ -481,10 +481,10 @@ make a HTTP POST request
481
481
482
482
## Fields
483
483
484
-
* REQUIRED notificationType (string) - in a Share Acceptance Notification it SHOULD be one of:
484
+
* MUST notificationType (string) - in a Share Acceptance Notification it SHOULD be one of:
485
485
* 'SHARE_ACCEPTED'
486
486
* 'SHARE_DECLINED'
487
-
* REQUIRED providerId (string) - copied from the Share Creation Notification for the Share this notification is about
487
+
* MUST providerId (string) - copied from the Share Creation Notification for the Share this notification is about
488
488
* OPTIONAL resourceType (string) - copied from the Share Creation Notification for the Share this notification is about
489
489
* OPTIONAL notification (object) - optional additional parameters, depending on the notification and the resource type
490
490
@@ -627,10 +627,10 @@ As an example, if the payload is about initiating a new share the file owner has
627
627
# Appendix C: Directory Service
628
628
629
629
A third-party Directory Service is a back-end service used to federate multiple OCM Servers and facilitate the Invite flow. It is expected to expose, via anonymous HTTP GET, a JSON document with the following format:
630
-
* REQUIRED: `federation` - a human-readable name for the list of OCM Servers exposed by the Directory Service
631
-
* REQUIRED: `servers` - a JSON array of objects to describe the list of OCM Servers with the following string fields:
632
-
* REQUIRED: `url` - the OCM Server's FQDN
633
-
* REQUIRED: `displayName` - a human-readable name for the OCM Server
630
+
* MUST: `federation` - a human-readable name for the list of OCM Servers exposed by the Directory Service
631
+
* MUST: `servers` - a JSON array of objects to describe the list of OCM Servers with the following string fields:
632
+
* MUST: `url` - the OCM Server's FQDN
633
+
* MUST: `displayName` - a human-readable name for the OCM Server
0 commit comments