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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
from peewee import CharField, DateTimeField, BooleanField, ForeignKeyField, TextField
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 __str__(self):
return self.username
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)
description = TextField(null=True)
def __str__(self):
return self.name
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)
active = BooleanField(default=False)
def __str__(self):
return "%s member of %s" % (self.user.username, self.group.name)
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 __str__(self):
return self.name
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)
|