# RegAPI v3 Sequences #### Content * [SMS Sequence](#SMS-Sequence) * [Re-Send SMS Code](#Re-send-SMS-Code) * [Update Phone Number](#Update-Phone-Number) * [Request Plain Text Credentials](#Request-Plain-Text-Credentials) * [ID Austria Sequence](#ID-Austria-Sequence) * [Delete RegID Sequence](#Delete-RegID-Sequence) * [Delete User Sequence](#Delete-User-Sequence) * [Retrieve Configuration (root/user-config)](#Get-root--user-config) * [List of Statuses](#List-of-Statuses) * [Data Structures](#Structures) Links: * [Old RegAPI HackMD](https://hackmd.io/QXGZljmsSyGDzXHd_7Fo1g) (DEPRECATED) * Swagger from RegAPI v1&v2: https://app.test.dec112.eu/api/ * [D1 RegAPI Sequence](https://docs.google.com/document/d/1PYZq8NVXlprOqfM3DefIPuxDl5Qjilrh9eMaM8wffCg/edit#heading=h.21ddyutzr0a) * [D1 RegAPI Components](https://docs.google.com/document/d/1PYZq8NVXlprOqfM3DefIPuxDl5Qjilrh9eMaM8wffCg/edit#heading=h.4zo0wpqblqsu) ## SMS Sequence 1) DEC App retrieves location of RegAPI from root config and creates DID + stores private key <details><summary>DEC112 App</summary> * retrieve root config: `GET /api/v3/root/config` * store regApiUrl returned from GET request * create DID: via **oydid npm** `create()` * store DID and associated privated key returned by `create()` </details> 2) DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Description of API for DID Auth</summary> a) `POST /oydid/init` Body: `{"session_id": string, "did": string}` Response: `{"challenge": string}` b) `POST /oydid/token` Body: `{"session_id": string, "signed_challenge": string}` Comment: challenge must be signed with private key from first public key published in DID Response: `{"access_token": string}` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" REGAPI="https://regapi.test-feb24.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 3) DEC App requests creating new user `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` -> at the same time identity through DID Body: { "header": { "method": "sms", "action": "init" }, "payload":{ "phone_number": string, "model?": string, "lang?": "de", "purpose?": "chat", "applicaiton?": string } } <details><summary>DEC112 App</summary> to request creating a new user through SMS verification, the DEC112 App has to submit a POST or PUT request to the RegAPI * use the OAuth2 Bearer Token to authenticate against the API * store `reg_id` returned by the PUT request as session token for subsequent requests </details> <details><summary>Commands to test on command line</summary> ```bash= REG_ID=`echo '{"header": {"method": "sms","action": "init"}, "payload":{"phone_number": "004367761753112", "email": "christoph.fabianek@gmail.com"}}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- -s \ -X PUT $REGAPI/api/v3/register | \ jq -r '.reg_id'` ``` </details> 4) RegAPI puts information on Redis * create hashmap with reg_id as reference * publish reg_id to 'sms' channel * set status in hashmap to "SMS plugin triggered" * return reg_id as response to `PUT /api/v3/register` 5) SMS Plugin is subscribed to 'sms' channel * generates 6 digit code * sends SMS to provided phone number (during tests: email) * set status to "SMS sent" 6) DEC App sends code received via SMS to RegAPI `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` Body: { "header": { "reg_id": string "method": "sms", "action": "SmsVerificationCode" }, "payload":{ "sms_code": string } } <details><summary>DEC112 App</summary> to submit the Code that the user received via SMS, the DEC112 App has to submit a PUT request to the RegAPI </details> <details><summary>Commands to test on command line</summary> ```bash= CODE=12345678 echo '{"header": {"method": "sms","action": "SmsVerificationCode"}, "payload":{}}' | \ jq --arg reg_id "$REG_ID" '.header += {"reg_id": $reg_id}' | \ jq --arg code "$CODE" '.payload += {"sms_code": $code}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- \ -X PUT $REGAPI/api/v3/register ``` </details> 7) RegAPI puts information on Redis * add JSON encoded payload to SmsVerificationCode key * trigger 'sms' channel * set status for reg_id to "SmsVerificationCode received, SMS plugin triggered" * return reg_id as response to `PUT /api/v3/register` 8) SMS Plugin is subscribed to 'sms' channel * compares received code in payload with sms_code * if correct * set status: "SMS verification passed" * create Verifiable Credential as [described here](https://hackmd.io/UQB2mHk9RTCVJRc1xirVjw?view#SMS-Plugin) * encrypt VC, and * store on Redis in field `identity_encrypted` * if not correct * set status: "SMS verification failed" 9) RegAPI publishes reg_id to 'sip' channel * starting condition: DEC App triggers via `GET /api/v3/register/:reg_id` * publish reg_id to 'sip' channel when status includes "verification passed" * set status to "SIP plugin triggered" <details><summary>DEC112 App</summary> the DEC112 App needs to poll the RegAPI to retrieve the current status; this polling can also trigger subsequent steps in the RegAPI, here: pushing the request after successful identification of the user to the "SIP Plugin" * perform GET Request for reg_id of the user onboarding process </details> <details><summary>Commands to test on command line</summary> check status: ```bash= curl -H "Authorization: Bearer $TOKEN" \ "$REGAPI/api/v3/register?reg_id=$REG_ID" ``` </details> 10) SIP Plugin is subscribed to 'sip' channel * create SIP credentials in Kamailio database * encrypt SIP credentials with public key * set status to "SIP credentials created" 11) DEC App requests and processes SIP credentials * `GET /api/v3/register/:reg_id` * decrypt SIP credentials * store locally <details><summary>DEC112 App</summary> after the RegAPI has performed the complete workflow (status is `SIP credentials created`) the following information is returned back upon querying the RegAPI (`GET /api/v3/register/:reg_id`): * SIP Credentials (key: `sip_credentials`) * secret token for deleting the account (key: `delete_token`) * Verifiable Credential as attestation for identiy (key: `identity`) &nbsp; all information is encrypted with the public key from the initial DID and need to be decrypted before the data is stored by the DEC112 App * via **oydid npm** `decrypt(encrypted_data, privateKey)` * since the `decrypt` function requires a MultiFormat base58btc encoded key and the inital method provides only a hex encoded key, it is necessary to convert the key via **oydid npm** `hexToMulti(privateKeyHex)` </details> <details><summary>Commands to test on command line</summary> ```bash= curl -s -H "Authorization: Bearer $TOKEN" \ "$REGAPI/api/v3/register?reg_id=$REG_ID" |\ jq -c '.sip.sip_credentials' | \ oydid decrypt --doc-enc `cat "${DID:8:10}_private_key.enc"` ``` </details> ### Re-send SMS Code Request to re-send the SMS Code for a user can be performed during the SMS Sequence and requires an existing `:reg_id`; an SMS re-send can only be performed 3 times * DEC App requests re-sending the SMS Code `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` Body: { "header": { "reg_id": string "method": "sms", "action": "resend" } } <details><summary>DEC112 App</summary> to request resending the SMS Code, the DEC112 App has to submit a PUT request to the RegAPI * use an OAuth2 Bearer Token to authenticate against the API * use the `:reg_id` from the original request in the header section </details> <details><summary>Commands to test on command line</summary> ```bash= echo '{"header": {"method": "sms","action": "resend"}}' | \ jq --arg reg_id "$REG_ID" '.header += {"reg_id": $reg_id}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- \ -X PUT $REGAPI/api/v3/register ``` </details> ### Update Phone Number Requirements: * perform SMS Code Verification * receive Verifiable Credential for phone number * don't trigger creating SIP Credentials * keep same SIP credentials (phone number and SIP credentials are actually not linked!) Sequence: 1) DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Description of API for DID Auth</summary> a) `POST /oydid/init` Body: `{"session_id": string, "did": string}` Response: `{"challenge": string}` b) `POST /oydid/token` Body: `{"session_id": string, "signed_challenge": string}` Comment: challenge must be signed with private key from first public key published in DID Response: `{"access_token": string}` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 2) DEC App requests re-sending the SMS Code `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` Body: { "header": { "method": "sms", "action": "new_number" }, "payload":{ "phone_number": string "lang?": "de" } } <details><summary>DEC112 App</summary> to request updating the phone number, the DEC112 App has to submit a POST or PUT request to the RegAPI * use an OAuth2 Bearer Token to authenticate against the API </details> <details><summary>Commands to test on command line</summary> ```bash= REG_ID=`echo '{"header": {"method": "sms","action": "new_number"}, "payload":{"phone_number": "004366460850"}}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- -s \ -X PUT $REGAPI/api/v3/register | \ jq -r '.reg_id'` ``` </details> 3) RegAPI puts information on Redis * create hashmap with reg_id as reference * publish reg_id to 'sms' channel * set status in hashmap to "SMS plugin triggered" * return reg_id as response to `PUT /api/v3/register` 4) SMS Plugin is subscribed to 'sms' channel * generates 6 digit code * sends SMS to provided phone number * set status to "SMS sent" 5) DEC App sends code received via SMS to RegAPI `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` Body: { "header": { "reg_id": string "method": "sms", "action": "SmsVerificationCode" }, "payload":{ "sms_code": string } } <details><summary>DEC112 App</summary> to submit the Code that the user received via SMS, the DEC112 App has to submit a PUT request to the RegAPI </details> <details><summary>Commands to test on command line</summary> ```bash= CODE=123456 echo '{"header": {"method": "sms","action": "SmsVerificationCode"}, "payload":{}}' | \ jq --arg reg_id "$REG_ID" '.header += {"reg_id": $reg_id}' | \ jq --arg code "$CODE" '.payload += {"sms_code": $code}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- \ -X PUT $REGAPI/api/v3/register ``` </details> 6) RegAPI puts information on Redis * add JSON encoded payload to SmsVerificationCode key * trigger 'sms' channel * set status for reg_id to "SmsVerificationCode received, SMS plugin triggered" * return reg_id as response to `PUT /api/v3/register` 7) SMS Plugin is subscribed to 'sms' channel * compares received code in payload with sms_code * if correct * set status: "SMS verification for number update passed" * create Verifiable Credential as [described here](https://hackmd.io/UQB2mHk9RTCVJRc1xirVjw?view#SMS-Plugin) * encrypt VC, and * store on Redis in field `identity_encrypted` * if not correct * set status: "SMS verification failed" 8) Client receives new VC for update number ### Request Plain Text Credentials 0) DEC App retrieves location of RegAPI from root config and creates DID + stores private key; afterwards DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve root config: `GET /api/v3/root/config` * store regApiUrl returned from GET request * create DID: via **oydid npm** `create()` * store DID and associated privated key returned by `create()` * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Description of API for DID Auth</summary> a) `POST /oydid/init` Body: `{"session_id": string, "did": string}` Response: `{"challenge": string}` b) `POST /oydid/token` Body: `{"session_id": string, "signed_challenge": string}` Comment: challenge must be signed with private key from first public key published in DID Response: `{"access_token": string}` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 3) DEC App requests creating new user `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` -> at the same time identity through DID Body: { "header": { "method": "sms", "action": "init" }, "payload":{ "phone_number": string, "model?": string, "lang?": "de", "purpose?": "chat", "application?": string "options":{ "encrypt": "false" } } } <details><summary>DEC112 App</summary> to request creating a new user through SMS verification, the DEC112 App has to submit a POST or PUT request to the RegAPI * use the OAuth2 Bearer Token to authenticate against the API * store `reg_id` returned by the PUT request as session token for subsequent requests </details> <details><summary>Commands to test on command line</summary> ```bash= REG_ID=`echo '{"header": {"method": "sms","action": "init"}, "payload":{"phone_number": "004367761753112", "email": "christoph.fabianek@gmail.com", "options":{"encrypt":"false"}}}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- -s \ -X PUT $REGAPI/api/v3/register | \ jq -r '.reg_id'` ``` </details> remaining steps as in the other sequencs (without decryption at the end) ## ID Austria Sequence 1) DEC App creates DID + stores private key <details><summary>DEC112 App</summary> * retrieve root config: `GET /api/v3/root/config` * store regApiUrl returned from GET request * create DID: via **oydid npm** `create()` * store DID and associated privated key returned by `create()` </details> 2) DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 3) DEC App requests creating new user `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` -> at the same time identity through DID Body: { "header": { "method": "id_austria", "action": "init" }, "payload":{ "phone_number?": string, "model?": string, "lang?": "de", "purpose?": "chat", "applicaiton?": string } } <details><summary>DEC112 App</summary> to request creating a new user through ID Austria verification, the DEC112 App has to submit a PUT request to the RegAPI * use the OAuth2 Bearer Token to authenticate against the API * store `reg_id` returned by the PUT request as session token for subsequent requests </details> <details><summary>Commands to test on command line</summary> ```bash= REG_ID=`echo '{"header": {"method": "id_austria","action": "init"}, "payload":{}}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- -s \ -X PUT $REGAPI/api/v3/register | \ jq -r '.reg_id'` ``` </details> 4) RegAPI puts information on Redis * create hashmap with reg_id as reference * publish reg_id to 'id_austria' channel * set status in hashmap to "ID_AUSTRIA plugin triggered" * return reg_id as response to `PUT /api/v3/register` 5) ID Austria Plugin is subscribed to 'id_austria' channel * generate URL to be opened on client (using `reg_id`) * write ida_url to Redis * set status to "ID Austria URL generated" 6) DEC App queries status for `reg_id` and retrieves URL for ID Austria Verification * `GET /api/v3/register/:reg_id` * retrieve "url" and open in browser <details><summary>DEC112 App</summary> the response from the GET request includes an URL that needs to be opend in a browser window in this browser window the user performs the steps to identify herself/himself and service sends government issued ID </details> <details><summary>Commands to test on command line</summary> ```bash= curl -s -H "Authorization: Bearer $TOKEN" \ "$REGAPI/api/v3/register?reg_id=$REG_ID" | \ jq -r '.id_austria.ida_url' ``` </details> :::info use the following test identity when using the A-Trust Q-System: * user: SP-9645542424 * password: nQEy7aCeKC9lgL more identities: _[ID Austria Testidentitäten](https://eid.egiz.gv.at/anbindung/testidentitaeten/vordefinierte-testidentitaeten/)_ ::: 7) User logs in to ID Austria with credentials and signs Authentication Request 9) A-Trust returns citizen information and signed ID Austria identity to ID Austria Plugin 10) ID Austria Plugin sets status for `reg_id` to "ID_AUSTRIA verification passed" * create Verifiable Credential as [described here](https://hackmd.io/UQB2mHk9RTCVJRc1xirVjw?view#ID-Austria-Plugin) * encrypt VC, and * store on Redis in field `identity_encrypted` 11) RegAPI publishes reg_id to 'sip' channel * starting condition: DEC App triggers via `GET /api/v3/register/:reg_id` * publish reg_id to 'sip' channel when status includes "verification passed" * set status to "SIP plugin triggered" <details><summary>DEC112 App</summary> the DEC112 App needs to poll the RegAPI to retrieve the current status; this polling can also trigger subsequent steps in the RegAPI, here: pushing the request after successful identification of the user to the "SIP Plugin" * perform GET Request for reg_id of the user onboarding process </details> <details><summary>Commands to test on command line</summary> check status: ```bash= curl -H "Authorization: Bearer $TOKEN" \ "$REGAPI/api/v3/register?reg_id=$REG_ID" ``` </details> 10) SIP Plugin is subscribed to 'sip' channel * create SIP credentials in Kamailio database * encrypt SIP credentials with public key * set status to "SIP credentials created" 11) DEC App requests and processes SIP credentials * `GET /api/v3/register/:reg_id` * decrypt SIP credentials * store locally <details><summary>DEC112 App</summary> after the RegAPI has performed the complete workflow (status is `SIP credentials created`) the following information is returned back upon querying the RegAPI (`GET /api/v3/register/:reg_id`): * SIP Credentials (key: `sip_credentials`) * secret token for deleting the account (key: `delete_token`) * Verifiable Credential as attestation for identiy (key: `identity`) &nbsp; all information is encrypted with the public key from the initial DID and need to be decrypted before the data is stored by the DEC112 App * via **oydid npm** `decrypt(encrypted_data, privateKey)` * since the `decrypt` function requires a MultiFormat base58btc encoded key and the inital method provides only a hex encoded key, it is necessary to convert the key via **oydid npm** `hexToMulti(privateKeyHex)` </details> <details><summary>Commands to test on command line</summary> ```bash= curl -s -H "Authorization: Bearer $TOKEN" \ "$REGAPI/api/v3/register?reg_id=$REG_ID" |\ jq -c '.sip.sip_credentials' | \ oydid decrypt --doc-enc `cat "${DID:8:10}_private_key.enc"` ``` </details> ## Delete RegID Sequence The DEC112 App does not need to implement this sequence - see notes below. 1) Client authenticates with own DID towards RegAPI <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 2) Delete / Reset `reg_id` Object `DELETE /api/v3/register/:reg_id` <details><summary>Commands to test on command line</summary> ```bash= curl -H "Authorization: Bearer $TOKEN" \ -X DELETE "$REGAPI/api/v3/register?reg_id=$REG_ID" ``` </details> Notes: * every hour all RegIDs older than 24 hours will be deleted automatically * deleting the RegID does (of course) not delete the associated user -> see next sequence ## Delete User Sequence 1) DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve root config: `GET /api/v3/root/config` * store regApiUrl returned from GET request * create DID: via **oydid npm** `create()` * store DID and associated privated key returned by `create()` * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` ``` </details> 2) DEC App requests deleting existing user `PUT /api/v3/register` Header: `Authorization: Bearer $TOKEN` -> at the same time identity through DID Body: { "header": { "method": "sip", "action": "delete_user" }, "payload":{ "username": string } } <details><summary>DEC112 App</summary> to request deleting a user, the DEC112 App has to submit a PUT request to the RegAPI * use the OAuth2 Bearer Token to authenticate against the API * store `reg_id` returned by the PUT request as session token for subsequent requests </details> <details><summary>Commands to test on command line</summary> ```bash= REG_ID=`echo '{"header": {"method": "sip","action": "delete_user"}, "payload":{"username": "abc"}}' | \ curl -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @- -s \ -X PUT $REGAPI/api/v3/register | \ jq -r '.reg_id'` ``` </details> ## Get root / user config 1) DEC App authenticates with own DID towards RegAPI <details><summary>DEC112 App</summary> * retrieve root config: `GET /api/v3/root/config` * store regApiUrl returned from GET request * create DID: via **oydid npm** `create()` * store DID and associated privated key returned by `create()` * retrieve OAuth2 Bearer Token: via **oydid npm** `didAuth(DID, privateKey, regApiUrl)` </details> <details><summary>Commands to test on command line</summary> ```bash= # prerequisite: oydid, curl, jq installed (eg. in oydeu/oydid-cli) docker run -it --rm oydeu/oydid-cli:latest # REGAPI="http://localhost:3600" REGAPI="https://regapi.staging.dec112.eu" DID=`echo '' | oydid create --json --add-x25519pubkey-keyAgreement | jq -r '.did'` TOKEN=`oydid auth $DID $REGAPI --json | jq -r '.access_token'` # retrieve root config curl $REGAPI/api/v3/config/root # retrieve user config (requires authentication) curl -H "Authorization: Bearer $TOKEN" $REGAPI/api/v3/config/user ``` </details> ## List of Statuses | Code | Text | Description | | ---- | ---- | ----------- | |<tr><td colspan="3">set by RegAPI (range: 1001-1099)</td></tr>| | 1001 | `initial` | initial state with action `init` | | 1002 | `{method} plugin triggered` | triggered plugin (usually specified in 'method') | | 1003 | `{action} received, {method} plugin triggered` | triggered plugin specified in 'method' in 'action' | | 1004 | `REG_ID removed` | after successful deletion of `:reg_id`in Redis | |<tr><td colspan="3">set by SMS Plugin (range: 1100-1199)</td></tr>| | 1100 | `SMS verification passed` | SMS verification successfully performed | | 1101 | `SMS Plugin: SMS sent` | successfully sent SMS code | | 1102 | `SMS Plugin: Email sent` | successfully sent code via Email (only in EMAIL_TEST_MODE) | | 1103 | `SMS Plugin: cannot send SMS code` | error on sending SMS code | | 1104 | `SMS Plugin: invalid input for 'SmsVerificationCode'` | payload provided by client cannot be parsed | | 1105 | `SMS Plugin: invalid input in 'SmsVerificationCode'` | payload provided by client does not include 'sms_code' | | 1106 | `SMS Plugin: invalid SMS code provided` | sms_code provided by client does not match code sent out | | 1107 | `SMS Plugin: internal error in SMS code handling` | error on encrypting/decrypting SMS code | | 1108 | `SMS Plugin: invalid phone number` | provided phone number does not match format provided in "PHONE_NUMBER_VERIFICATION" | | 1109 | `SMS Plugin: SMS resend limit ({max}) reached` | too many requests for re-sending SMS | | 1110 | `SMS Plugin: unknown action '{action}'` | given action cannot be processed | |<tr><td colspan="3">set by ID-Austria Plugin (range: 1200-1299)</td></tr>| | 1200 | `ID_AUSTRIA verification passed` | verification through ID Austria successfully performed | | 1201 | `ID Austria URL generated` | URL for user to authenticate with ID Austria | | 1202 | `ID Austria Plugin: invalid action` | unknown request | | 1203 | `ID_AUSTRIA Plugin: invalid response` | error in processing the response A-Trust | |<tr><td colspan="3">set by ID-Austria Plugin (range: 1000, 9001-9099)</td></tr>| | 1000 | `SIP credentials created` | SIP plugin successfully created and onboarding completed | | 9001 | `SIP Plugin: error on creating SIP credentials` | error in SIP Plugin | | 9002 | `SIP Plugin: missing configuration 'SIP_SECRET'` | SIP_SECRET not configured (to be used with token for deleting users) | | 9003 | `SIP Plugin: error on connecting to Kamailio DB` | connection information to Kamailio is not valid | | 9004 | `SIP Plugin: error on writing subscriber table` | error in SQL INSERT command | ## Structures ### RegAPI Requests ```json= { "header": { "method": "sms" | "id_austria" | "sip", "action": "init" | "SmsVerificationCode" | "resend" | "new_number" | "delete_user", "reg_id?": string | (empty for init action) }, "payload":{ "phone_number": string, "model?": string, "lang?": "de", "purpose?": "chat", "applicaiton?": string, "sms_code": string (only for action "SmsVerificationCode"), "username": string (only for action "sip") "options": { "redirect": "redirect_url after ID Austria is completed" "encrypt": "true" (default) | "false" | "jwe" } } } ``` ### RegAPI Response for encrypted data: ```json= { "reg_id": string, "status": integer, "status_text": string, "id_austria": { "ida_url": string, "vc": { "value": string, "nonce": string } }, "sms": { "vc": { "value": string, "nonce": string } }, "sip": { "sip_credentials": { "value": string, "nonce": string }, "delete_token": string } } ``` for unencrypted data (`options > encrypt: "false"`): ```json= { "reg_id": string, "status": integer, "status_text": string, "id_austria": { "ida_url": string, "adresse": { "Tuer": string, "Stiege": string, "Strasse": string, "Ortschaft": string, "Hausnummer": string, "Postleitzahl": string, "Gemeindekennziffer": string, "Gemeindebezeichnung": string }, "vorname": string, "nachname": string, "geburtsdatum": string, "eid-issuing-nation": string, "id-austria-completed": integer, "eid-signer-certificate": string }, "sms": { "vc": { "value": string, "nonce": string } }, "sip": { "sip_credentials": { "username": string, "password": string }, "delete_token": string } } ``` ### DEC112Credential (in Sphereon Wallet Onboarding) ```json= { "@context": ["https://www.w3.org/2018/credentials/v1"], "type": [ "VerifiableCredential", "DEC112Credential" ], "issuer": "did:oyd:zQmX7WYhQCdHcdzfCLRj9tAUgRYar6pqAf2GXS7NQfoX6aE", "issuanceDate": string, // example: "2024-01-09T13:57:34Z" "credentialSubject": { "id": "did:oyd:zQmb1aZtsQa3YMy3giTubz2Te6QWioj1EgoUvpQcv2pgBTq", "id_austra": { "adresse": { "Tuer": string, "Stiege": string, "Strasse": string, "Ortschaft": string, "Hausnummer": string, "Postleitzahl": string, "Gemeindekennziffer": string, "Gemeindebezeichnung": string, }, "vorname": string, "nachname": string, "geburtsdatum": string, // example: "1977-07-21", "eid-issuing-nation": string, // example: "AT", "id-austria-completed": integer, // example: 1704808634, "eid-signer-certificate": string, }, "sip": { "delete_token": string, "sip_credentials": { "password": string, "username": string, } } }, "proof": { "type": "Ed25519Signature2020", "verificationMethod": "did:oyd:zQmX7WYhQCdHcdzfCLRj9tAUgRYar6pqAf2GXS7NQfoX6aE", "proofPurpose": "assertionMethod", "proofValue": "z39...67g" }, "identifier": "zQmZEEjr5aWofz9UTbTqPUt3VV3SLMWmebWmSoKYNeWrs1r", "expirationDate": "2024-04-09T13:57:34Z" } ```