def create(request): """ Create a user. This API endpoint allows authorised clients (those able to provide a valid Client ID and Client Secret) to create users in their authority. These users are created pre-activated, and are unable to log in to the web service directly. """ client = request_auth_client(request) schema = CreateUserAPISchema() appstruct = schema.validate(_json_payload(request)) validate_auth_client_authority(client, appstruct) appstruct['authority'] = client.authority user_unique_service = request.find_service(name='user_unique') try: user_unique_service.ensure_unique(appstruct, authority=client.authority) except DuplicateUserError as err: raise ConflictError(err) user_signup_service = request.find_service(name='user_signup') user = user_signup_service.signup(require_activation=False, **appstruct) presenter = UserJSONPresenter(user) return presenter.asdict()
def create(request): """ Create a user. This API endpoint allows authorised clients (those able to provide a valid Client ID and Client Secret) to create users in their authority. These users are created pre-activated, and are unable to log in to the web service directly. """ client = request_auth_client(request) schema = CreateUserAPISchema() appstruct = schema.validate(_json_payload(request)) validate_auth_client_authority(client, appstruct['authority']) appstruct['authority'] = client.authority user_unique_service = request.find_service(name='user_unique') try: user_unique_service.ensure_unique(appstruct, authority=client.authority) except DuplicateUserError as err: raise ConflictError(err) user_signup_service = request.find_service(name='user_signup') user = user_signup_service.signup(require_activation=False, **appstruct) presenter = UserJSONPresenter(user) return presenter.asdict()
def create(request): """ Create a user. This API endpoint allows authorised clients (those able to provide a valid Client ID and Client Secret) to create users in their authority. These users are created pre-activated, and are unable to log in to the web service directly. Note: the authority-enforcement logic herein is, by necessity, strange. The API accepts an ``authority`` parameter but the only valid value for the param is the client's verified authority. If the param does not match the client's authority, ``ValidationError`` is raised. :raises ValidationError: if ``authority`` param does not match client authority :raises HTTPConflict: if user already exists """ client_authority_ = client_authority(request) schema = CreateUserAPISchema() appstruct = schema.validate(_json_payload(request)) # Enforce authority match if appstruct["authority"] != client_authority_: raise ValidationError( "authority '{auth_param}' does not match client authority".format( auth_param=appstruct["authority"] ) ) user_unique_service = request.find_service(name="user_unique") try: user_unique_service.ensure_unique(appstruct, authority=client_authority_) except DuplicateUserError as err: raise HTTPConflict(str(err)) user_signup_service = request.find_service(name="user_signup") user = user_signup_service.signup(require_activation=False, **appstruct) presenter = UserJSONPresenter(user) return presenter.asdict()
def create(request): """ Create a user. This API endpoint allows authorised clients (those able to provide a valid Client ID and Client Secret) to create users in their authority. These users are created pre-activated, and are unable to log in to the web service directly. """ client = _request_client(request) schema = CreateUserAPISchema() appstruct = schema.validate(_json_payload(request)) _check_authority(client, appstruct) appstruct['authority'] = client.authority _check_existing_user(request.db, appstruct) user_signup_service = request.find_service(name='user_signup') user = user_signup_service.signup(require_activation=False, **appstruct) presenter = UserJSONPresenter(user) return presenter.asdict()
def schema(self): return CreateUserAPISchema()