def login(self, username, password) -> Token: """Exchange login credentials for a token""" with Session(self._engine, future=True) as session: user = session.execute( select(User).where( User.username == username)).scalar_one_or_none() if not user: raise MissingUserError if user.deactivated: raise DeactivatedUserError if not check_password(password, user.password): raise AuthenticationError if not user.confirmed: raise UnconfirmedUserError token = get_token(user.id) return token
def add_user(self, token: Token, user_details: Dict) -> UserDetails: """Adds a user to the database""" user_id, token = validate_token(token) if not self.check_if_username_is_unique(user_details["username"]): raise DuplicateUsernameError with Session(self._engine, future=True) as session: self._require_admin_user( user_id=user_id, session=session, ) for field in user_details.keys(): if field in PROTECTED_FIELDS: raise UnauthorizedUserError # don't mutate original dict user_details = { **user_details, "id": str(uuid4()), "type": "contrib", "confirmed": False, "deactivated": False, } # handle password password = user_details["password"] user_details["password"] = encrypt(password) # create user object new_user = User(**user_details) session.add(new_user) session.commit() # TODO: when email service is enabled, add call here to send a token to # the provided email address. new_user_token = get_token(new_user.id) log.info(f"New User Token is: {new_user_token}") return token, new_user.to_dict()
def unconfirmed_user_token(unconfirmed_user_id): return get_token(unconfirmed_user_id)
def active_admin_token(admin_user_id): token = get_token(admin_user_id) return token
def active_token(user_id): token = get_token(user_id) return token
def test_get_token_with_force_refresh(): user_id = "my_user_id_123" token = get_token(user_id) new_user_id, new_token = validate_token(token, force_refresh=True) assert user_id == new_user_id assert token is not new_token
def test_get_token(): user_id = "my_user_id_123" token = get_token(user_id) new_user_id, new_token = validate_token(token) assert user_id == new_user_id assert token == new_token