Skip to content

Commit 60cba8d

Browse files
committed
Clarify and align normative language
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
1 parent 58b0ca0 commit 60cba8d

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

IETF-RFC.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ Open Cloud Mesh only handles the necessary interactions up to the point where th
4444
--- middle
4545

4646
# 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
4949
"OPTIONAL" in this document are to be interpreted as described in
5050
RFC 2119.
5151

@@ -139,11 +139,11 @@ Whereas the precise syntax of the Invite Message and the Invite Acceptance Gestu
139139
* to the `/invite-accepted` path in the Invite Sender OCM Server's OCM API
140140
* using `application/json` as the `Content-Type` HTTP request header
141141
* 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
147147
* using TLS
148148
* using [httpsig](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12)
149149

@@ -163,9 +163,9 @@ The Invite Acceptance Response SHOULD be a HTTP response:
163163
* in response to the Invite Acceptance Request
164164
* using `application/json` as the `Content-Type` HTTP response header
165165
* 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
169169

170170
A 200 response status means the Invite Acceptance Request was successful.
171171
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.
239239
## Fields
240240
The JSON response body offered by the Discoverable Server SHOULD contain the following information about its OCM API:
241241

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"`
245245
* 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
247247
itself be an object containing the following fields:
248248
* name (string) - A supported resource type (file, folder, calendar, contact, ...).
249249
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:
301301
* OPTIONAL: publicKey (object) - The signatory used to sign outgoing request to confirm its origin. The
302302
signatory is optional, but if present, it MUST contain two string fields, `id` and `publicKeyPem`.
303303
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
305305
request and MUST be identical to the current discovery endpoint.
306306
Example: https://my-cloud-storage.org/ocm#signature
307-
* REQUIRED publicKeyPem (string) - PEM-encoded version of the public key.
307+
* MUST publicKeyPem (string) - PEM-encoded version of the public key.
308308
Example: "-----BEGIN PUBLIC KEY-----\nMII...QDD\n-----END PUBLIC KEY-----\n"
309309
* 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`.
310310

@@ -319,28 +319,28 @@ To create a Share, the Sending Server SHOULD make a HTTP POST request
319319

320320
## Fields
321321

322-
* REQUIRED shareWith (string)
322+
* MUST shareWith (string)
323323
Consumer specific identifier of the user, group or federation the provider
324324
wants to share the resource with. This is known in advance.
325325
Please note that the consumer service endpoint is known in advance
326326
as well, so this is no part of the request body.
327327
Example: "[email protected]"
328-
* REQUIRED name (string)
328+
* MUST name (string)
329329
Name of the resource (file or folder).
330330
Example: "resource.txt"
331331
* OPTIONAL description (string)
332332
Optional description of the resource (file or folder).
333333
Example: "This is the Open API Specification file (in YAML format) of the Open
334334
Cloud Mesh API."
335-
* REQUIRED providerId (string)
335+
* MUST providerId (string)
336336
Identifier to identify the shared resource at the provider side. This is
337337
unique per provider such that if the same resource is shared twice,
338338
this providerId will not be repeated.
339339
Example: 7c084226-d9a1-11e6-bf26-cec0c932ce01
340-
* REQUIRED owner (string) -
340+
* MUST owner (string) -
341341
Provider specific identifier of the user who owns the resource.
342342
Example: "[email protected]"
343-
* REQUIRED sender (string) -
343+
* MUST sender (string) -
344344
Provider specific identifier of the user that wants to share the
345345
resource. Please note that the requesting provider is being
346346
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
352352
* OPTIONAL senderDisplayName (string)
353353
Display name of the user that wants to share the resource
354354
Example: "John Doe"
355-
* REQUIRED shareType (string)
355+
* MUST shareType (string)
356356
SHOULD have a value of "user", "group", or "federation", to indicated that the first part
357357
of the `shareWith` OCM Address refers to a Receiving Party who is a single user of the Receiving Server,
358358
a group of users at the Receiving Servers, or a group of users that is spread out over various servers,
359359
including at least one user at the Receiving Server.
360-
* REQUIRED resourceType (string)
360+
* MUST resourceType (string)
361361
Resource type (file, folder, calendar, contact, ...)
362362
* OPTIONAL expiration (integer)
363363
The expiration time for the OCM share, in seconds
364364
of UTC time since Unix epoch. If omitted, it is assumed
365365
that the share does not expire.
366366
* OPTIONAL code (string)
367367
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)
369369
JSON object with specific options for each protocol.
370370
The supported protocols are:
371371
- `webdav`, to access the data
@@ -401,7 +401,7 @@ If `multi` is given, one or more protocol
401401
only support `webdav`.
402402

403403
* Protocol details for `webdav` MAY contain:
404-
* REQUIRED uri (string)
404+
* MUST uri (string)
405405
An URI to access the remote resource. The URI SHOULD be relative,
406406
in which case the prefix exposed by the `/.well-known/ocm` endpoint MUST
407407
be used. Absolute URIs are deprecated.
@@ -422,12 +422,12 @@ If `multi` is given, one or more protocol
422422
signed HTTPS request. This MAY be used if the recipient provider exposes
423423
the `receive-code` capability.
424424
* Protocol details for `webapp` MAY contain:
425-
* REQUIRED uri (string)
425+
* MUST uri (string)
426426
An URI to a client-browsable view of the shared resource, such that
427427
users may use the web applications available at the site. The URI SHOULD
428428
be relative, in which case the prefix exposed by the `/.well-known/ocm`
429429
endpoint MUST be used. Absolute URIs are deprecated.
430-
* REQUIRED viewMode (string)
430+
* MUST viewMode (string)
431431
The permissions granted to the sharee. A subset of:
432432
- `view` allows access to the web app in view-only mode.
433433
- `read` allows read and download access via the web app.
@@ -436,7 +436,7 @@ If `multi` is given, one or more protocol
436436
An optional secret to be used to access the remote web app,
437437
for example in the form of a bearer token.
438438
* Protocol details for `datatx` MAY contain:
439-
* REQUIRED srcUri (string)
439+
* MUST srcUri (string)
440440
An URI to access the remote resource. The URI SHOULD be relative,
441441
in which case the prefix exposed by the `/.well-known/ocm` endpoint MUST
442442
be used. Absolute URIs are deprecated.
@@ -481,10 +481,10 @@ make a HTTP POST request
481481

482482
## Fields
483483

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:
485485
* 'SHARE_ACCEPTED'
486486
* '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
488488
* OPTIONAL resourceType (string) - copied from the Share Creation Notification for the Share this notification is about
489489
* OPTIONAL notification (object) - optional additional parameters, depending on the notification and the resource type
490490

@@ -627,10 +627,10 @@ As an example, if the payload is about initiating a new share the file owner has
627627
# Appendix C: Directory Service
628628

629629
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
634634
Example:
635635
```json
636636
{

0 commit comments

Comments
 (0)