Exemplo n.º 1
0
class SlackInstallation(BaseModel):
    """Keep track of each installation of Slack integration"""

    __tablename__ = "slack_installation"

    def __repr__(self):  # pragma: no cover
        return f"<SlackInstallation: {self.workspace_name}>"

    # Attributes
    access_token = db.Column(EncryptedType(db.String, SECRET_KEY, AesEngine,
                                           "pkcs5"),
                             nullable=False)
    authorizing_user_id = db.Column(db.String(300), nullable=False)
    bot_access_token = db.Column(EncryptedType(db.String, SECRET_KEY,
                                               AesEngine, "pkcs5"),
                                 nullable=False)
    bot_user_id = db.Column(EncryptedType(db.String, SECRET_KEY, AesEngine,
                                          "pkcs5"),
                            nullable=False)
    scope = db.Column(db.String(800), nullable=False)
    workspace_id = db.Column(db.String(20), index=True, nullable=False)
    workspace_name = db.Column(db.String(255), nullable=False)
    state = db.Column(db.String(20), nullable=False, default="installed")

    auth_response = db.Column("auth_response", db.JSON)

    # Relationships
    github_summary_users = db.relationship("GitHubSummaryUser",
                                           back_populates="installation")
    github_summary_config = db.relationship(
        "GitHubSummaryConfiguration",
        back_populates="slack_installation",
        uselist=False)
Exemplo n.º 2
0
class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, nullable=False)
    user_uid = Column(BigInteger, nullable=False)
    username = Column(EncryptedType(type_in=String, key=CONFIG.BOT_SECRET_KEY),
                      nullable=False)
    first_seen = Column(DateTime,
                        nullable=False,
                        default=func.current_timestamp())
    last_seen = Column(DateTime,
                       nullable=False,
                       default=func.current_timestamp())
    uni_id = Column(EncryptedType(type_in=String, key=CONFIG.BOT_SECRET_KEY),
                    nullable=True)
    verified_at = Column(EncryptedType(type_in=DateTime,
                                       key=CONFIG.BOT_SECRET_KEY),
                         nullable=True)

    messages = relationship("LoggedMessage",
                            back_populates="user",
                            order_by=LoggedMessage.created_at)
    karma_changes = relationship("KarmaChange",
                                 back_populates="user",
                                 order_by=KarmaChange.created_at)
Exemplo n.º 3
0
class Event(Base):
    __tablename__ = 'Event'
    date = Column(EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    title = Column(EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    description = Column(
        EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    id = Column(Integer, primary_key=True)
Exemplo n.º 4
0
class Vehicle(Base):
    __tablename__ = 'Vehicle'
    plate = Column(EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    color = Column(EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    make_model = Column(
        EncryptedType(String, encryptionKey, AesEngine, 'pkcs5'))
    id = Column(Integer, primary_key=True)
class Candidate(db.Model):
    Sno = db.Column(db.Integer, primary_key=True)
    Name = db.Column(EncryptedType(db.String(30),secret_key,AesEngine,'pkcs5'), nullable=False)
    Register = db.Column(db.String(30), unique=True, nullable=False)
    email = db.Column(EncryptedType(db.String(30),secret_key,AesEngine,'pkcs5'), nullable=False)
    DOB= db.Column(db.String(30), nullable=False)
    Count = db.Column(db.Integer, nullable=False)
Exemplo n.º 6
0
class Account(db.Model):
    __tablename__ = 'accounts'

    id = db.Column(db.Integer, primary_key=True)

    title = db.Column(EncryptedType(db.String(120), get_secret_key),
                      unique=True)

    balance = db.Column(EncryptedType(db.Float(precision=2, as_decimal=True),
                                      get_secret_key),
                        default=.0)

    daily_limit = db.Column(EncryptedType(
        db.Float(precision=0, as_decimal=True), get_secret_key),
                            default=.0)

    def spent_today(self):
        today = date.today()
        today_start = tz.localize(datetime(today.year, today.month, today.day))
        today_start_utc = today_start.astimezone(pytz.utc)

        amount = db.session.query(func.sum(Transaction.amount)).filter(
            Transaction.created >= today_start_utc,
            Transaction.credit_id == self.id).scalar()

        if amount is None:
            amount = 0.0

        return amount
Exemplo n.º 7
0
    class User(Base):
        __tablename__ = 'user'
        id = sa.Column(sa.Integer, primary_key=True)

        username = sa.Column(
            EncryptedType(sa.Unicode, test_key, encryption_engine))

        access_token = sa.Column(
            EncryptedType(sa.String, test_key, encryption_engine))

        is_active = sa.Column(
            EncryptedType(sa.Boolean, test_key, encryption_engine))

        accounts_num = sa.Column(
            EncryptedType(sa.Integer, test_key, encryption_engine))

        phone = sa.Column(
            EncryptedType(PhoneNumberType, test_key, encryption_engine))

        color = sa.Column(EncryptedType(ColorType, test_key,
                                        encryption_engine))

        date = sa.Column(EncryptedType(sa.Date, test_key, encryption_engine))

        time = sa.Column(EncryptedType(sa.Time, test_key, encryption_engine))

        datetime = sa.Column(
            EncryptedType(sa.DateTime, test_key, encryption_engine))

        enum = sa.Column(
            EncryptedType(sa.Enum('One', name='user_enum_t'), test_key,
                          encryption_engine))
Exemplo n.º 8
0
class User(db.Model):
    """A user capable of listening to voicemails"""
    __tablename__ = 'user'

    email = db.Column(EncryptedType(db.String, flask_secret_key),
                      primary_key=True)
    google_token = db.Column(EncryptedType(db.String, flask_secret_key))
    authenticated = db.Column(EncryptedType(db.Boolean, flask_secret_key),
                              default=False)

    def is_active(self):
        """True, as all users are active."""
        return True

    def get_id(self):
        """Return the email address to satisfy Flask-Login's requirements."""
        return self.email

    def is_authenticated(self):
        """Return True if the user is authenticated."""
        return self.authenticated

    def is_anonymous(self):
        """False, as anonymous users aren't supported."""
        return False
Exemplo n.º 9
0
class Location(SqlAlchemyBase):

    __tablename__ = 'locations'
    id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
    name = sa.Column(sa.String)
    location_type_id = sa.Column(sa.Integer,
                                 sa.ForeignKey('location_types.id'))
    location_type = sa.orm.relationship("LocationType")
    address = sa.Column(
        EncryptedType(sa.String, config.sqlalchemy_secret_key, AesEngine,
                      'pkcs5'))
    port = sa.Column(
        EncryptedType(sa.String, config.sqlalchemy_secret_key, AesEngine,
                      'pkcs5'))
    username = sa.Column(
        EncryptedType(sa.String, config.sqlalchemy_secret_key, AesEngine,
                      'pkcs5'))
    password = sa.Column(
        EncryptedType(sa.String, config.sqlalchemy_secret_key, AesEngine,
                      'pkcs5'))
    subtype_id = sa.Column(sa.Integer, sa.ForeignKey('subtypes.id'))
    subtype = sa.orm.relationship("Subtype")
    database = sa.Column(
        EncryptedType(sa.String, config.sqlalchemy_secret_key, AesEngine,
                      'pkcs5'))
    queries = sa.orm.relationship("Query")
    created_date = sa.Column(sa.DateTime, default=datetime.datetime.now)
Exemplo n.º 10
0
class Patient(db.Model):
    """A patient record capable of taking surveys"""

    __tablename__ = "patients"

    id = db.Column(db.Integer, primary_key=True)
    mrn = db.Column(EncryptedType(db.String, flask_secret_key))
    fullname = db.Column(EncryptedType(db.String, flask_secret_key))
    age = db.Column(EncryptedType(db.String, flask_secret_key))
    phone = db.Column(EncryptedType(db.String, flask_secret_key))
    email = db.Column(EncryptedType(db.String, flask_secret_key))
    location = db.Column(ChoiceType(LOCATION_CHOICES))
    program = db.Column(ChoiceType(PROGRAM_CHOICES))
    year = db.Column(db.Integer)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    surveys = db.relationship(
        "SurveyResponse",
        backref="patient",
        lazy="dynamic",
        cascade="all, delete-orphan",
    )
    responses = db.relationship(
        "QuestionResponse",
        backref="patient",
        lazy="dynamic",
        cascade="all, delete-orphan",
    )
    progress = db.relationship(
        "Progress", backref="patient", lazy="dynamic", cascade="all, delete-orphan"
    )
    creation_time = db.Column(db.DateTime, default=func.now())

    def to_dict(self):
        return {col.name: getattr(self, col.name) for col in self.__table__.columns}
Exemplo n.º 11
0
class Chat():
    date = db.Column(db.DateTime, primary_key=True, default=dt.now(tz.utc))
    users = db.Column(EncryptedType(JSONType, get_crypto_key, AesEngine, 'pkcs5'), nullable=False)
    messages = db.Column(EncryptedType(JSONType, get_crypto_key, AesEngine, 'pkcs5'), nullable=False)

    def __init__(self):
        self.users = []
        self.messages = []
class Voter(db.Model):                                                                  #DATABASE MODEL
    Sno = db.Column(db.Integer, primary_key=True)
    Name = db.Column(EncryptedType(db.String(30),secret_key,AesEngine,'pkcs5'), nullable=False)
    email = db.Column(EncryptedType(db.String(30),secret_key,AesEngine,'pkcs5'), nullable=False)
    DOB= db.Column(db.String(30), nullable=False)
    Register = db.Column(db.Integer, unique=True, nullable=False)
    Valid= db.Column(db.Boolean,nullable=False)
    Voted= db.Column(db.Boolean,nullable=False)
    Password=db.Column(db.String(120), nullable=False)
Exemplo n.º 13
0
    def _re_encrypt_row(
        self,
        conn: Connection,
        row: RowProxy,
        table_name: str,
        columns: Dict[str, EncryptedType],
    ) -> None:
        """
        Re encrypts all columns in a Row
        :param row: Current row to reencrypt
        :param columns: Meta info from columns
        """
        re_encrypted_columns = {}

        for column_name, encrypted_type in columns.items():
            previous_encrypted_type = EncryptedType(
                type_in=encrypted_type.underlying_type,
                key=self._previous_secret_key)
            try:
                unencrypted_value = previous_encrypted_type.process_result_value(
                    self._read_bytes(column_name, row[column_name]),
                    self._dialect)
            except ValueError as exc:
                # Failed to unencrypt
                try:
                    encrypted_type.process_result_value(
                        self._read_bytes(column_name, row[column_name]),
                        self._dialect)
                    logger.info(
                        "Current secret is able to decrypt value on column [%s.%s],"
                        " nothing to do",
                        table_name,
                        column_name,
                    )
                    return
                except Exception:
                    raise Exception from exc

            re_encrypted_columns[
                column_name] = encrypted_type.process_bind_param(
                    unencrypted_value,
                    self._dialect,
                )

        set_cols = ",".join([
            f"{name} = :{name}" for name in list(re_encrypted_columns.keys())
        ])
        logger.info("Processing table: %s", table_name)
        conn.execute(
            text(f"UPDATE {table_name} SET {set_cols} WHERE id = :id"),
            id=row["id"],
            **re_encrypted_columns,
        )
Exemplo n.º 14
0
class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    user_name = db.Column(db.String(50), nullable=False, unique=True)
    email = db.Column(db.String(120), nullable=False)
    password = db.Column(EncryptedType(db.String, key), nullable=False)
    pin = db.Column(db.String(4), nullable=True)
    question = db.Column(db.String(50), nullable=True)
    answer = db.Column(EncryptedType(db.String, key), nullable=True)
    image = db.Column(EncryptedType(db.String, key), nullable=True)

    def __repr__(self):
        return f'{self.user_name}'
Exemplo n.º 15
0
class User(MyCrtDb.Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    username = Column(String(128), unique=True, nullable=False)
    password = Column(String(512), nullable=False)
    email = Column(String(128))
    access_key= Column(EncryptedType(String, SECRET_KEY, AesEngine), nullable=False)
    secret_key = Column(EncryptedType(String, SECRET_KEY, AesEngine), nullable=False)
    notificationLife = Column(Integer())

    def __repr__(self):
        return '<User %r %r %r %r %r %r' % (self.username, self.password , self.email, self.access_key, self.secret_key, self.notificationLife)

    def is_authenticated(self):
        return True

    def is_active(self):
        return self.active

    def is_anonymous(self):
        return False

    def get_id(self):
        return self.id

    def hash_password(self, password):
        self.password = pwd_context.hash(password)

    def verify_password(self, password):
        return pwd_context.verify(password, self.password)

    def generate_auth_token(self, expiration=7200):
        serializer = Serializer(SECRET_KEY, expires_in=expiration)
        return serializer.dumps({ 'id' : self.id })

    def get_keys(self):
        newDict = {'access_key': self.access_key,
                   'secret_key': self.secret_key}
        return newDict

    @staticmethod
    def verify_auth_token(token):
        serializer = Serializer(SECRET_KEY)
        try:
            data = serializer.loads(token)
        except SignatureExpired:
            return None     # valid token, expired
        except BadSignature:
            return None     # invalid token
        user = User.query.get(data['id'])
        return user
Exemplo n.º 16
0
class Blacklist(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ip = db.Column(EncryptedType(db.String, key, AesEngine, 'pkcs5'),
                   unique=True,
                   nullable=False)
    last = db.Column(EncryptedType(db.String, key, AesEngine, 'pkcs5'),
                     unique=False,
                     nullable=False)  # Sist gang en request ble gjort
    last_bad_login = db.Column(EncryptedType(db.String, key, AesEngine,
                                             'pkcs5'),
                               unique=False,
                               nullable=False)
    # start = db.Column(db.String, unique=False, nullable=False)                       # Når det begynte å bli for mange requests
    frequent_request_count = db.Column(
        EncryptedType(db.Integer, key, AesEngine, 'oneandzeroes'),
        unique=False,
        nullable=False
    )  # Hvor mange ganger brukeren har sent for hyppige requests
    wrong_password_count = db.Column(
        EncryptedType(db.Integer, key, AesEngine, 'oneandzeroes'),
        unique=False,
        nullable=False
    )  # Hvor mange ganger brukeren har skrevet inn feil passord
    blocked_until = db.Column(EncryptedType(db.String, key, AesEngine,
                                            'pkcs5'),
                              unique=False,
                              nullable=True)
    blocked_login_until = db.Column(EncryptedType(db.String, key, AesEngine,
                                                  'pkcs5'),
                                    unique=False,
                                    nullable=True)
    reason = db.Column(EncryptedType(db.String, key, AesEngine, 'pkcs5'),
                       unique=False,
                       nullable=True)
Exemplo n.º 17
0
class SystemLoginAttempt(db.Model):
    __tablename__ = 'system_login_attempts'

    id = db.Column(db.Integer, primary_key=True)

    at = db.Column(db.DateTime, default=datetime.utcnow)

    success = db.Column(db.Boolean)

    from_where = db.Column(EncryptedType(db.String(120), get_secret_key))

    username = db.Column(EncryptedType(db.String(120), get_secret_key))

    info = db.Column(EncryptedType(db.String(120), get_secret_key))
Exemplo n.º 18
0
class User(Base):
    __tablename__ = 'user'
    id = Column(BigInteger, primary_key=True)
    language_code = Column(String(2))
    email = Column(EncryptedType(String, Config.SECRET_KEY))
    password = Column(EncryptedType(String, Config.SECRET_KEY))
    save_credentials = Column(Boolean(create_constraint=False))
    file_format = Column(Enum(FileFormat), default=FileFormat.pdf)
    cache_expire_date = Column(TIMESTAMP(timezone=False),
                               default=datetime.now())
    now_caching = Column(Boolean(create_constraint=False), default=False)
    cache_built = Column(Boolean(create_constraint=False), default=False)
    login_error = Column(Boolean(create_constraint=False), default=False)
    book_collection = relationship('Manga', secondary=lambda: user_manga_table)
def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('sshkeys', schema=None) as batch_op:
        batch_op.add_column(
            sa.Column('private',
                      EncryptedType(sa.String, get_vault_password(), AesEngine,
                                    'pkcs5'),
                      nullable=False,
                      server_default=''))
        batch_op.add_column(
            sa.Column('public',
                      EncryptedType(sa.String, get_vault_password(), AesEngine,
                                    'pkcs5'),
                      nullable=False,
                      server_default=''))
Exemplo n.º 20
0
class AWSKey(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    id_user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    account_id = db.Column(db.Unicode(16), nullable=True)
    key = db.Column(db.Unicode(20), nullable=False)
    secret = db.Column(EncryptedType(db.String, secret_key), nullable=False)
    pretty = db.Column(db.Unicode(63), nullable=True)
    billing_bucket_name = db.Column(db.Unicode(63), nullable=True)
    last_fetched = db.Column(db.DateTime())
    error_status = db.Column(db.Unicode(32), nullable=True)
    import_s3 = db.Column(db.Boolean(), default=False)
    is_valid_key = db.Column(db.Boolean(), server_default='1')
    last_duration = db.Column(db.Integer, nullable=True)
    next_s3_bill_import = db.Column(db.DateTime(), nullable=True)

    def get_boto_session(self):
        return boto3.Session(
            aws_access_key_id=self.key,
            aws_secret_access_key=self.secret,
        )

    def get_aws_user_id(self):
        try:
            if not self.account_id:
                sts = self.get_boto_session().client('sts')
                self.account_id = sts.get_caller_identity()['Account']
                self.is_valid_key = True
                db.session.commit()
        except botocore.exceptions.ClientError, e:
            if e.response['Error']['Code'] == 'InvalidClientTokenId':
                self.is_valid_key = False
                db.session.commit()
            else:
                raise
        return self.account_id
Exemplo n.º 21
0
class KarmaChange(Base):
    __tablename__ = 'karma_changes'

    karma_id = Column(Integer,
                      ForeignKey('karma.id'),
                      primary_key=True,
                      nullable=False)
    user_id = Column(Integer,
                     ForeignKey('users.id'),
                     primary_key=True,
                     nullable=False)
    message_id = Column(Integer,
                        ForeignKey('messages.id'),
                        primary_key=True,
                        nullable=False)
    created_at = Column(DateTime, nullable=False)
    reasons = Column(EncryptedType(type_in=ScalarListType(str),
                                   key=CONFIG['BOT_SECRET_KEY']),
                     nullable=True)
    change = Column(Integer, nullable=False)
    score = Column(Integer, nullable=False)

    karma = relationship('Karma', back_populates='changes')
    user = relationship('User', back_populates='karma_changes')
    message = relationship('LoggedMessage', back_populates='karma')

    @hybrid_property
    def local_time(self):
        return utc.localize(self.created_at).astimezone(
            timezone('Europe/London'))
Exemplo n.º 22
0
class Karma(Base):
    __tablename__ = "karma"

    id = Column(Integer, primary_key=True, nullable=False)
    name = Column(String, nullable=False)
    added = Column(
        EncryptedType(type_in=DateTime, key=CONFIG["BOT_SECRET_KEY"]),
        nullable=False,
        default=datetime.utcnow(),
    )
    pluses = Column(Integer, nullable=False, default=0)
    minuses = Column(Integer, nullable=False, default=0)
    neutrals = Column(Integer, nullable=False, default=0)

    changes = relationship("KarmaChange",
                           back_populates="karma",
                           order_by=KarmaChange.created_at.asc())

    @hybrid_property
    def net_score(self):
        return self.pluses - self.minuses

    @hybrid_property
    def total_karma(self):
        return self.pluses + self.minuses + self.neutrals
 class Team(Base):
     __tablename__ = 'team'
     id = sa.Column(sa.Integer, primary_key=True)
     key = sa.Column(sa.String(50))
     name = sa.Column(
         EncryptedType(sa.Unicode, lambda: self._team_key,
                       encryption_engine, padding_mechanism))
Exemplo n.º 24
0
class Appointments(db.Model):
    __tablename__ = 'appointments'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    date_created = db.Column(db.DateTime, nullable=False, default=dt.now(tz.utc))
    date_scheduled = db.Column(db.DateTime, nullable=False)
    created_by = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    created_for = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    service_id = db.Column(db.Integer, db.ForeignKey('catalog_services.id'), nullable=False)
    service_supp_id = db.Column(db.Integer, db.ForeignKey('services_supplement.id'), nullable=True)
    emp_assigned = db.Column(db.Integer, db.ForeignKey('user_x_employees_assigned.id'), nullable=False)
    emp_accepted = db.Column(db.Boolean, nullable=True, default=False)
    conversation_id = db.Column(db.JSON, nullable=True)
    usr_attendance = db.Column(db.DateTime, nullable=True)
    emp_attendance = db.Column(db.DateTime, nullable=True)
    ended_with_survey = db.Column(db.DateTime, nullable=True)
    cancelled = db.Column(db.Boolean, nullable=True, default=False)
    cancelled_by = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)
    cancelled_reason = db.Column(EncryptedType(db.Text, get_crypto_key, AesEngine, 'pkcs5'), nullable=True)

    def __repr__(self):
        return jsonify(
            id = self.id,
            service_id = self.service_id,
            created_for = self.created_for,
            emp_assigned = self.emp_assigned,
            date_scheduled = self.date_scheduled
        )
Exemplo n.º 25
0
class Device(db.Model):

    __tablename__ = "device"

    hostname = Column(String, nullable=False, primary_key=True)
    ip_address = Column(String, nullable=False, unique=True)
    site = Column(String, nullable=False)
    role = Column(String, nullable=False)
    device_type = Column(String, nullable=False)
    os = Column(String, nullable=False)
    username = Column(String, nullable=False)
    password = Column(EncryptedType(String, _key), nullable=False)

    def __init__(self, hostname, ip_address, site, role, device_type, os,
                 username, password):
        self.hostname = hostname
        self.ip_address = ip_address
        self.site = site
        self.role = role
        self.device_type = device_type
        self.os = os
        self.username = username
        self.password = password

    def as_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
Exemplo n.º 26
0
class Cookies(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(EncryptedType(db.Integer, key, AesEngine,
                                      'oneandzeroes'),
                        unique=False,
                        nullable=False)
    ip = db.Column(EncryptedType(db.String, key, AesEngine, 'pkcs5'),
                   unique=False,
                   nullable=False)
    session_cookie = db.Column(EncryptedType(db.String, key, AesEngine,
                                             'pkcs5'),
                               unique=True,
                               nullable=False)
    valid_to = db.Column(EncryptedType(db.String, key, AesEngine, 'pkcs5'),
                         unique=False,
                         nullable=False)
Exemplo n.º 27
0
class Channel(db.Model):
    """
    A communication channel used to interact with the user and the system.

    Attributes:
        :param @id: Id to populate the database.

        :param @name: The name or address of the channel

        :param @agent_id: The id of the agent containing this channel

        :param @agent: Tha object agent containing this channel

        :param @social_network: The name of the social network used
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=True)
    token = db.Column(EncryptedType(db.String, key), nullable=True)
    agent_id = db.Column(db.Integer, db.ForeignKey('agent.id'), nullable=False)
    agent = db.relationship('Agent', backref=db.backref('channels', lazy=True))
    social_network = db.Column(db.Enum(SocialNetwork),
                               default=SocialNetwork.telegram,
                               nullable=False)

    def __repr__(self):
        return f"<Channel {self.name}>"
Exemplo n.º 28
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    admin_id = db.Column(db.Integer, db.ForeignKey("admin.id"), nullable=False)
    category_id = db.Column(db.Integer,
                            db.ForeignKey("category.id"),
                            nullable=False)
    link = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)
    abstract = db.Column(db.String(400), nullable=False)

    img = db.Column(
        EncryptedType(db.String(500), Config.SECRET_KEY, AesEngine, 'pkcs5'))
    is_published = db.Column(db.Boolean)
    is_sponsored = db.Column(db.Boolean)

    category = db.relationship('Category',
                               backref=db.backref("posts", lazy=True))

    created = db.Column(db.DateTime, default=datetime.utcnow())
    updated = db.Column(db.DateTime, onupdate=datetime.utcnow())

    @hybrid_property
    def image_url(self):
        return display_image(self.img, "/static/upload/posts/")
def upgrade():
    op.add_column(
        'dbs',
        sa.Column(
            'password',
            EncryptedType(sa.String(1024)),
            nullable=True))
Exemplo n.º 30
0
class KarmaChange(Base):
    __tablename__ = "karma_changes"

    karma_id = Column(Integer,
                      ForeignKey("karma.id"),
                      primary_key=True,
                      nullable=False)
    user_id = Column(Integer,
                     ForeignKey("users.id"),
                     primary_key=True,
                     nullable=False)
    message_id = Column(Integer,
                        ForeignKey("messages.id"),
                        primary_key=True,
                        nullable=False)
    created_at = Column(DateTime, nullable=False)
    reasons = Column(
        EncryptedType(type_in=ScalarListType(str),
                      key=CONFIG["BOT_SECRET_KEY"]),
        nullable=True,
    )
    change = Column(Integer, nullable=False)
    score = Column(Integer, nullable=False)

    karma = relationship("Karma", back_populates="changes")
    user = relationship("User", back_populates="karma_changes")
    message = relationship("LoggedMessage", back_populates="karma")

    @hybrid_property
    def local_time(self):
        return utc.localize(self.created_at).astimezone(
            timezone("Europe/London"))