Exemplo n.º 1
0
 def get(self, user_id):
     if user_id is None:
         s = UserModel.search()
         s.exclude('terms', status='deleted')
         res = s.execute()
         return res.hits.hits
     else:
         event = UserModel.get(user_id)
         return event.to_dict()
Exemplo n.º 2
0
def auth():
    data = request.json
    # access_token = data.get("accessToken")
    # import pprint
    # pprint.pprint(data)
    # import requests
    #
    # import os
    # from requests_oauthlib import OAuth2Session
    # GOOGLE_CLIENT_ID = os.environ.get("MW_GOOGLE_CLIENT_ID")
    # GOOGLE_CLIENT_SECRET = os.environ.get("MW_GOOGLE_CLIENT_SECRET")
    # requests.get("https://www.googleapis.com/oauth2/v1/userinfo?alt=json")
    #
    # # # https://requests-oauthlib.readthedocs.io/en/latest/oauth2_workflow.html#web-application-flow
    # # scope = ['https://www.googleapis.com/auth/userinfo.email',
    # #          'https://www.googleapis.com/auth/userinfo.profile']
    # # oauth = OAuth2Session(GOOGLE_CLIENT_ID, redirect_uri="", scope=scope)
    # # r = oauth.get('https://www.googleapis.com/oauth2/v1/userinfo')
    # # pprint.pprint(r)
    #
    #
    # import requests
    # headers = {'Authorization': 'OAuth ' + access_token}
    # req = requests.post('https://www.googleapis.com/oauth2/v1/userinfo', None, headers)
    # print(req)

    # # TODO: validate data with google

    # verify user exists in DB
    email = data["profileObj"]["email"]
    try:
        user = UserModel.get(email)
    except UserModel.DoesNotExist:
        print("User does not exist. Creating")
        user = UserModel(email)
        user.save()

    # # provide existing auth token
    # for token in AuthTokenModel:
    #     print(token, token.user_pub_id, token.token, token.expires)
    #     if token.expires > datetime.datetime.utcnow():
    #         print(f"still valid token {token.token}")
    #         return jsonify({"success": True, "token": token.token})
    #     token.delete()

    # provide new auth token
    token = AuthTokenModel()
    token.user_pub_id = user.pub_id
    token.save()
    print(f"new token {token.token}")
    return jsonify({
        "success": True,
        "token": token.token,
    })
Exemplo n.º 3
0
def load_user(user_id):
    """
        required by flask_login
        :param user_id: Type: Int
    """
    """
        It should return None (not raise an exception)
        if the ID is not valid.
        (In that case, the ID will manually be removed from the session
         and processing will continue.)
         :param user_id: primary key
    """
    return UserModel.get(user_id)
Exemplo n.º 4
0
    def put(self, user_id):
        data = request.get_json()
        if data == None:
            return {"sucess": "false"}
        if 'lat' in data and 'lon' in data:
            data['location'] = data['lat'] + ',' + data['lon']
            del data['lat']
            del data['lon']

        user = UserModel.get(user_id)

        user.update(**data, updated_at=datetime.now())
        res = user.to_dict()
        res['id'] = user.meta.id
        return res
Exemplo n.º 5
0
    async def profile(self, ctx, **flags):
        page = 1
        max_page = 3
        try:
            current_page = page
            user = UserModel.get(UserModel.discord_id == ctx.author.id)

            embed = profile.get_profile_page(ctx, user, current_page, max_page,
                                             **flags)

            message = await ctx.send(embed=embed)
            await message.add_reaction("◀️")
            await message.add_reaction("▶️")

            def check(reaction, user):
                if reaction.message.id == message.id:
                    return user == ctx.author and str(
                        reaction.emoji) in ["◀️", "▶️"]
                else:
                    return False

            while True:
                reaction, discord_user = await self.bot.wait_for(
                    "reaction_add", timeout=60, check=check)
                if str(reaction.emoji) == "▶️" and current_page < max_page:
                    current_page += 1
                elif str(reaction.emoji) == "◀️" and current_page > 1:
                    current_page -= 1

                embed = profile.get_profile_page(ctx, user, current_page,
                                                 max_page, **flags)
                await message.edit(embed=embed)
                await message.remove_reaction(reaction, discord_user)
        except DoesNotExist:
            embed = discord.Embed(colour=constants.COLOUR_NEUTRAL,
                                  title=f'{str(ctx.author.name)} Profile')
            embed.set_thumbnail(url=ctx.author.avatar_url)
            embed.add_field(name=f'You have not caught any pokémon',
                            value=f'Go catch pokémon!')
            await ctx.send(embed=embed)
        except asyncio.TimeoutError:
            pass
        except Exception as e:
            logging.critical(f'ranking.profile: {e}')
            embed = discord.Embed(colour=constants.COLOUR_ERROR,
                                  title=f'Oops, something went wrong')
            await ctx.send(embed=embed)
Exemplo n.º 6
0
def create_leaderboard_embed(query, current_page, max_page, time_flag,
                             field_attribute):
    rank = utility.get_rank_by_page(current_page)
    top_rank = rank if current_page == 1 else f'{rank - constants.ITEMS_PER_PAGE + 1} - {rank}'

    title, author = utility.get_title_author_by_timeflag(time_flag)
    embed = discord.Embed(colour=constants.COLOUR_NEUTRAL,
                          title=f'Top {top_rank} rankings [{str(title)}]')
    embed.set_footer(text=f'Page: {current_page}/{max_page}')
    embed.set_author(name=f'Time remaining: {str(author)}')

    rank -= constants.ITEMS_PER_PAGE - 1
    for user_stat in query:
        user = UserModel.get(UserModel.user_id == user_stat.user_id)
        embed.add_field(name=f'{rank}. {user.username}',
                        value=f'{field_attribute}: {user_stat.sum:,}')
        rank += 1
    return embed
Exemplo n.º 7
0
 def delete(self, user_id):
     event = UserModel.get(user_id)
     event.update(status="deleted")
     event.save()
     return {"success": True}