summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-18 04:06:30 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-18 04:06:30 +0100
commite2919119fabf6c502bf7c935b970a1a63dadfb84 (patch)
treea8476aa74a7bc0793efca23edae5bcd37bef6d6f
parentbea8e3cd884e908d94b05a00bb4c866543e166e0 (diff)
downloadpadlite-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.
-rw-r--r--models.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/models.py b/models.py
index c6721c1..e611137 100644
--- a/models.py
+++ b/models.py
@@ -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)