Source code for sirepo.auth_db.email

# -*- coding: utf-8 -*-
"""email auth user

:copyright: Copyright (c) 2022 RadiaSoft LLC.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from pykern.pkdebug import pkdc, pkdlog, pkdp
import datetime
import sirepo.auth_db
import sirepo.srtime
import sirepo.util
import sqlalchemy


# Primary key is unverified_email.
# New user: (unverified_email, uid, token, expires) -> auth -> (unverified_email, uid, email)
# Existing user: (unverified_email, token, expires) -> auth -> (unverified_email, uid, email)

#: how long before token expires
_EXPIRES_MINUTES = 8 * 60

#: for adding to now
_EXPIRES_DELTA = datetime.timedelta(minutes=_EXPIRES_MINUTES)


# display_name is prompted after first login
[docs] class AuthEmailUser(sirepo.auth_db.UserDbBase): EMAIL_SIZE = 255 EXPIRES_MINUTES = _EXPIRES_MINUTES __tablename__ = "auth_email_user_t" unverified_email = sqlalchemy.Column( sqlalchemy.String(EMAIL_SIZE), primary_key=True, ) uid = sqlalchemy.Column(sirepo.auth_db.STRING_ID, unique=True) user_name = sqlalchemy.Column(sqlalchemy.String(EMAIL_SIZE), unique=True) token = sqlalchemy.Column(sqlalchemy.String(sirepo.util.TOKEN_SIZE), unique=True) expires = sqlalchemy.Column(sqlalchemy.DateTime()) def __init__(self, *args, **kwargs): for x in ("unverified_email", "user_name"): if (v := kwargs.get(x)) is not None: kwargs[x] = v.lower() super().__init__(*args, **kwargs)
[docs] def create_token(self): self.expires = sirepo.srtime.utc_now() + _EXPIRES_DELTA self.token = sirepo.util.create_token(self.unverified_email)
[docs] def unchecked_uid(self, **filter_by): u = self.unchecked_search_by(**filter_by) if u: return u.uid return None