def create_federated_user( username, email, service_id, service_ident, set_password_notification, metadata={}, email_required=True, confirm_username=True, prompts=tuple(), ): prompts = set(prompts) if confirm_username: prompts.add(UserPromptTypes.CONFIRM_USERNAME) new_user = create_user_noverify(username, email, email_required=email_required, prompts=prompts) new_user.verified = True new_user.save() FederatedLogin.create( user=new_user, service=_get_login_service(service_id), service_ident=service_ident, metadata_json=json.dumps(metadata), ) if set_password_notification: notification.create_notification("password_required", new_user) return new_user
def create_robot(robot_shortname, parent, description="", unstructured_metadata=None): (username_valid, username_issue) = validate_username(robot_shortname) if not username_valid: raise InvalidRobotException( "The name for the robot '%s' is invalid: %s" % (robot_shortname, username_issue) ) username = format_robot_username(parent.username, robot_shortname) try: User.get(User.username == username) msg = "Existing robot with name: %s" % username logger.info(msg) raise InvalidRobotException(msg) except User.DoesNotExist: pass service = LoginService.get(name="quayrobot") try: with db_transaction(): created = User.create(username=username, email=str(uuid.uuid4()), robot=True) token = random_string_generator(length=64)() RobotAccountToken.create(robot_account=created, token=token, fully_migrated=True) FederatedLogin.create( user=created, service=service, service_ident="robot:%s" % created.id ) RobotAccountMetadata.create( robot_account=created, description=description[0:255], unstructured_json=unstructured_metadata or {}, ) return created, token except Exception as ex: raise DataModelException(ex.message)
def attach_federated_login(user, service_id, service_ident, metadata=None): service = _get_login_service(service_id) FederatedLogin.create( user=user, service=service, service_ident=service_ident, metadata_json=json.dumps(metadata or {}), ) return user