Exemplo n.º 1
0
class Image(db.Model):
    __tablename__ = "images"
    id = db.Column(
        db.Integer,
        primary_key=True,
    )
    user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
    user = db.relationship("User", back_populates="photo")
Exemplo n.º 2
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    header = db.Column(db.String(256), )
    body = db.Column(db.String(512), )
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

    @staticmethod
    def add_post(user_id, header, body):
        post = Post(header=header, body=body)
        post.user_id = user_id
        return post

    @staticmethod
    def get_post_by_id(id, ):
        post = Post.query.get(id)
        return post

    def edit_post(self, header, body):
        self.header = header
        self.body = body

    def __repr__(self, ):
        return "<Post: {}>".format(self.header)
Exemplo n.º 3
0
class ShortUrl(db.Model):
    __tablename__ = "short_urls"
    id = db.Column(
        db.Integer,
        primary_key=True,
    )
    name = db.Column(
        db.String(length=250),
        unique=True,
    )
    url = db.Column(db.String(length=250), )
    user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
    user = db.relationship("User", back_populates="short_urls")

    @staticmethod
    def create_short_url(url, ):
        return uuid.uuid4().hex

    @staticmethod
    def all_user_urls(user):
        return ShortUrl.query.filter_by(user=user).all()

    def __repr__(self):
        return "<Short {0}>".format(self.name)
Exemplo n.º 4
0
class User(UserMixin, db.Model):
    __tablename__ = "users"
    id = db.Column(
        db.Integer,
        primary_key=True,
    )
    name = db.Column(db.String(length=256, ), )
    family = db.Column(db.String(length=256, ), )
    username = db.Column(
        db.String(length=256, ),
        unique=True,
    )
    photo = db.relationship("Image", back_populates="user", uselist=False)
    short_urls = db.relationship(
        "ShortUrl",
        back_populates="user",
    )
    password_hash = db.Column(db.String(length=256, ), )
    role_id = db.Column(
        db.Integer,
        db.ForeignKey("roles.id"),
    )
    role = db.relationship(
        "Role",
        back_populates="users",
    )
    email = db.Column(db.String(length=256), unique=True)
    location = db.Column(db.String(length=256))
    about_me = db.Column(db.Text())
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)
    is_active = db.Column(db.Boolean(), default=False)

    def __init__(self, *args, **kwargs):
        super(User, self).__init__(*args, **kwargs)
        if self.role is None:
            if self.email == current_app.config["ADMIN"]:
                self.role = Role.query.filter_by(name="admin").first()
                self.is_active = True
            else:
                self.role = Role.query.filter_by(name="user").first()

    @property
    def password(self):
        raise AttributeError("[-] Setting password directly is not allowed!")

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password=password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return "<User {0}>".format(self.name)

    def can(self, permission):
        if permission is not None:
            return self.role.has_permission(permission)
        return False

    def update_last_seen(self, ):
        self.last_seen = datetime.utcnow()
        db.session.add(self)
        db.session.commit()

    def get_photo_url(self, ):
        if self.photo:
            photo = self.photo
            return str(photo.id) + current_app.config.get("SAVE_EXTENSION")

    def generate_signature(self, exp=60000):
        serializer = TimedJSONWebSignatureSerializer(
            secret_key=current_app.config['SECRET_KEY'],
            salt='pd',
            expires_in=exp,
        )
        return serializer.dumps({
            'code': self.id,
        })

    def validate_signature(self, token):
        result = False
        serializer = TimedJSONWebSignatureSerializer(
            secret_key=current_app.config["SECRET_KEY"],
            salt='pd',
        )
        try:
            data = serializer.loads(token)
            if data.get('code') == self.id:
                result = True
        except Exception as e:
            print(e)
        return result
Exemplo n.º 5
0
    UserMixin, )
from itsdangerous import (
    TimedJSONWebSignatureSerializer,
    BadTimeSignature,
    SignatureExpired,
)
from app.init import (
    db, )
from app.packages.blog.models import Post

followers = db.Table(
    "followers",
    db.Column(
        "follower",
        db.Integer,
        db.ForeignKey("user.id"),
        primary_key=True,
    ),
    db.Column(
        "followed",
        db.Integer,
        db.ForeignKey("user.id"),
        primary_key=True,
    ),
)


class User(UserMixin, db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,