Exemplo n.º 1
0
    def put(self):
        request_json = request.get_json(silent=True)
        username = get_jwt_identity()

        if not request_json:
            err_msg = "Body should not be empty"
            return {"message": err_msg}, 400

        old_password: str = request_json.get('old_password')
        new_password: str = request_json.get('new_password')
        confirm_password: str = request_json.get('confirmation_password')

        if not old_password or not new_password or not confirm_password:
            err_msg = "Please check password fields."
            return {"message": err_msg}, 400

        current_user = UserRepository.get(username)
        current_password = current_user.get("password")

        if not current_password:
            err_msg = "Can't retrieve previous password."
            return {"message": err_msg}, 400
        if not UserRepository.verify_hash(old_password, current_password):
            err_msg = "Wrong old password value."
            return {"message": err_msg}, 400
        if new_password != confirm_password:
            err_msg = "New password doesn't match with confirmation password."
            return {"message": err_msg}, 400
        if not new_password:
            err_msg = "New password is empty. Update didn't pass"
            return {"message": err_msg}, 400

        user = UserRepository.update_password(username, new_password)
        return user, 200
Exemplo n.º 2
0
    def test_update(self):
        """ The PUT on `/user` should update an user's info"""
        user = UserRepository.create(first_name="John", last_name="Doe")
        response = self.client.put(
            "/application/user/{}".format(user.id),
            content_type="application/json",
            data=json.dumps(
                dict(first_name="John",
                     last_name="Doe",
                     emails=["*****@*****.**"],
                     phone_numbers=["+491424324435"])),
        )

        self.assertEqual(response.status_code, 200)
        response_json = json.loads(response.data.decode("utf-8"))
        self.assertEqual(
            response_json,
            {
                "user":
                dict(user_id=user.id,
                     first_name="John",
                     last_name="Doe",
                     emails=["*****@*****.**"],
                     phone_numbers=["+491424324435"])
            },
        )
        user = UserRepository.get(user_id=user.id)
        self.assertEqual(user.first_name, "John")
Exemplo n.º 3
0
 def post(email: str, password: str):
     if UserRepository.find_by_email(email):
         return {"message": "Email already exits"}, 400
     else:
         user = UserRepository.create(
             email=email, password=generate_password_hash(password))
     return user.json
Exemplo n.º 4
0
 def put(last_name, first_name, age):
     """ Update an user based on the sent information """
     repository = UserRepository()
     user = repository.update(last_name=last_name,
                              first_name=first_name,
                              age=age)
     return jsonify({'user': user.json})
Exemplo n.º 5
0
    def post(self):
        request_json = request.get_json(silent=True)
        username: str = request_json.get("username")
        password: str = request_json.get("password")

        # lookup by username
        if not username or not password:
            err_msg = "Please check the credentials."
            return {"message": err_msg}, 400
        if UserRepository.get(username):
            current_user = UserRepository.get(username)
        else:
            err_msg = f"User {username} doesn't exist"
            return {"message": err_msg}, 404

        if not current_user.get("active"):
            err_msg = "User was deleted. Please contact the admin."
            return {"message": err_msg}, 404

        if UserRepository.verify_hash(password, current_user.get("password")):
            access_token = create_access_token(identity=username)
            refresh_token = create_refresh_token(identity=username)
            msg = "Logged in as {}".format(current_user.get("username"))
            response = {
                "message": msg,
                "access_token": access_token,
                "refresh_token": refresh_token,
            }
            return response, 200
        else:
            return {"message": "Wrong password"}, 401
Exemplo n.º 6
0
    def auth_wrapper(*args, **kwargs):
        try:
            auth_header = request.headers['Authorization']
            token = auth_header.split(' ')[1]
            id_info = id_token.verify_oauth2_token(token, requests.Request(),
                                                   config.GOOGLE_CLIENT_ID)
            oid = id_info["sub"]
            picture = id_info["picture"]
            name = id_info["name"]
            email = id_info["email"]
            user = UserRepository.get(oid)
            if user:
                user = UserRepository.update(oid, email, picture, name)
            else:
                user = UserRepository.create(oid, email, picture, name)

            if 'oid' in kwargs:
                if kwargs['oid'] != user.oid:
                    return render_error(
                        "You don't have right access to this page", 403)

            kwargs.update({'user': user})
            return method(*args, **kwargs)

        except Exception as exc:
            return render_error(str(exc), 401)
Exemplo n.º 7
0
    def test_get(self):
        """ The GET on `/user` should return an user """
        UserRepository.create(first_name='John', last_name='Doe', age=25)
        response = self.client.get('/application/user/Doe/John')

        self.assertEqual(response.status_code, 200)
        response_json = json.loads(response.data.decode('utf-8'))
        self.assertEqual(response_json, {'user': {'age': 25, 'first_name': 'John', 'last_name': 'Doe'}})
Exemplo n.º 8
0
 def put(last_name, first_name, age):
     """ Update an user based on the sent information """
     repository = UserRepository()
     user = repository.update(last_name=last_name,
                              first_name=first_name,
                              age=age)
     if user:
         return jsonify({'user': user.json})
     return bad_request('unable to update user')
Exemplo n.º 9
0
    def post(username, password, name, type):
        ensure_user(user_type="admin")
        if UserRepository.get(username) is not None:
            abort(400, msg="existing user")

        user = UserRepository.create(username, password, name, type)
        user_json = user.json
        del user_json["password"]
        return user_json, 200
Exemplo n.º 10
0
 def put(user_id, last_name, first_name, email, age, gender):
     """ Update an user based on the sent information """
     repository = UserRepository()
     user = repository.update(user_id=user_id,
                              last_name=last_name,
                              first_name=first_name,
                              email=email,
                              age=age,
                              gender=gender)
     return jsonify({"user": user.json})
Exemplo n.º 11
0
    def test_get(self):
        UserRepository.create(id='curso-departamento-pessoal---presencial-manha__534240')
        response = self.client.get('/application/event/curso-departamento-pessoal---presencial-manha__534240')

        self.assertEqual(response.status_code, 200)
        response_json = json.loads(response.data.decode('utf-8'))
        self.assertEqual(
            response_json,
            {'event': {'id': 'curso-departamento-pessoal---presencial-manha__534240'}}
        )
Exemplo n.º 12
0
 def test_get_username(self):
     username = "******"
     password = "******"
     password_hash_salt = make_pw_hash(username, password)
     user = User(username=username, password_hash_salt=password_hash_salt)
     assert UserRepository.username_not_taken(username)
     user.put()
     assert not UserRepository.username_not_taken(username)
     user_id = UserRepository.user_id_from_username_password(username, password)
     assert user_id == user.key().id()
Exemplo n.º 13
0
    def test_get(self):
        """ The GET on `/user` should return an user """
        UserRepository.create(first_name="John", last_name="Doe", age=25)
        response = self.client.get("/application/user/Doe/John")

        self.assertEqual(response.status_code, 200)
        response_json = json.loads(response.data.decode("utf-8"))
        self.assertEqual(
            response_json,
            {"user": {"age": 25, "first_name": "John", "last_name": "Doe"}},
        )
Exemplo n.º 14
0
 def post(last_name, first_name, age):
     """ Create an user based on the sent information """
     existing_user = UserRepository.get(last_name=last_name,
                                        first_name=first_name)
     if existing_user:
         return bad_request('user already in database')
     user = UserRepository.create(last_name=last_name,
                                  first_name=first_name,
                                  age=age)
     if user:
         return jsonify({'user': user.json})
     return bad_request('unable to create user')
Exemplo n.º 15
0
    def test_create(self, mock_decorator):
        """ The POST on `/user` should create an user """
        UserRepository.create(first_name='John', last_name='Doe', age=25)
        response = self.client.post(
            '/api/users/Doe/John',
            content_type='application/json',
            headers={'Authorization': 'Bearer token'},
            data=json.dumps({
                'age': 30
            })
        )

        self.assertEqual(response.status_code, 400)
Exemplo n.º 16
0
 def put(user_id,
         last_name=None,
         first_name=None,
         emails=None,
         phone_numbers=None):
     """ Update an user based on the sent information """
     repository = UserRepository()
     user = repository.update(user_id=user_id,
                              last_name=last_name,
                              first_name=first_name,
                              emails=emails,
                              phone_numbers=phone_numbers)
     return jsonify({"user": user.json})
Exemplo n.º 17
0
    def test_update(self):
        """ The PUT on `/user` should update an user's age """
        UserRepository.create(first_name='John', last_name='Doe', age=25)
        response = self.client.put(
            '/application/user/Doe/John',
            content_type='application/json',
            data=json.dumps({
                'age': 30
            })
        )

        self.assertEqual(response.status_code, 200)
        response_json = json.loads(response.data.decode('utf-8'))
        self.assertEqual(response_json, {'user': {'age': 30, 'first_name': 'John', 'last_name': 'Doe'}})
        user = UserRepository.get(first_name='John', last_name='Doe')
        self.assertEqual(user.age, 30)
Exemplo n.º 18
0
def remove(user_id: str):
    twit_casting_api_service = TwitCastingApiService(base_url, client_id,
                                                     client_secret, app.logger)
    response = twit_casting_api_service.delete_webhooks(user_id, True, True)
    user_repository = UserRepository(twit_casting_api_service, cache)
    user = user_repository.get_by_id(user_id)

    if isinstance(response, DeleteWebhookOkResponse):
        flash("Successfully deleted: %s (%s)" % (user.screen_id, user_id),
              "success")
    else:
        flash(
            "Failed. status %s, message: %s" %
            (response.code, response.message), "failure")

    return redirect(url_for("index"))
Exemplo n.º 19
0
    async def is_allowed(self):
        if self.force_allowed:
            return True
        user_repository_instance = UserRepository()
        repo_repository_instance = RepoRepository()
        user = await user_repository_instance.find_one(
            github_username=self.author)
        if not user:
            log.warning(
                'Couldn\'t find user in our database with this github username: %s',
                self.author)
            return False
        dm_id = user.slack_dm_id

        repo = await repo_repository_instance.find_one(
            repo_url=self.repo_url, subscribed_user_id=user.id)

        if not repo:
            log.warning('User %s is not subscribed for %s repository',
                        self.author, self.repo_url)
            return False

        if not dm_id:
            dm_id = await SlackManager(token=os.environ.get('SLACK_TOKEN')
                                       ).create_dm_id(
                                           slack_user_id=user.slack_id)
            await user_repository_instance.update(
                values={'slack_dm_id': dm_id}, id=user.id)
        self.slack_dm_id = user.slack_dm_id
        self.slack_user_id = user.slack_id
        return True
Exemplo n.º 20
0
 def get(last_name, first_name):
     """
     Return an user key information based on his name
     ---
     tags:
       - user
     parameters:
       - name: last_name
         in: path
         type: string
         description: the last name of the user
       - name: first_name
         in: path
         type: string
         description: the last name of the user
     responses:
       200:
         description: The user's information were successfully retrieved
         schema:
           example:
             user:
               last_name: Doe
               first_name: John
               age: 30
     """
     user = UserRepository.get(last_name=last_name, first_name=first_name)
     return jsonify({'user': user.json})
Exemplo n.º 21
0
    def get():
        username = get_jwt_identity()
        user = UserRepository.get(username)
        if user is None:
            abort(400, msg="fatal error, not recognised user")

        if user.user_type == "admin":
            tasks = user.tasks
            tasks = [{
                "id":
                task.id,
                "name":
                task.name,
                "total":
                task.total,
                "assignees": [{
                    "name": job.user.name,
                    "id": job.user.id
                } for job in task.jobs],
            } for task in tasks]
            return tasks
        else:
            jobs = user.jobs
            tasks = [{
                "id": job.task.id,
                "name": job.task.name,
                "total": job.task.total
            } for job in jobs]
            return tasks
 def post(email: str, password: str):
     user = UserRepository.find_by_email(email)
     if not user or email != user.email or not check_password_hash(
             user.password, password):
         return {"message": "Bad username or password"}, 400
     access_token = create_access_token(identity=email)
     return {"access_token": access_token}, 200
Exemplo n.º 23
0
def create():
    """ Create a auth """
    body = request.get_json()
    auth = AuthRepository.getByUsername(body["username"].lower())
    expires = datetime.timedelta(days=1)
    if not auth:
        pw_hash = generate_password_hash(body["password"], 10)
        auth = AuthRepository.create(body["username"].lower(), pw_hash)
        user = UserRepository.create(body["username"], None, None)
        expires = datetime.timedelta(days=1)
        # access_token = create_access_token(identity = { "username": auth.username, "id": auth.id }, expires_delta=expires)
        access_token = create_access_token(identity={
            "username": auth.username,
            "id": auth.id
        })
        response = jsonify({"success": True, "access_token": access_token})
        response.status_code = 200
        return response
    validatePassword = check_password_hash(auth.password, body["password"])
    if not validatePassword:
        response = jsonify({
            "success": False,
            "message": "Invalid username or password"
        })
        response.status_code = 200
        return response

    access_token = create_access_token(identity={
        "username": auth.username,
        "id": auth.id
    })
    AuthRepository.updateToken(id=auth.id, token=access_token)
    response = jsonify({"success": True, "access_token": access_token})
    response.status_code = 200
    return response
Exemplo n.º 24
0
    def unsubscribe(self):
        self.payload = parse.parse_qs(self.payload)
        github_repo = self.payload.get('text').pop()
        github_repo = github_repo.rstrip('>').lstrip('<')
        user_slack_id = self.payload.get('user_id').pop()
        msg = {'text': ''}

        user = UserRepository.get_user_by_slack_id(user_slack_id)

        if not user:
            return attach_message(msg, 'You are not registered here')
        repo = sa.select([repository_t]).where(
            sa.and_(repository_t.c.subscribed_user_id == user.id,
                    repository_t.c.repo_url.like(
                        github_repo))).execute().fetchone()

        if not repo:
            return attach_message(
                msg,
                f'You are not subscribed to this repository {github_repo}')
        log.info('Unsubscribe %s to %s',
                 self.payload.get('user_name', []).pop(), github_repo)
        repository_t.delete().where(
            sa.and_(repository_t.c.subscribed_user_id == user.id,
                    repository_t.c.repo_url == repo.repo_url)).execute()
        return attach_message(msg,
                              f'Successfully unsubscribed from {github_repo}',
                              color='#47a450')
Exemplo n.º 25
0
    def subscribe(self):
        self.payload = parse.parse_qs(self.payload)
        github_repo = self.payload.get('text').pop()
        github_repo = github_repo.rstrip('>').lstrip('<')
        user_slack_id = self.payload.get('user_id').pop()
        user = UserRepository.get_user_by_slack_id(user_slack_id)
        msg = {
            'text': '',
        }
        if not user:
            return attach_message(
                msg,
                'You must first register via /signin %your_github_username%')
        repo = sa.select([repository_t.c.repo_url]).where(
            sa.and_(repository_t.c.subscribed_user_id == user.id,
                    repository_t.c.repo_url ==
                    github_repo.lower())).execute().fetchone()

        if repo:
            return attach_message(
                msg,
                f'You are already subscribed to this repository {github_repo}')
        log.info('Subscribing %s to %s',
                 self.payload.get('user_name', []).pop(), github_repo)

        repository_t.insert().values({
            'subscribed_user_id': user.id,
            'repo_url': github_repo
        }).execute()

        return attach_message(msg,
                              f'Successfully subscribed to {github_repo}',
                              color='#47a450')
Exemplo n.º 26
0
 def post(last_name, first_name, emails, phone_numbers):
     """ Create an user based on the sent information """
     user = UserRepository.create(last_name=last_name,
                                  first_name=first_name,
                                  emails=emails,
                                  phone_numbers=phone_numbers)
     return jsonify({"user": user.json})
Exemplo n.º 27
0
    def post(name, task_file, mode):
        """ Create a task based on the uploaded file """
        username = get_jwt_identity()
        user = UserRepository.get(username)
        if user is None:
            abort(400, msg="fatal error, not recognised user")
        if user.user_type != "admin":
            abort(400, msg="only admin user can create task")

        if len(task_file) == 0:
            abort(400, msg="no task file specified")

        file = task_file[0]
        filename = secure_filename(file.filename)
        filename = os.path.splitext(os.path.basename(filename))[0]

        if not filename:
            abort(400, msg="invalid filename")

        file_path = os.path.join(TASK_DATA_PATH, filename + ".txt")
        file.save(file_path)

        if not TaskRepository.create(name, user, 0, file_path, mode):
            # os.remove(file_path)
            abort(400, msg="failed to create task")

        return {"msg": "successuflly created"}
Exemplo n.º 28
0
 def delete(username):
     """ Return an user key information based on his name """
     ensure_user(user_type="admin")
     rsl = UserRepository.delete(username=username)
     if rsl:
         return {"msg": "Sucessfully deleted."}, 200
     else:
         return {"msg": "User does not exist."}, 400
Exemplo n.º 29
0
 def get(username):
     """ Return an user key information based on his name """
     ensure_user(user_type="admin")
     user = UserRepository.get(username=username)
     if user is not None:
         return user.json
     else:
         abort(404, msg="User not found")
Exemplo n.º 30
0
 def post(last_name, first_name, email, age, gender):
     """ Create an user based on the sent information """
     user = UserRepository.create(last_name=last_name,
                                  first_name=first_name,
                                  email=email,
                                  age=age,
                                  gender=gender)
     return jsonify({"user": user.json})
Exemplo n.º 31
0
 def post(last_name, first_name, age):
     """ Create an user based on the sent information """
     user = UserRepository.create(
         last_name=last_name,
         first_name=first_name,
         age=age
     )
     return jsonify({'user': user.json})
Exemplo n.º 32
0
 def __init__(self):
     """initialize objects available to all api endpoint methods"""
     self.games = GameStateRepository()
     self.users = UserRepository()
     self.moves = MoveRepository()
Exemplo n.º 33
0
class WordWarsApi(remote.Service):
    """Google endpoints API for WordWars game service."""

    def __init__(self):
        """initialize objects available to all api endpoint methods"""
        self.games = GameStateRepository()
        self.users = UserRepository()
        self.moves = MoveRepository()

    @endpoints.method(request_message=NEW_USER_REQUEST,
                      response_message=StringMessage,
                      path='user',
                      name='create_user',
                      http_method='POST')
    def create_user(self, request):
        """Create a User. Requires a unique username"""
        if self.users.findByName(request.user_name):
            raise endpoints.ConflictException(
                'A User with that name already exists!')
        if not EMAIL_REGEX.match(request.email):
            raise endpoints.BadRequestException(
                'Email address is not valid: {}'.format(request.email))
        user = User.create(request.user_name, request.email)
        self.users.register(user)
        return StringMessage(message='User {} created!'.format(request.user_name))

    @endpoints.method(request_message=USERNAME_REQUEST,
                      response_message=StringList,
                      path='user/{user_name}/games',
                      name='get_user_games',
                      http_method='GET')
    def get_user_games(self, request):
        """Return id values for all games where this user is a player."""
        user = self.userByName(request.user_name)
        idList = []
        for p in PlayerStateRepository().findByUser(user):
            idList.append(self.games.id(p.game))
        gameIds = StringList()
        gameIds.strings = idList
        return gameIds

    @endpoints.method(request_message=PLAIN_REQUEST,
                      response_message=IdForm,
                      path='game/new',
                      name='new_unstarted_game',
                      http_method='POST')
    def new_unstarted_game(self, request):
        """Create a new game with no users and return its ID."""
        game = GameState.create()
        # "register" on next line sets "board" and other persistent variables
        self.games.register(game)
        # TODO: JSON response
        next = game.nextPlayer()
        return IdForm(urlsafe_key=self.games.id(game))

    @endpoints.method(request_message=GAME_ID_REQUEST,
                      response_message=GameForm,
                      path='game/{gameid}',
                      name='get_game',
                      http_method='GET')
    def get_game(self, request):
        """Return game state for requested ID."""
        game = self.gameById(request.gameid)
        return self.gameFormFrom(game, '')

    @endpoints.method(request_message=ADD_USER_REQUEST,
                      response_message=StringMessage,
                      path='game/{gameid}/add_user',
                      name='add_user',
                      http_method='PUT')
    def add_user(self, request):
        """Add user to requested game."""
        game = self.gameById(request.gameid)
        if game.started():
            raise endpoints.BadRequestException(
                'Can''t add user after game is started.')
        user = self.userByName(request.user_name)
        game.addPlayer(user)
        self.games.update(game)
        return StringMessage(message='User {} added!'.format(request.user_name))

    @endpoints.method(request_message=GAME_ID_REQUEST,
                      response_message=GameForm,
                      path='game/{gameid}/start',
                      name='start_game',
                      http_method='PUT')
    def start_game(self, request):
        """Start requested game (no more players may be added)."""
        game = self.gameById(request.gameid)
        if len(game.players) <= 0:
            raise endpoints.BadRequestException(
                'Must add players before starting.')
        self.validateNotOver(game)
        self.validateNotCancelled(game)
        game.start()
        self.games.update(game)
        return self.gameFormFrom(game, '')

    @endpoints.method(request_message=MAKE_MOVE_REQUEST,
                      response_message=GameForm,
                      path='game/{gameid}/move',
                      name='make_move',
                      http_method='PUT')
    def make_move(self, request):
        """Add requested word to the board at x,y, across or not."""
        game = self.gameById(request.gameid)
        self.validateStarted(game)
        self.validateNotOver(game)
        self.validateNotCancelled(game)
        if game.nextPlayer().player.name != request.user_name:
            raise endpoints.BadRequestException(
                'Not turn yet for {}'.format(request.user_name))
        user = self.users.findByName(request.user_name)
        word = request.word
        across = request.across
        x = request.x
        y = request.y
        scoreBefore = game.scoreForUser(user)
        if len(request.word) <= 0:
            game.skipTurn(user)
        else:
            try:
                game.playWord(user, x, y, across, word)
            except Exception, e:
                raise endpoints.BadRequestException(
                    'Illegal move: {}'.format(e.message))
        scoreAfter = game.scoreForUser(user)
        playScore = scoreAfter - scoreBefore
        self.games.update(game)
        # keep history of moves
        self.moves.register(
            Move.create(game, user, word, across, x, y, playScore))
        return self.gameFormFrom(
            game, self.lastPlayDescription(scoreBefore, scoreAfter))