From 2b6618265c5056b5c135a2d7a8e0d9682f6633bb Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Sat, 22 Oct 2022 15:02:15 +0300 Subject: [PATCH] fix-slug-generator --- auth/email.py | 21 ++++++++++++++------- resolvers/__init__.py | 4 ++-- resolvers/auth.py | 21 +++++++++++---------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/auth/email.py b/auth/email.py index 5a7ae3ca..928c515d 100644 --- a/auth/email.py +++ b/auth/email.py @@ -4,24 +4,31 @@ from settings import MAILGUN_API_KEY, MAILGUN_DOMAIN api_url = "https://api.mailgun.net/v3/%s/messages" % MAILGUN_DOMAIN noreply = "discours.io " % MAILGUN_DOMAIN +lang_subject = { + "ru": "Подтверждение почты", + "en": "Confirm email" +} async def send_auth_email(user, token, lang="ru"): try: to = "%s <%s>" % (user.name, user.email) - subject = "Confirm email" if lang not in ['ru', 'en']: lang = 'ru' + subject = lang_subject.get(lang, lang_subject["en"]) template = "email_confirmation_" + lang - + payload = { + "from": noreply, + "to": to, + "subject": subject, + "template": template, + "h:X-Mailgun-Variables": "{ \"token\": \"%s\" }" % token + } + print('[auth.email] payload: %r' % payload) response = requests.post( api_url, auth=("api", MAILGUN_API_KEY), - data={"from": noreply, - "to": to, - "subject": subject, - "template": template, - "h:X-Mailgun-Variables": "{ \"token\": \"%s\" }" % token} + data=payload ) response.raise_for_status() except Exception as e: diff --git a/resolvers/__init__.py b/resolvers/__init__.py index 013a83dd..49a609e4 100644 --- a/resolvers/__init__.py +++ b/resolvers/__init__.py @@ -2,7 +2,7 @@ from resolvers.auth import ( login, sign_out, is_email_used, - register, + register_by_email, confirm_email, auth_send_link, get_current_user, @@ -63,7 +63,7 @@ __all__ = [ "unfollow", # auth "login", - "register", + "register_by_email", "is_email_used", "confirm_email", "auth_send_link", diff --git a/resolvers/auth.py b/resolvers/auth.py index b98c469a..0454ba2e 100644 --- a/resolvers/auth.py +++ b/resolvers/auth.py @@ -47,7 +47,7 @@ async def confirm_email(_, _info, confirm_token): user_id = await TokenStorage.get(confirm_token) with local_session() as session: user = session.query(User).where(User.id == user_id).first() - session_token = TokenStorage.create_session(user) + session_token = await TokenStorage.create_session(user) user.emailConfirmed = True user.lastSeen = datetime.now() session.add(user) @@ -82,8 +82,11 @@ def create_user(user_dict): return user -def generate_unique_slug(name): - slug = translit(name, "ru", reversed=True).replace(".", "-").lower() +def generate_unique_slug(src): + print('[resolvers.auth] generating slug from: ' + src) + slug = translit(src, "ru", reversed=True).replace(".", "-").lower() + if slug != src: + print('[resolvers.auth] translited name: ' + slug) with local_session() as session: c = 1 user = session.query(User).where(User.slug == slug).first() @@ -93,31 +96,29 @@ def generate_unique_slug(name): c += 1 if not user: unique_slug = slug + print('[resolvers.auth] ' + unique_slug) return quote_plus(unique_slug).replace('+', '-') @mutation.field("registerUser") -async def register(_, _info, email: str, password: str = "", name: str = ""): +async def register_by_email(_, _info, email: str, password: str = "", name: str = ""): """creates new user account""" with local_session() as session: user = session.query(User).filter(User.email == email).first() if user: raise OperationNotAllowed("User already exist") else: - slug = generate_unique_slug(name) + slug = generate_unique_slug(name or email.split('@')[0]) user_dict = { "email": email, - "username": email, + "username": email, # will be used to store phone number or some messenger network id "name": name, "slug": slug } if password: user_dict["password"] = Password.encode(password) - user = create_user(user_dict) - - await auth_send_link(_, _info, email) - + user = await auth_send_link(_, _info, email) return {"user": user}