예제 #1
0
    def on_post(self, req, resp):
        email = get_param(req, 'email')
        password = get_param(req, 'password')

        if email is None or password is None:
            resp.body = json.dumps({'error': 'One or more values is missing'})
            resp.status = falcon.HTTP_401
            return
        try:
            user = get_user_by_email(self.db, email)
            if secret_is_valid(password, user.password):
                payload = {
                    'user_id':
                    str(user.id),
                    'exp':
                    datetime.utcnow() +
                    timedelta(hours=self.jwt_config.expire_delta_hours)
                }
                jwt_token = jwt.encode(payload, self.jwt_config.secret,
                                       self.jwt_config.algorithm)
                resp.body = json.dumps({'token': jwt_token.decode('utf-8')})
            else:
                set_invalid_credentials(resp)

        except NoResultFound:
            self.logger.debug('user not found')
            set_invalid_credentials(resp)
        except ValueError:
            self.logger.debug('cant verify password')
            set_invalid_credentials(resp)
예제 #2
0
 def on_get(self, request: Request, response: Response):
     response.body = json.dumps({"status": "up"})
예제 #3
0
def set_invalid_credentials(resp):
    resp.body = json.dumps({'error': 'Credentials are not valid'})
    resp.status = falcon.HTTP_400
예제 #4
0
    def on_post(self, request: Request, response: Response):
        monster_dto = MonsterDTO(**request.media)

        monster: Monster = self.__monster_service.save(monster_dto.to_model)

        response.body = json.dumps(monster_dto(monster).__dict__)