fga-eps-mds/2020.2-Anunbis

View on GitHub
app/model/user.py

Summary

Maintainability
A
0 mins
Test Coverage
from ..ext.database import db
from passlib.hash import pbkdf2_sha256


class User(db.Model):
    __abstract__ = True

    name = db.Column(db.String(255), nullable=False)
    email = db.Column(db.String(100), nullable=True, unique=True)
    __email_verified = db.Column(
        "email_verified", db.Boolean, nullable=False, default=False
    )
    __password_hash = db.Column("password", db.String(255))

    @property
    def password(self):
        raise AttributeError("password: write-only field")

    @password.setter
    def password(self, password):
        self.__password_hash = pbkdf2_sha256.hash(password)

    def is_professor(self):
        raise NotImplementedError

    def is_verified(self):
        return self.__email_verified

    def active_user(self):
        self.__email_verified = True

    def verify_password(self, password):
        return pbkdf2_sha256.verify(password, self.__password_hash)

    def save_changes(self):
        db.session.commit()

    def clean(self):
        self.email = None
        self.__email_verified = False
        self.__password_hash = None