From 8464398aaffa28b28208f3c3a422d48342775a93 Mon Sep 17 00:00:00 2001 From: Igor Lobanov Date: Thu, 1 Dec 2022 14:24:05 +0100 Subject: [PATCH] fixes --- auth/authenticate.py | 11 +++++------ main.py | 2 ++ migration/tables/comments.py | 2 -- migration/tables/content_items.py | 2 -- orm/user.py | 2 +- resolvers/auth.py | 12 +++++++----- resolvers/zine/profile.py | 9 ++++----- resolvers/zine/topics.py | 4 ++-- 8 files changed, 21 insertions(+), 23 deletions(-) diff --git a/auth/authenticate.py b/auth/authenticate.py index c827dec6..3074fd81 100644 --- a/auth/authenticate.py +++ b/auth/authenticate.py @@ -8,7 +8,7 @@ from starlette.requests import HTTPConnection from auth.credentials import AuthCredentials, AuthUser from base.orm import local_session -from orm.user import User, Role, UserRole +from orm.user import User, Role from settings import SESSION_TOKEN_HEADER from auth.tokenstorage import SessionToken @@ -40,11 +40,10 @@ class JWTAuthenticate(AuthenticationBackend): try: user = ( session.query(User).options( - joinedload(User.roles), - joinedload(Role.permissions), + joinedload(User.roles).options(joinedload(Role.permissions)), joinedload(User.ratings) ).filter( - User.id == id + User.id == payload.user_id ).one() ) except exc.NoResultFound: @@ -53,7 +52,7 @@ class JWTAuthenticate(AuthenticationBackend): if not user: return AuthCredentials(scopes=[]), AuthUser(user_id=None) - scopes = [] # user.get_permission() + scopes = user.get_permission() return ( AuthCredentials( @@ -61,7 +60,7 @@ class JWTAuthenticate(AuthenticationBackend): scopes=scopes, logged_in=True ), - user, + AuthUser(user_id=user.id), ) else: InvalidToken("please try again") diff --git a/main.py b/main.py index 7b8fcee9..5a5b7b92 100644 --- a/main.py +++ b/main.py @@ -41,6 +41,7 @@ async def start_up(): async def dev_start_up(): if exists(DEV_SERVER_STATUS_FILE_NAME): + await redis.connect() return else: with open(DEV_SERVER_STATUS_FILE_NAME, 'w', encoding='utf-8') as f: @@ -71,6 +72,7 @@ app.mount("/", GraphQL(schema, debug=True)) dev_app = app = Starlette( debug=True, on_startup=[dev_start_up], + on_shutdown=[shutdown], middleware=middleware, routes=routes, ) diff --git a/migration/tables/comments.py b/migration/tables/comments.py index 4fde9569..88c41216 100644 --- a/migration/tables/comments.py +++ b/migration/tables/comments.py @@ -9,7 +9,6 @@ from orm.shout import ShoutReactionsFollower from orm.topic import TopicFollower from orm.user import User from orm.shout import Shout -# from services.stat.reacted import ReactedStorage ts = datetime.now(tz=timezone.utc) @@ -84,7 +83,6 @@ def migrate_ratings(session, entry, reaction_dict): ) session.add(following2) session.add(rr) - # await ReactedStorage.react(rr) except Exception as e: print("[migration] comment rating error: %r" % re_reaction_dict) diff --git a/migration/tables/content_items.py b/migration/tables/content_items.py index c85b2cdc..030154ff 100644 --- a/migration/tables/content_items.py +++ b/migration/tables/content_items.py @@ -9,7 +9,6 @@ from orm.reaction import Reaction, ReactionKind from orm.shout import Shout, ShoutTopic, ShoutReactionsFollower from orm.user import User from orm.topic import TopicFollower, Topic -# from services.stat.reacted import ReactedStorage from services.stat.viewed import ViewedStorage import re @@ -365,7 +364,6 @@ async def content_ratings_to_reactions(entry, slug): else: rea = Reaction.create(**reaction_dict) session.add(rea) - # await ReactedStorage.react(rea) # shout_dict['ratings'].append(reaction_dict) session.commit() diff --git a/orm/user.py b/orm/user.py index b8853f82..5624ffb5 100644 --- a/orm/user.py +++ b/orm/user.py @@ -101,7 +101,7 @@ class User(Base): session.commit() User.default_user = default - async def get_permission(self): + def get_permission(self): scope = {} for role in self.roles: for p in role.permissions: diff --git a/resolvers/auth.py b/resolvers/auth.py index 3cbd5977..6c7b8712 100644 --- a/resolvers/auth.py +++ b/resolvers/auth.py @@ -24,13 +24,15 @@ from settings import SESSION_TOKEN_HEADER, FRONTEND_URL @mutation.field("getSession") @login_required async def get_current_user(_, info): - user = info.context["request"].user - token = info.context["request"].headers.get("Authorization") - if user and token: - user.lastSeen = datetime.now(tz=timezone.utc) + context_user = info.context["request"].user + token = info.context["request"].headers.get(SESSION_TOKEN_HEADER) + + if context_user and token: with local_session() as session: - session.add(user) + user = session.query(User).where(User.id == context_user.user_id).one() + user.lastSeen = datetime.now(tz=timezone.utc) session.commit() + return { "token": token, "user": user, diff --git a/resolvers/zine/profile.py b/resolvers/zine/profile.py index 3f9fb526..eaf92e18 100644 --- a/resolvers/zine/profile.py +++ b/resolvers/zine/profile.py @@ -40,11 +40,10 @@ def add_author_stat_columns(q): # func.sum(user_rating_aliased.value).label('rating_stat') # ) - # q = q.add_columns(literal(0).label('commented_stat')) - - q = q.outerjoin(Reaction, and_(Reaction.createdBy == User.id, Reaction.body.is_not(None))).add_columns( - func.count(distinct(Reaction.id)).label('commented_stat') - ) + q = q.add_columns(literal(0).label('commented_stat')) + # q = q.outerjoin(Reaction, and_(Reaction.createdBy == User.id, Reaction.body.is_not(None))).add_columns( + # func.count(distinct(Reaction.id)).label('commented_stat') + # ) q = q.group_by(User.id) diff --git a/resolvers/zine/topics.py b/resolvers/zine/topics.py index 2ee6809b..c48ee01d 100644 --- a/resolvers/zine/topics.py +++ b/resolvers/zine/topics.py @@ -115,7 +115,7 @@ async def update_topic(_, _info, inp): return {"topic": topic} -async def topic_follow(user, slug): +def topic_follow(user, slug): with local_session() as session: topic = session.query(Topic).where(Topic.slug == slug).one() @@ -124,7 +124,7 @@ async def topic_follow(user, slug): session.commit() -async def topic_unfollow(user, slug): +def topic_unfollow(user, slug): with local_session() as session: sub = ( session.query(TopicFollower).join(Topic).filter(