def test_create_user_should_return_token(self):
     resp = self.simulate_post('/user')
     self.assertIn('token', resp.json)
     token = resp.json.get('token')
     hash = UserModel.generate_token_hash(token)
     user = UserModel.get(UserModel.token_hash == hash)
     self.assertEqual(user.token_hash, hash)
Exemplo n.º 2
0
def get_user_by_id(user_id):
    """
    This method will get a user model by level id, if we don't have this user, it will create one
    @param user_id: id of the user we are looking for
    @return: userModel of the model we are looking for
    """
    user = UserModel.query(UserModel.user_id == user_id).get()
    # if we haven't had this  user before, add it
    if user is None:
        user = UserModel(user_id=user_id)
    return user
Exemplo n.º 3
0
    def save_user(self):

        user_name = self.request.get('user_name')
        height = self.request.get('height')
        birthday = self.request.get('birthday')
        birthday = datetime.strptime(birthday, '%Y-%m-%d').date()

        user1 = UserModel.get_by_id('user1')
        user1.user_name = user_name
        user1.height = int(height)
        user1.birthday = birthday
        user1.put()
Exemplo n.º 4
0
    def get(self):

        # ------------------------------------------
        # ユーザー1の情報を得る
        # ------------------------------------------
        user1 = UserModel.get_by_id('user1')
        self.set_template_value('user1', user1)

        # ------------------------------------------
        # Search API検索
        # ------------------------------------------
        user_name = self.request.get('user_name')
        height = self.request.get('height')
        birthday1 = self.request.get('birthday1')
        birthday2 = self.request.get('birthday2')

        queries = list()
        if user_name:
            queries.append(u"user_name = {0}".format(user_name))
        if height:
            queries.append(u"height = {0}".format(height))
        if birthday1:
            queries.append(u"birthday >= {0}".format(birthday1))
        if birthday2:
            queries.append(u"birthday <= {0}".format(birthday2))

        query = ''
        if queries:
            query = ' AND '.join(queries)

        index = search.Index('UserIndex')
        results = index.search(query)

        self.set_template_value('results', results)

        self.draw_template('front/search_api/top.html')


        return
Exemplo n.º 5
0
 def delete(cls, user_id):
     user = UserModel.find_by_id(user_id)
     if not user:
         return {'message': 'User not found'}, 404
     user.delete_from_db()
     return {'message': 'User deleted'}
Exemplo n.º 6
0
 def get(cls, user_id):
     user = UserModel.find_by_id(user_id)
     if not user:
         return {'message': 'User not found'}, 404
     return user.json()
Exemplo n.º 7
0
def identity(payload):
    user_id = payload['identity']
    return UserModel.find_by_id(user_id)
Exemplo n.º 8
0
def authenticate(username, password):
    user = UserModel.find_by_username(username)
    if user and check_hashed_password(password, user.password):
        return user
def authenticate(username, password):
    user = UserModel.find_by_username(username)
    if user and safe_str_cmp(user.password, password):
        return user
Exemplo n.º 10
0
def update(event, context):
    """
  userの更新
  updateでの更新対象はemail, name, phoneNumberのみ
  """
    try:
        logger.info(event)
        if not (event['body'] and event['pathParameters']):
            raise errors.BadRequest('Bad request')

        data = json.loads(event['body'])
        # dataから不要なattributeを削除
        data = {
            k: v
            for k, v in data.items() if k in ['name', 'email', 'phoneNumber']
        }
        if not data:
            raise errors.BadRequest('Bad request')
        user_id = event['pathParameters']['id']

        # user_idがauthorized_userのものか検証
        if user_id != event['requestContext']['authorizer']['authorizedUserId']:
            raise errors.ForbiddenError('Access denied')

        # userが存在するか
        try:
            user = UserModel.get(user_id)
        except UserModel.DoesNotExist as e:
            raise errors.NotFound('This user does not exist')

        if 'name' in data:
            user.name = data['name']
        if 'email' in data:
            user.email = data['email']
        if 'phoneNumber' in data:
            user.phoneNumber = data['phoneNumber']

        # userの更新
        try:
            user.save()
        except InvalidNameError as e:
            logger.exception(e)
            raise errors.BadRequest(str(e.with_traceback(sys.exc_info()[2])))
        except InvalidPhoneNumberError as e:
            logger.exception(e)
            raise errors.BadRequest(str(e.with_traceback(sys.exc_info()[2])))
        except InvalidEmailError as e:
            logger.exception(e)
            if str(e.with_traceback(
                    sys.exc_info()[2])) == 'This email has been registered':
                raise errors.UnprocessableEntity(
                    str(e.with_traceback(sys.exc_info()[2])))
            else:
                raise errors.BadRequest(
                    str(e.with_traceback(sys.exc_info()[2])))
        except PutError as e:
            logger.exception(e)
            raise errors.InternalError('Internal server error')

        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Origin': '*',
                'Content-Type': 'application/json'
            },
            'body': json.dumps({
                'statusCode': 200,
                'user': dict(user)
            })
        }

    except errors.BadRequest as e:
        logger.exception(e)
        return build_response(e, 400)

    except errors.ForbiddenError as e:
        logger.exception(e)
        return build_response(e, 403)

    except errors.NotFound as e:
        logger.exception(e)
        return build_response(e, 404)

    except errors.UnprocessableEntity as e:
        logger.exception(e)
        return build_response(e, 409)

    except errors.InternalError as e:
        logger.exception(e)
        return build_response(e, 500)