Esempio n. 1
0
def update_user_password(id: int, password: str) -> bool:
    with session_scope() as session:
        user = User.get_by_id(session, id)
        if user is None:
            raise MissingUserError(f"User not found with id: {id}")
        user.password = password
    return True
Esempio n. 2
0
    def create_password_reset_token(self,
                                    owner: int,
                                    expires: datetime = None):
        assert owner, 'Owner required'
        assert expires is None or expires >= datetime.utcnow(
        ), 'Expiration must be in the future'

        issued = datetime.utcnow()
        expires = expires or datetime.utcnow() + timedelta(hours=24)

        with session_scope() as session:
            user = User.get_by_id(session, owner)
            roles = [role.name for role in user.roles]
            key = user.password
            token = jwt.encode(payload={
                'own': owner,
                'roles': ','.join(roles),
                'iss': self.issuer,
                'iat': issued,
                'exp': expires,
            },
                               key=key,
                               algorithm=self.alg,
                               headers={'tok': 'pas'})
        return token
Esempio n. 3
0
def user_recommended_events_valid(user_id: int):
    with session_scope() as session:
        user = User.get_by_id(session, user_id)
        recommended = user.recommended_events
        accepted = set([a.id for a in user.accepted_events])
        return EventData.list([
            e for e in recommended
            if e.end_date > datetime.now() and e.id not in accepted
        ])
Esempio n. 4
0
 def decode_refresh_token(self, token: str) -> Dict[str, Any]:
     assert token, 'Token required'
     assert jwt.get_unverified_header(token).get(
         'tok') == 'ref', 'Refresh token required'
     user = jwt.decode(token, verify=False).get('own')
     with session_scope() as session:
         password = User.get_by_id(session, user).password
     key = self.secret + password
     return jwt.decode(token.encode(),
                       key=key,
                       algorithms=[self.alg],
                       options={'verify_exp': False})
Esempio n. 5
0
def get_active_by_user(user_id: int) -> List[EventViewData]:
    with session_scope() as session:
        # events = Event.get_all_active_by_user(session, user_id)
        user = User.get_by_id(session, user_id)
        events = Event.get_all_active(session)
        user_accepted = {event.id for event in user.accepted_events}
        user_recommended = {event.id for event in user.recommended_events}
        views = [
            EventViewData(event, event.id in user_accepted, event.id
                          in user_recommended) for event in events
        ]
        return views
Esempio n. 6
0
def update_user_profile(id: int,
                        food: List[int] = None,
                        pantry: bool = None,
                        eager: int = None):
    with session_scope() as session:
        user = User.get_by_id(session, id)
        if food:
            UserFoodPreference.update(session, id, food)
        if pantry:
            user.pitt_pantry = pantry
        if eager:
            user.eagerness = eager
        session.merge(user)
Esempio n. 7
0
 def decode_password_token(self,
                           token: str,
                           verify_exp: bool = False) -> Dict[str, Any]:
     assert token, 'Token required'
     assert jwt.get_unverified_header(token).get(
         'tok') == 'pas', 'Password reset token required'
     user = jwt.decode(token, verify=False).get('own')
     with session_scope() as session:
         password = User.get_by_id(session, user).password
     return jwt.decode(token,
                       key=password,
                       algorithms=[self.alg],
                       options={'verify_exp': verify_exp})
Esempio n. 8
0
    def create_refresh_token(self, owner: int) -> bytes:
        assert owner, 'Owner required'
        issued = datetime.utcnow()

        with session_scope() as session:
            user = User.get_by_id(session, owner)
            roles = [role.name for role in user.roles]
            key = self.secret + user.password
            token = jwt.encode(payload={
                'own': owner,
                'roles': ','.join(roles),
                'iss': self.issuer,
                'iat': issued,
            },
                               key=key,
                               algorithm=self.alg,
                               headers={'tok': 'ref'})
        return token
Esempio n. 9
0
def change_user_password(id: int, old_password: str,
                         new_password: str) -> bool:
    """
    Changes user password from old to new
    :param id:
    :param old_password:
    :param new_password:
    :return: True if succeeded
        False if not (invalid old_password, etc.)
    """
    with session_scope() as session:
        user = User.get_by_id(session, id)
        if user is None:
            raise MissingUserError(f"User not found with id: {id}")
        else:
            if not user.verify_password(old_password):
                return False
            user.password = new_password
    return True
Esempio n. 10
0
def get_user_food_preferences(id: int) -> List[FoodPreferenceData]:
    with session_scope() as session:
        food_preferences = User.get_by_id(session, id).food_preferences
        return FoodPreferenceData.list(food_preferences)
Esempio n. 11
0
def get_user_profile(id: int) -> Optional[UserProfileData]:
    with session_scope() as session:
        user = User.get_by_id(session, id)
        return None if not user else UserProfileData(user)
Esempio n. 12
0
def update_expo_token(id: int, token: str) -> bool:
    with session_scope() as session:
        user = User.get_by_id(session, id)
        user.expo_token = token
    return True
Esempio n. 13
0
def _is_user(session, id: int) -> bool:
    user = User.get_by_id(session, id)
    return user is not None
Esempio n. 14
0
def user_accepted_events(user_id: int):
    with session_scope() as session:
        user = User.get_by_id(session, user_id)
        accepted = user.accepted_events
        return EventData.list(accepted)
Esempio n. 15
0
def user_recommended_events(user_id: int):
    with session_scope() as session:
        user = User.get_by_id(session, user_id)
        recommended = user.recommended_events
        return EventData.list(recommended)
Esempio n. 16
0
def _is_admin(session, id: int) -> bool:
    user = User.get_by_id(session, id)
    if user is None:
        raise MissingUserError(f"User not found with id: {id}")
    return user.is_admin