From 60e353f34d7ee66dee7dbeef15d995c8d4b741a9 Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Wed, 5 Oct 2022 20:06:29 +0300 Subject: [PATCH] confirm-fix --- auth/email.py | 8 +++----- main.py | 4 ++-- resolvers/auth.py | 10 ++++++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/auth/email.py b/auth/email.py index c7c44fe2..dad004a7 100644 --- a/auth/email.py +++ b/auth/email.py @@ -4,26 +4,24 @@ from settings import MAILGUN_API_KEY, MAILGUN_DOMAIN api_url = "https://api.mailgun.net/v3/%s/messages" % MAILGUN_DOMAIN noreply = "discours.io " % MAILGUN_DOMAIN - +subject = "Confirm email" tmplt = """ Follow the link to authorize """ -baseUrl = "https://new.discours.io" - async def send_auth_email(user, token): try: to = "%s <%s>" % (user.username, user.email) - url_with_token = "%s/confirm/%s" % (baseUrl, token) + url_with_token = "https://newapi.discours.io/confirm/" + token response = requests.post( api_url, auth=("api", MAILGUN_API_KEY), data={ "from": noreply, "to": to, - "subject": "Confirm email", + "subject": subject, "html": tmplt % url_with_token, }, ) diff --git a/main.py b/main.py index edabc2c6..1a99600d 100644 --- a/main.py +++ b/main.py @@ -13,7 +13,7 @@ from auth.authenticate import JWTAuthenticate from auth.oauth import oauth_login, oauth_authorize from base.redis import redis from base.resolvers import resolvers -# from resolvers.auth import confirm_email_handler +from resolvers.auth import confirm_email_handler from resolvers.zine import ShoutsCache from services.main import storages_init from services.stat.reacted import ReactedStorage @@ -55,7 +55,7 @@ async def shutdown(): routes = [ Route("/oauth/{provider}", endpoint=oauth_login), Route("/oauth-authorize", endpoint=oauth_authorize), - # Route("/confirm-email/{token}", endpoint=confirm_email_handler), # should be called on client + Route("/confirm-email/{token}", endpoint=confirm_email_handler), # should be called on client ] app = Starlette( diff --git a/resolvers/auth.py b/resolvers/auth.py index 921e3f84..318de3cf 100644 --- a/resolvers/auth.py +++ b/resolvers/auth.py @@ -3,6 +3,7 @@ from datetime import datetime from graphql.type import GraphQLResolveInfo from transliterate import translit +from starlette.responses import RedirectResponse from auth.tokenstorage import TokenStorage from auth.authenticate import login_required @@ -61,6 +62,15 @@ async def confirm_email(_, _info, confirm_token): return {"error": "email is not confirmed"} +async def confirm_email_handler(request): + token = request.path_params["token"] # one time + request.session["token"] = token + res = await confirm_email(None, token) + response = RedirectResponse(url="https://new.discours.io/confirm") + response.set_cookie("token", res["token"]) # session token + return response + + def create_user(user_dict): user = User(**user_dict) user.roles.append(Role.default_role)