Esempio n. 1
0
class Vote(Model):
    """
    This model holds information about a votes casted by user on stories
    """

    __tablename__ = "vote"

    id = Column(db.Integer, primary_key=True)
    story_id = Column(db.String(128))
    user_id = Column(db.Integer, db.ForeignKey("user.id"))
    value = Column(db.Integer)

    def __init__(self, story_id, user_id, value):
        self.story_id = story_id
        self.user_id = user_id
        self.value = value

    @classmethod
    def fetch_user_votes(cls, user_id):
        return cls.query.filter_by(user_id=user_id).all()

    def save(self):
        """
        Save a user to the database.
        This includes creating a new user and editing one.
        """
        db.session.add(self)
        db.session.commit()
Esempio n. 2
0
class Comment(Model):
    """
    This model represents a comment on a given note
    """

    __tablename__ = "comment"

    id = Column(db.Integer, primary_key=True)
    story_id = Column(db.String(128))
    user_id = Column(db.Integer, db.ForeignKey("user.id"))
    content = Column(db.Integer)

    def __init__(self, story_id, user_id, content):
        self.story_id = story_id
        self.user_id = user_id
        self.content = content

    @classmethod
    def fetch_user_comments(cls, user_id):
        return cls.query.filter_by(user_id=user_id).all()

    @classmethod
    def fetch_post_comments(cls, post_id):
        return cls.query.filter_by(post_id=post_id).all()

    def save(self):
        """
        Save a comment to the database.
        """
        db.session.add(self)
        db.session.commit()
Esempio n. 3
0
class RevokedToken(Model):
    """
    This model holds information about revoked tokens, users who have logged out
    """

    __tablename__ = "revoked_tokens"
    id = Column(db.Integer, primary_key=True)
    jti = Column(db.String(120))

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

    @classmethod
    def is_jti_blacklisted(cls, jti):
        query = cls.query.filter_by(jti=jti).first()
        return bool(query)
Esempio n. 4
0
class User(Model):
    """
    This model holds information about a user registered
    """

    __tablename__ = "user"

    id = Column(db.Integer, primary_key=True)
    name = Column(db.String(80), nullable=False)
    password = Column(db.String(128))
    email = Column(db.String(100), nullable=False, unique=True)
    date = Column(db.DateTime, default=datetime.now())
    votes = db.relationship("Vote", backref=db.backref("user"))
    type = Column(db.String(50), default="remote")

    def __init__(self, name, email, password, _type="remote"):
        """
        Initializes the user instance
        """
        self.name = name
        self.email = email
        if password:
            self.password = Bcrypt().generate_password_hash(password).decode()
        self.type = _type

    def __repr__(self):
        """
        Returns the object reprensentation
        """
        return "<User %r>" % self.name

    def to_json(self):
        """
        Returns a JSON object

        :return: user JSON object
        """
        user_json = {"name": self.name, "email": self.email, "date": self.date}
        return user_json

    @classmethod
    def find_by_email(cls, email):
        return cls.query.filter_by(email=email).first()

    def verify_password(self, password):
        """
        Verify the password

        :param password: password for verification
        """
        return Bcrypt().check_password_hash(self.password, password)

    def save(self):
        """
        Save a user to the database.
        This includes creating a new user and editing one.
        """
        db.session.add(self)
        db.session.commit()
Esempio n. 5
0
class User(Model):
    """
    This model holds information about a user registered
    """
    __tablename__ = 'user'

    id = Column(db.Integer, primary_key=True)
    name = Column(db.String(80), nullable=False)
    password = Column(db.String(128))
    email = Column(db.String(100), nullable=False, unique=True)
    date = Column(db.DateTime, default=datetime.now())
    type = Column(db.String(50), default='remote')

    def __init__(self, name, email, password, _type='remote'):
        """
        Initializes the user instance
        """
        self.name = name
        self.email = email
        if (password):
            self.password = Bcrypt().generate_password_hash(password).decode()
        self.type = _type

    def __repr__(self):
        """
        Returns the object reprensentation
        """
        return '<User %r>' % self.name

    def generate_auth_token(self, expiration, user_id, user_name):
        """
        Generate authorization token

        """
        try:
            # set up a payload with an expiration time
            payload = {
                'exp': datetime.utcnow() + timedelta(seconds=expiration),
                'iat': datetime.utcnow(),
                'sub': user_id,
                'name': user_name
            }
            # create the byte string token using the payload and the SECRET key
            jwt_string = jwt.encode(payload,
                                    current_app.config.get('SECRET_KEY'),
                                    algorithm='HS256')
            return jwt_string

        except Exception as e:
            # return an error in string format if an exception occurs
            return str(e)

    def to_json(self):
        """
        Returns a JSON object

        :return: user JSON object
        """
        user_json = {
            'name': self.name,
            'password': self.password,
            'email': self.email,
            'date': self.date
        }
        return user_json

    @staticmethod
    def verify_auth_token(token):
        """
        Verification of authorization token

        :param token: token for verification
        """
        try:
            # try to decode the token using our SECRET variable
            payload = jwt.decode(token, current_app.config.get('SECRET_KEY'))
            return payload['sub']
        except jwt.ExpiredSignatureError:
            # the token is expired, return an error string
            return "Expired token. Please login to get a new token"
        except jwt.InvalidTokenError:
            # the token is invalid, return an error string
            return "Invalid token. Please register or login"

    def verify_password(self, password):
        """
        Verify the password

        :param password: password for verification
        """
        return Bcrypt().check_password_hash(self.password, password)

    def save(self):
        """
        Save a user to the database.
        This includes creating a new user and editing one.
        """
        db.session.add(self)
        db.session.commit()
Esempio n. 6
0
class User(Model):
    """
    This model holds information about a user registered
    """

    __tablename__ = "user"

    id = Column(db.Integer, primary_key=True)
    name = Column(db.String(80), nullable=False)
    password = Column(db.String(128))
    verification_token = Column(db.String(128), nullable=False, unique=True)
    email = Column(db.String(100), nullable=False, unique=True)
    date = Column(db.DateTime, default=datetime.now())
    votes = db.relationship("Vote", backref=db.backref("user"))
    type = Column(db.String(50), default="remote")
    role = Column(db.String(10), default="user")

    def __init__(self, name, email, password, role="user", _type="remote"):
        """
        Initializes the user instance
        """
        self.name = name
        self.email = email
        self.verification_token = User.generate_token()
        if password:
            self.password = User.generate_password_hash(password)
        self.type = _type
        self.role = role

    def __repr__(self):
        """
        Returns the object reprensentation
        """
        return "<User %r>" % self.name

    def to_json(self):
        """
        Returns a JSON object

        :return: user JSON object
        """
        user_json = {"name": self.name, "email": self.email, "date": self.date}
        return user_json

    @classmethod
    def find_by_email(cls, email):
        return cls.query.filter_by(email=email).first()

    @classmethod
    def find_by_user_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_by_verification_token(cls, verification_token):
        return cls.query.filter_by(
            verification_token=verification_token).first()

    @classmethod
    def verify_admin(cls, email):
        """
        Verify admin role
        """
        try:
            query = cls.query.filter_by(email=email, role="admin").first()
            return query
        except Exception as err:
            print("Error: ", err)

    @staticmethod
    def generate_token():
        """
        Returns a random token
        """
        return uuid4().hex

    @staticmethod
    def generate_password_hash(password):
        """
        Returns hash of password
        """
        return Bcrypt().generate_password_hash(password).decode()

    def verify_password(self, password):
        """
        Verify the password

        :param password: password for verification
        """
        return Bcrypt().check_password_hash(self.password, password)

    def save(self):
        """
        Save a user to the database.
        This includes creating a new user and editing one.
        """
        db.session.add(self)
        db.session.commit()