fix-slug-generator
This commit is contained in:
parent
2425563522
commit
2b6618265c
|
@ -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:
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user