fix-slug-generator

This commit is contained in:
tonyrewin 2022-10-22 15:02:15 +03:00
parent 2425563522
commit 2b6618265c
3 changed files with 27 additions and 19 deletions

View File

@ -4,24 +4,31 @@ from settings import MAILGUN_API_KEY, MAILGUN_DOMAIN
api_url = "https://api.mailgun.net/v3/%s/messages" % MAILGUN_DOMAIN api_url = "https://api.mailgun.net/v3/%s/messages" % MAILGUN_DOMAIN
noreply = "discours.io <noreply@%s>" % MAILGUN_DOMAIN noreply = "discours.io <noreply@%s>" % MAILGUN_DOMAIN
lang_subject = {
"ru": "Подтверждение почты",
"en": "Confirm email"
}
async def send_auth_email(user, token, lang="ru"): async def send_auth_email(user, token, lang="ru"):
try: try:
to = "%s <%s>" % (user.name, user.email) to = "%s <%s>" % (user.name, user.email)
subject = "Confirm email"
if lang not in ['ru', 'en']: if lang not in ['ru', 'en']:
lang = 'ru' lang = 'ru'
subject = lang_subject.get(lang, lang_subject["en"])
template = "email_confirmation_" + lang 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( response = requests.post(
api_url, api_url,
auth=("api", MAILGUN_API_KEY), auth=("api", MAILGUN_API_KEY),
data={"from": noreply, data=payload
"to": to,
"subject": subject,
"template": template,
"h:X-Mailgun-Variables": "{ \"token\": \"%s\" }" % token}
) )
response.raise_for_status() response.raise_for_status()
except Exception as e: except Exception as e:

View File

@ -2,7 +2,7 @@ from resolvers.auth import (
login, login,
sign_out, sign_out,
is_email_used, is_email_used,
register, register_by_email,
confirm_email, confirm_email,
auth_send_link, auth_send_link,
get_current_user, get_current_user,
@ -63,7 +63,7 @@ __all__ = [
"unfollow", "unfollow",
# auth # auth
"login", "login",
"register", "register_by_email",
"is_email_used", "is_email_used",
"confirm_email", "confirm_email",
"auth_send_link", "auth_send_link",

View File

@ -47,7 +47,7 @@ async def confirm_email(_, _info, confirm_token):
user_id = await TokenStorage.get(confirm_token) user_id = await TokenStorage.get(confirm_token)
with local_session() as session: with local_session() as session:
user = session.query(User).where(User.id == user_id).first() 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.emailConfirmed = True
user.lastSeen = datetime.now() user.lastSeen = datetime.now()
session.add(user) session.add(user)
@ -82,8 +82,11 @@ def create_user(user_dict):
return user return user
def generate_unique_slug(name): def generate_unique_slug(src):
slug = translit(name, "ru", reversed=True).replace(".", "-").lower() 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: with local_session() as session:
c = 1 c = 1
user = session.query(User).where(User.slug == slug).first() user = session.query(User).where(User.slug == slug).first()
@ -93,31 +96,29 @@ def generate_unique_slug(name):
c += 1 c += 1
if not user: if not user:
unique_slug = slug unique_slug = slug
print('[resolvers.auth] ' + unique_slug)
return quote_plus(unique_slug).replace('+', '-') return quote_plus(unique_slug).replace('+', '-')
@mutation.field("registerUser") @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""" """creates new user account"""
with local_session() as session: with local_session() as session:
user = session.query(User).filter(User.email == email).first() user = session.query(User).filter(User.email == email).first()
if user: if user:
raise OperationNotAllowed("User already exist") raise OperationNotAllowed("User already exist")
else: else:
slug = generate_unique_slug(name) slug = generate_unique_slug(name or email.split('@')[0])
user_dict = { user_dict = {
"email": email, "email": email,
"username": email, "username": email, # will be used to store phone number or some messenger network id
"name": name, "name": name,
"slug": slug "slug": slug
} }
if password: if password:
user_dict["password"] = Password.encode(password) user_dict["password"] = Password.encode(password)
user = create_user(user_dict) user = create_user(user_dict)
user = await auth_send_link(_, _info, email)
await auth_send_link(_, _info, email)
return {"user": user} return {"user": user}