diff options
author | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-18 04:06:30 +0100 |
---|---|---|
committer | Alexander Sulfrian <alex@spline.inf.fu-berlin.de> | 2014-11-18 04:06:30 +0100 |
commit | e2919119fabf6c502bf7c935b970a1a63dadfb84 (patch) | |
tree | a8476aa74a7bc0793efca23edae5bcd37bef6d6f /models.py | |
parent | bea8e3cd884e908d94b05a00bb4c866543e166e0 (diff) | |
download | padlite-teams-e2919119fabf6c502bf7c935b970a1a63dadfb84.tar.gz padlite-teams-e2919119fabf6c502bf7c935b970a1a63dadfb84.tar.bz2 padlite-teams-e2919119fabf6c502bf7c935b970a1a63dadfb84.zip |
models: add Session model
A Session is a associations between a group and a user in padlite.
Diffstat (limited to 'models.py')
-rw-r--r-- | models.py | 43 |
1 files changed, 41 insertions, 2 deletions
@@ -1,7 +1,8 @@ from peewee import CharField, DateTimeField, BooleanField, ForeignKeyField from peewee import create_model_tables -from datetime import datetime +from datetime import datetime, timedelta from app import db, pad +from padlite import APIException class User(db.Model): username = CharField() @@ -44,5 +45,43 @@ class Member(db.Model): def __unicode__(self): return "%s member of %s" % (self.user.username, self.group.name) +class Session(db.Model): + api_id = CharField(null=True) + user = ForeignKeyField(User, related_name='sessions') + group = ForeignKeyField(Group, related_name='sessions') + uuid = CharField() + valid_until = DateTimeField(null=True) + + def save(self, force_insert=False, only=None): + if self.id is None or force_insert: + if self.group.api_id is None: + self.group.api_id = pad.createGroup() + self.valid_until = datetime.now() + timedelta(hours=4) + self.api_id = pad.createSession(self.group.api_id, self.user.api_id, + self.valid_until.strftime("%s")) + super(Session, self).save(force_insert=force_insert, only=only) + + def delete_instance(self, **kwargs): + if self.api_id is not None: + try: + pad.deleteSession(self.api_id) + except APIException as e: + # we want to ignore code 1 = sessionID does not exist + if e.code != 1: + raise + self.api_id = None + self.save() + super(Session, self).delete_instance(**kwargs) + + def is_valid(self): + if self.api_id is None: + return True + + if self.valid_until is not None: + if datetime.now() + timedelta(minutes=30) < self.valid_until: + return True + + return False + def create_tables(): - create_model_tables([User, Group, Member], fail_silently = True) + create_model_tables([User, Group, Member, Session], fail_silently = True) |