Skip to main content

Create user

Motivation​

Create(register) new user

Functional design​

POST /api/v2/apps/{owner}/{app}/users

Headers​

KeyValue
Content-Typeapplication/json

Body​

JSON object:

{
"verifiedEmailToken": "{verified-email-token}",
"password": "{password}",
"displayName": "{display-name}"
}

Parameters​

ParameterTypeDescription
Path
ownerstringname of a user who owns the application
appstringname of an application
Body
verified-email-tokenstringverified value token for the email
passwordstringpassword for the new user
display-namestringdisplay name for the new user

Result​

CodeDescriptionBody
201Created
400Bad Requesterror object
401Unauthorizederror object
429Too may requests, rate limitingerror object
500+Server errors / service unavailableerror object

Technical design​

Components​

pkg/registry​

  1. CreateEmailLogin function:
TYPE CreateEmailLoginParams (
Email varchar VERIFIABLE,
AppName text NOT NULL,
SubjectKind int32 NOT NULL,
WSKindInitializationData text(1024) NOT NULL,
ProfileCluster int32 NOT NULL
);

COMMAND CreateEmailLogin (CreateEmailLoginParams, UNLOGGED CreateLoginUnloggedParams);
GRANT EXECUTE ON COMMAND CreateEmailLogin TO sys.Anonymous;
  • declaration in VSQL: ~cmp.registry.CreateEmailLogin.vsql~covrd1✅
  • the extension code: ~cmp.registry.CreateEmailLogin.go~covrd2✅
  1. CreateLogin must only be allowed to system ~cmp.registry.CreateLogin.vsql~uncvrd3❓

pkg/router​

  • URL path handler ~cmp.router.UsersCreatePathHandler~covrd4✅:
    • parses the request Body; calculates pseudo-wsid;
    • sends v2 request c.registry.CreateLogin to Command Processor

pkg/sys/it​

  • integration test for /users
    • ~it.TestUsersCreate~covrd5✅

Footnotes​

  1. [~server.users/cmp.registry.CreateEmailLogin.vsql~impl] pkg/registry/appws.vsql:117:impl ↩

  2. [~server.users/cmp.registry.CreateEmailLogin.go~impl] pkg/registry/impl_createlogin.go:29:impl ↩

  3. [~server.users/cmp.registry.CreateLogin.vsql~impl] ↩

  4. [~server.users/cmp.router.UsersCreatePathHandler~impl] pkg/router/impl_apiv2.go:217:impl ↩

  5. [~server.users/it.TestUsersCreate~impl] pkg/sys/it/impl_cpv2_test.go:368:impl ↩