class Screenshot( db.Model ): id = db.Column(db.Integer, primary_key = True) user = db.Column( db.Integer, db.ForeignKey('user.id'), index=True ) time = db.Column( db.BigInteger, index=True ) upload_args = db.Column( db.Unicode(2048) ) def serialize( self ): serial = dict( (x,getattr(self,x) ) for x in ('id','time','upload_args') ) serial['user'] = User.query.get( self.user ).email return serial def render_serialize( self ): serial = dict( (x,getattr(self,x) ) for x in ('id','time','user') ) serial['key'] = self.get_key() return serial def get_upload_args( self ): global conn form_args = conn.build_post_form_args( app.config['PIC_BUCKET'], max_content_length = app.config['MAX_PIC_SIZE'], key = self.get_key() ) self.upload_args = json.dumps( form_args ) db.session.add( self ) db.session.commit() return form_args def get_key( self ): return "%d/%d.png" % ( self.user, self.id )
class SessionView(db.Model): id = db.Column('id', db.Integer, primary_key=True) session_id = db.Column('session', db.Integer, db.ForeignKey('session.id'), index=True) shamer_id = db.Column('shamer', db.Integer, db.ForeignKey('shamer.id'), index=True) secret = db.Column('secret', db.Unicode(64), unique=True, index=True) session = db.relationship(Session, backref='session_views') shamer = db.relationship(Shamer, backref='shamer')
class Shamer(db.Model): id = db.Column(db.Integer, primary_key=True) user = db.Column(db.Integer, db.ForeignKey('user.id'), index=True) email = db.Column(db.Unicode(512)) confirmed = db.Column(db.Boolean, default=False) start_notifications = db.Column(db.Boolean, default=True) end_notifications = db.Column(db.Boolean, default=True) db.UniqueConstraint('user', 'email')
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.Unicode(255), unique=True, index=True) password = db.Column(db.Unicode(255)) throttle_counter = db.Column(db.SmallInteger) last_throttle_check = db.Column(db.Integer, default=int_time) last_login_at = db.Column(db.DateTime) current_login_at = db.Column(db.DateTime) last_login_ip = db.Column(db.Unicode(30)) current_login_ip = db.Column(db.Unicode(30)) login_count = db.Column(db.Integer) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) screenshots = db.relationship('Screenshot', backref='owner', lazy='dynamic') sessions = db.relationship('Session', backref='owner', lazy='dynamic') shamers = db.relationship('Shamer', backref='shamee', lazy='dynamic') def __init__(self, password, **kwargs): self.password = pbkdf2_sha512.encrypt(password) db.Model.__init__(self, **kwargs) def set_password(self, pw): self.password = pbkdf2_sha512.encrypt(pw) def check_pw(self, pw): return pbkdf2_sha512.verify(pw, self.password) def get_auth_token(self): """tokens are generated from encrypted password""" return pbkdf2_sha512.encrypt(self.password) def check_auth_token(self, token): """check that password was used to generate token""" return pbkdf2_sha512.verify(self.password, token)
class Session( db.Model ): id = db.Column(db.Integer, primary_key = True) user = db.Column( db.Integer, db.ForeignKey('user.id'), index=True ) start = db.Column( db.BigInteger, index=True ) end = db.Column( db.BigInteger, index=True ) rendered = db.Column( db.Boolean, default=False ) secret = db.Column( db.Unicode(64) ) key = db.Column( db.Unicode( 64 ) ) bucket = db.Column( db.Unicode(64) ) width = db.Column( db.Integer , default=800) height = db.Column( db.Integer , default=450) description = db.Column( db.Unicode(4096) ) def serialize( self ): serial = dict( (x,getattr(self,x) ) for x in ('id','start','end', 'height', 'width') ) serial['user'] = User.query.get( self.user ).email return serial