This commit is contained in:
Igor Lobanov 2022-12-01 14:24:05 +01:00
parent 6e80360d98
commit 8464398aaf
8 changed files with 21 additions and 23 deletions

View File

@ -8,7 +8,7 @@ from starlette.requests import HTTPConnection
from auth.credentials import AuthCredentials, AuthUser from auth.credentials import AuthCredentials, AuthUser
from base.orm import local_session 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 settings import SESSION_TOKEN_HEADER
from auth.tokenstorage import SessionToken from auth.tokenstorage import SessionToken
@ -40,11 +40,10 @@ class JWTAuthenticate(AuthenticationBackend):
try: try:
user = ( user = (
session.query(User).options( session.query(User).options(
joinedload(User.roles), joinedload(User.roles).options(joinedload(Role.permissions)),
joinedload(Role.permissions),
joinedload(User.ratings) joinedload(User.ratings)
).filter( ).filter(
User.id == id User.id == payload.user_id
).one() ).one()
) )
except exc.NoResultFound: except exc.NoResultFound:
@ -53,7 +52,7 @@ class JWTAuthenticate(AuthenticationBackend):
if not user: if not user:
return AuthCredentials(scopes=[]), AuthUser(user_id=None) return AuthCredentials(scopes=[]), AuthUser(user_id=None)
scopes = [] # user.get_permission() scopes = user.get_permission()
return ( return (
AuthCredentials( AuthCredentials(
@ -61,7 +60,7 @@ class JWTAuthenticate(AuthenticationBackend):
scopes=scopes, scopes=scopes,
logged_in=True logged_in=True
), ),
user, AuthUser(user_id=user.id),
) )
else: else:
InvalidToken("please try again") InvalidToken("please try again")

View File

@ -41,6 +41,7 @@ async def start_up():
async def dev_start_up(): async def dev_start_up():
if exists(DEV_SERVER_STATUS_FILE_NAME): if exists(DEV_SERVER_STATUS_FILE_NAME):
await redis.connect()
return return
else: else:
with open(DEV_SERVER_STATUS_FILE_NAME, 'w', encoding='utf-8') as f: 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( dev_app = app = Starlette(
debug=True, debug=True,
on_startup=[dev_start_up], on_startup=[dev_start_up],
on_shutdown=[shutdown],
middleware=middleware, middleware=middleware,
routes=routes, routes=routes,
) )

View File

@ -9,7 +9,6 @@ from orm.shout import ShoutReactionsFollower
from orm.topic import TopicFollower from orm.topic import TopicFollower
from orm.user import User from orm.user import User
from orm.shout import Shout from orm.shout import Shout
# from services.stat.reacted import ReactedStorage
ts = datetime.now(tz=timezone.utc) ts = datetime.now(tz=timezone.utc)
@ -84,7 +83,6 @@ def migrate_ratings(session, entry, reaction_dict):
) )
session.add(following2) session.add(following2)
session.add(rr) session.add(rr)
# await ReactedStorage.react(rr)
except Exception as e: except Exception as e:
print("[migration] comment rating error: %r" % re_reaction_dict) print("[migration] comment rating error: %r" % re_reaction_dict)

View File

@ -9,7 +9,6 @@ from orm.reaction import Reaction, ReactionKind
from orm.shout import Shout, ShoutTopic, ShoutReactionsFollower from orm.shout import Shout, ShoutTopic, ShoutReactionsFollower
from orm.user import User from orm.user import User
from orm.topic import TopicFollower, Topic from orm.topic import TopicFollower, Topic
# from services.stat.reacted import ReactedStorage
from services.stat.viewed import ViewedStorage from services.stat.viewed import ViewedStorage
import re import re
@ -365,7 +364,6 @@ async def content_ratings_to_reactions(entry, slug):
else: else:
rea = Reaction.create(**reaction_dict) rea = Reaction.create(**reaction_dict)
session.add(rea) session.add(rea)
# await ReactedStorage.react(rea)
# shout_dict['ratings'].append(reaction_dict) # shout_dict['ratings'].append(reaction_dict)
session.commit() session.commit()

View File

@ -101,7 +101,7 @@ class User(Base):
session.commit() session.commit()
User.default_user = default User.default_user = default
async def get_permission(self): def get_permission(self):
scope = {} scope = {}
for role in self.roles: for role in self.roles:
for p in role.permissions: for p in role.permissions:

View File

@ -24,13 +24,15 @@ from settings import SESSION_TOKEN_HEADER, FRONTEND_URL
@mutation.field("getSession") @mutation.field("getSession")
@login_required @login_required
async def get_current_user(_, info): async def get_current_user(_, info):
user = info.context["request"].user context_user = info.context["request"].user
token = info.context["request"].headers.get("Authorization") token = info.context["request"].headers.get(SESSION_TOKEN_HEADER)
if user and token:
user.lastSeen = datetime.now(tz=timezone.utc) if context_user and token:
with local_session() as session: 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() session.commit()
return { return {
"token": token, "token": token,
"user": user, "user": user,

View File

@ -40,11 +40,10 @@ def add_author_stat_columns(q):
# func.sum(user_rating_aliased.value).label('rating_stat') # func.sum(user_rating_aliased.value).label('rating_stat')
# ) # )
# q = q.add_columns(literal(0).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(
q = q.outerjoin(Reaction, and_(Reaction.createdBy == User.id, Reaction.body.is_not(None))).add_columns( # func.count(distinct(Reaction.id)).label('commented_stat')
func.count(distinct(Reaction.id)).label('commented_stat') # )
)
q = q.group_by(User.id) q = q.group_by(User.id)

View File

@ -115,7 +115,7 @@ async def update_topic(_, _info, inp):
return {"topic": topic} return {"topic": topic}
async def topic_follow(user, slug): def topic_follow(user, slug):
with local_session() as session: with local_session() as session:
topic = session.query(Topic).where(Topic.slug == slug).one() topic = session.query(Topic).where(Topic.slug == slug).one()
@ -124,7 +124,7 @@ async def topic_follow(user, slug):
session.commit() session.commit()
async def topic_unfollow(user, slug): def topic_unfollow(user, slug):
with local_session() as session: with local_session() as session:
sub = ( sub = (
session.query(TopicFollower).join(Topic).filter( session.query(TopicFollower).join(Topic).filter(