Esempio n. 1
0
class Authenticator(db.Model):
    __tablename__ = 'authenticator_requests'
    id = db.Column(db.Integer, primary_key=True)
    _authenticator_hash = db.Column(db.Binary(128))
    authenticator_public_key = db.Column(db.String(64), default="")
    authenticator_type = db.Column(db.Enum(AuthenticatorType),
                                   default=AuthenticatorType.USER)
    code = db.Column(db.String(128), default="")
    usage_limit = db.Column(db.Integer, default=1)
    validity_type = db.Column(db.Enum(AuthenticatorValidityType),
                              default=AuthenticatorValidityType.ONCE)
    creation_date = db.Column(ArrowType, default=arrow.utcnow)
    expiration_date = db.Column(ArrowType, default=arrow.utcnow)
    code_send_by = db.Column(db.Enum(AuthenticatorSendBy),
                             default=AuthenticatorSendBy.MAIL)
    code_send_to = db.Column(db.String(128), default="")

    @hybrid_property
    def authenticator(self):
        return self._authenticator_hash

    @authenticator.setter
    def authenticator(self, plaintext_authenticator):
        self._authenticator_hash = bcrypt.generate_password_hash(
            plaintext_authenticator)

    @hybrid_method
    def checkAuthenticator(self, plaintext_authenticator):
        return bcrypt.check_password_hash(self.authenticator,
                                          plaintext_authenticator)
Esempio n. 2
0
class SpaceAccessGroup(db.Model):
    __tablename__ = 'spaceaccess_groups'
    id = db.Column(db.Integer, primary_key=True)
    users = db.relationship(
        "User",
        backref=db.backref("spaceaccess_accessgroup", uselist=False, lazy=True),
        secondary=AccessgroupUserMap.__tablename__,
        lazy='subquery',
    )
    spaces = db.relationship(
        "SpaceAccessSpace",
        backref=db.backref("spaceaccess_accessgroup", lazy=True),
        secondary=AccessgroupSpaceMap.__tablename__,
        lazy='subquery',
    )
    name = db.Column(db.String(120), default="")
    note = db.Column(db.String(120), default="")
    access_type = db.Column(db.Enum(SpaceAccessType), default=SpaceAccessType.NO_ACCESS)
    entry_accounting_type = db.Column(db.Enum(SpaceAccessEntryAccounting), default=SpaceAccessEntryAccounting.DAYS)
    access_need_budget = db.Column(db.Boolean, default=False)
    access_gets_recharged = db.Column(db.Boolean, default=False)
    access_recharge_budget_amount = db.Column(db.Integer, default=15)
    access_recharge_budget_period = db.Column(db.Enum(SpaceAccessRechargePeriod),
                                              default=SpaceAccessRechargePeriod.MONTHS)
    access_recharge_budget_every_periods = db.Column(db.Integer, default=4)
    access_recharge_budget_get_cutoff = db.Column(db.Boolean, default=True)
    access_recharge_budget_cutoff_max = db.Column(db.Integer, default=15)
    access_expires_as_default = db.Column(db.Boolean, default=False)
    access_expires_default_days = db.Column(db.Integer, default=365)
    access_use_group_budget = db.Column(db.Boolean, default=False)
    last_access_at = db.Column(ArrowType, default=None)
    group_budget = db.Column(db.Integer, default=0)
    day_access_mask = db.Column(db.Integer, default=127)
    daily_access_start_time = db.Column(ArrowType, default=arrow.get('00:00', 'HH:mm'))
    daily_access_end_time = db.Column(ArrowType, default=arrow.get('23:59', 'HH:mm'))
Esempio n. 3
0
class Book(BaseModel, db.Model):
    __tablename__ = 'books'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), nullable=False)
    category = db.Column(db.String(50))
    price = db.Column(db.Float)
    user_id = db.Column(db.Integer)
    status = db.Column(db.Enum('0', '1'), default='0')

    def __init__(self, name, category, price, user_id):
        self.name = name
        self.category = category
        self.price = price
        self.user_id = user_id

    def __repr__(self):
        return "<Book %r>" % self.name

    def to_dict(self):
        res_dict = {
            'id': self.id,
            'name': self.name,
            'category': self.category,
            'price': self.price,
            'user_id': self.user_id,
            'status': self.status
        }
        return res_dict

    def delete(self):
        self.status = "1"
        return self.session_commit()
Esempio n. 4
0
class Customers(db.Model):
    """This class represents the customers table."""
    __tablename__ = 'customers'

    customer_id = db.Column(db.BigInteger(), primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    customer_class = db.Column(db.Enum('Enduser', 'Reseller', 'ResellerHighVolume', name='Enduser'))
    vat_percentage = db.Column(db.Integer())
    status = db.Column(db.Enum('Active', 'Deleted', name='customer_status'))

    def __repr__(self):
        return "<Customers: {}>".format(
            self.customer_id,
            self.name,
            self.customer_class,
            self.vat_percentage,
            self.status
            )
Esempio n. 5
0
class Products(db.Model):
    """This class represents the products table."""
    __tablename__ = 'products'

    product_id = db.Column(db.BigInteger(), primary_key=True)
    name = db.Column(db.String(255))
    price_net = db.Column(db.Float(10,2))
    status = db.Column(db.Enum('Active', 'Inactive', name='product_status'))

    def __repr__(self):
        return "<Products: {}>".format(
            self.product_id,
            self.name,
            self.price_net,
            self.status
            )
Esempio n. 6
0
class User(db.Model):
    __tablename__ = 'users'
    # nonvolatile data stored in the db
    id = db.Column(db.Integer, primary_key=True)
    _authenticator_hash = db.Column(db.Binary(128))
    _password_hash = db.Column(db.Binary(128), nullable=False)
    _pin_hash = db.Column(db.Binary(128))
    _salt = db.Column(db.String(128))
    authenticator_public_key = db.Column(db.String(64), default="")
    authenticator_status = db.Column(db.Enum(UserAuthenticatorStatus),
                                     default=UserAuthenticatorStatus.UNSET)
    authenticator_changed_date = db.Column(ArrowType, default=arrow.utcnow)
    email = db.Column(db.String(120), index=True, unique=True)
    firstname = db.Column(db.String(64), default="")
    lastname = db.Column(db.String(64), default="")
    organization = db.Column(db.String(64), default="")
    phone = db.Column(db.String(64), default="")
    account_created_date = db.Column(ArrowType, default=arrow.utcnow)
    last_login_date = db.Column(ArrowType, default=arrow.utcnow)
    password_reset_expired_date = db.Column(ArrowType, default=arrow.utcnow)
    password_reset_hash = db.Column(db.String(128), default="")
    account_verified = db.Column(db.Boolean, default=False)
    account_locked = db.Column(db.Boolean, default=False)
    ldap = db.Column(db.Boolean, default=False)
    admin = db.Column(db.Boolean, default=False)
    budget = db.Column(db.Float, default=0)
    pinIsLocked = db.Column(db.Boolean, default=False)
    failedPinAttempts = db.Column(db.Integer(), default=0)
    failedLoginAttempts = db.Column(db.Integer(), default=0)

    # def __init__(self, **kwargs):
    #    super(User, self).__init__(**kwargs)

    def __init__(self, email, password, isAdmin=False):
        self.email = email
        self.password = password
        self.admin = isAdmin

    def __repr__(self):
        return '<User {} {} : {}>'.format(self.firstname, self.lastname,
                                          self.email)

    @hybrid_property
    def password(self):
        return self._password_hash

    @password.setter
    def password(self, plaintext_password):
        self._password_hash = bcrypt.generate_password_hash(plaintext_password)

    @hybrid_method
    def checkPassword(self, plaintext_password):
        return bcrypt.check_password_hash(self.password, plaintext_password)

    @hybrid_property
    def pin(self):
        return self._pin_hash

    @pin.setter
    def pin(self, plaintext_pin):
        self._pin_hash = bcrypt.generate_password_hash(plaintext_pin)

    @hybrid_method
    def checkPin(self, plaintext_pin):
        if self.pin is None or self.pin == "":
            return False
        else:
            return bcrypt.check_password_hash(self.pin, plaintext_pin)

    @hybrid_property
    def authenticator(self):
        return self._authenticator_hash

    @authenticator.setter
    def authenticator(self, plaintext_authenticator):
        self._authenticator_hash = bcrypt.generate_password_hash(
            plaintext_authenticator)

    @hybrid_method
    def resetAuthenticatorHash(self):
        self._authenticator_hash = None

    @hybrid_method
    def setAuthenticatorHash(self, authenticator_hash):
        self._authenticator_hash = authenticator_hash

    @hybrid_method
    def checkAuthenticator(self, plaintext_authenticator):
        if self.authenticator is None or self.authenticator == "":
            return False
        else:
            return bcrypt.check_password_hash(self.authenticator,
                                              plaintext_authenticator)