diff --git a/protocol-spec/account-registration.md b/protocol-spec/account-registration.md new file mode 100644 index 0000000..7daf529 --- /dev/null +++ b/protocol-spec/account-registration.md @@ -0,0 +1,103 @@ +# Account registration +## Introduction +This extension is intended for creating user accounts on a server + +## Message type identifiers +- `profile:register` + +## Error codes +- 0: limit exceed +- 1: username/third party ID already taken +- 2: registration isn't allowed on a server + +## Use cases +- Request: +```json +{ + "id": "abcd", + "type": "profile:register", + "to": "cadmium.org", + "payload": { + "username": "juliet", + "thirdPIDs": [ + {"type":"email", "value":"juliet@capulett.com"}, + {"type":"msisdn", "value":"+1234567890"}, + ], + "password": "romeo1" + } +} +``` + +- Response: +```json +{ + "id": "abcd", + "type": "profile:register", + "from": "cadmium.org", + "ok": true, + "payload": { + "userID": "@juliet@cadmium.org" + } +} +``` + +*Error response*: +```json +{ + "id": "abcd", + "type": "profile:register", + "from": "cadmium.org", + "ok": false, + "payload": { + "errCode": 1, + "errText": "{Username/email/msisdn} already taken" + } +} +``` + +## Business Rules +None. + +## JSON Schema +**Payload** + +- Request: +```typescript +interface RegistrationRequestPayload { + /** + * The username that the user wants to register + */ + username: string, + + /** + * Array of user third party IDs (email and/or MSISDN) + */ + thirdPIDs: ThirdPartyID[], + + /** + * Password of new account + */ + password: string +} + +interface ThirdPartyID { + /** + * Type of third party ID + */ + type: string, + + /** + * String contains third party ID. Examples: "juliet@capulett.com", "+1234567890". + */ + value: string +} +``` +- Response: +```typescript +interface RegistrationResponsePayload { + /** + * ID of user (Username in priority. If we haven't username, then we put to this field one of user's third party IDs) + */ + userID: EntityID +} +``` \ No newline at end of file diff --git a/protocol-spec/core.md b/protocol-spec/core.md index c005508..334cda3 100644 --- a/protocol-spec/core.md +++ b/protocol-spec/core.md @@ -7,7 +7,6 @@ - [Errors](#errors) - [User devices](#user-devices) - [Account registration/login](#account-registrationlogin) - - [Create account](#create-account) - [Login into account (by username)](#login-into-account-by-username) ## Transport @@ -128,103 +127,6 @@ interface ErrorPayload { `todo` ## Account registration/login -### Create account -**Description**: Create user account on a server -**Type**: `profile:register` -**Payload**: -- Request: -```typescript -interface RegistrationRequestPayload { - /** - * The username that the user wants to register - */ - username: string, - - /** - * Array of user third party IDs (email and/or MSISDN) - */ - thirdPIDs: ThirdPartyID[], - - /** - * Password of new account - */ - password: string -} - -interface ThirdPartyID { - /** - * Type of third party ID - */ - type: string, - - /** - * String contains third party ID. Examples: "juliet@capulett.com", "+1234567890". - */ - value: string -} -``` -- Response: -```typescript -interface RegistrationResponsePayload { - /** - * ID of user (Username in priority. If we haven't username, then we put to this field one of user's third party IDs) - */ - userID: EntityID -} -``` - -**Errors**: -- 0: limit exceed -- 1: username/third party ID already taken -- 2: registration isn't allowed on a server - -**Usecase**: - -*Request*: -```json -{ - "id": "abcd", - "type": "profile:register", - "to": "cadmium.org", - "payload": { - "username": "juliet", - "thirdPIDs": [ - {"type":"email", "value":"juliet@capulett.com"}, - {"type":"msisdn", "value":"+1234567890"}, - ], - "password": "romeo1" - } -} -``` - -*Response*: -```json -{ - "id": "abcd", - "type": "profile:register", - "from": "cadmium.org", - "ok": true, - "payload": { - "userID": "@juliet@cadmium.org" - } -} -``` - -*Error response*: -```json -{ - "id": "abcd", - "type": "profile:register", - "from": "cadmium.org", - "ok": false, - "payload": { - "errCode": 1, - "errText": "{Username/email/msisdn} already taken" - } -} -``` - -**Special business rules**: none. ### Login into account (by username) **Description**: Login into user account on a server by username