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