1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
from peewee import CharField, DateTimeField, BooleanField, ForeignKeyField
from peewee import create_model_tables
from datetime import datetime, timedelta
from app import db, pad
from padlite import APIException
class User(db.Model):
username = CharField()
api_id = CharField(null=True)
email = CharField()
last_login = DateTimeField(default=datetime.now)
active = BooleanField(default=True)
admin = BooleanField(default=False)
def __unicode__(self):
return self.username
class Group(db.Model):
name = CharField(unique=True)
api_id = CharField(null=True)
public = BooleanField(default=False)
browsable = BooleanField(default=False)
def __unicode__(self):
return self.name
def save(self, force_insert=False, only=None):
if self.id is None or force_insert:
self.api_id = pad.createGroup()
super(Group, self).save(force_insert=force_insert, only=only)
def delete_instance(self, **kwargs):
if self.api_id is not None:
pad.deleteGroup(self.api_id)
self.api_id = None
self.save()
super(Group, self).delete_instance(**kwargs)
class Member(db.Model):
group = ForeignKeyField(Group, related_name='members')
user = ForeignKeyField(User, related_name='groups')
manager = BooleanField(default=False)
admin = BooleanField(default=False)
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
class Pad(db.Model):
name = CharField(verbose_name='pad name')
api_id = CharField(null=True)
group = ForeignKeyField(Group, related_name='pads')
created = DateTimeField(default=datetime.now)
public = BooleanField(default=False)
password = CharField(null=True)
def __unicode__(self):
return self.name
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.api_id = pad.createGroupPad(self.group.api_id, self.name, 'testing')
if self.api_id is not None:
pad.setPublicStatus(self.api_id, self.public)
pad.setPassword(self.api_id, self.password)
super(Pad, self).save(force_insert=force_insert, only=only)
def delete_instance(self, **kwargs):
if self.api_id is not None:
pad.deletePad(self.api_id)
self.api_id = None
self.save()
super(Pad, self).delete_instance(**kwargs)
def create_tables():
create_model_tables([User, Group, Member, Session, Pad], fail_silently = True)
|