-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathdbmodel.py
81 lines (65 loc) · 2.54 KB
/
dbmodel.py
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
import datetime
from google.cloud import ndb
class AuthToken(ndb.Model):
"""Representation of a stored authid"""
user_id = ndb.StringProperty(required=True)
blob = ndb.TextProperty(required=True)
expires = ndb.DateTimeProperty(required=True, tzinfo=datetime.timezone.utc)
service = ndb.StringProperty(required=True)
class FetchToken(ndb.Model):
"""Representation of a stored fetch token"""
authid = ndb.StringProperty(required=False)
token = ndb.StringProperty(required=True)
expires = ndb.DateTimeProperty(required=True, tzinfo=datetime.timezone.utc)
fetched = ndb.BooleanProperty(required=True)
class StateToken(ndb.Model):
"""Representation of a stored state token"""
service = ndb.StringProperty(required=True)
expires = ndb.DateTimeProperty(required=True, tzinfo=datetime.timezone.utc)
fetchtoken = ndb.StringProperty(required=False)
version = ndb.IntegerProperty(required=False)
@ndb.transactional(xg=True)
def create_fetch_token(fetchtoken):
# A fetch token stays active for 30 minutes
if fetchtoken is not None and fetchtoken != '':
e = FetchToken.get_by_id(fetchtoken)
if e is None:
FetchToken(id=fetchtoken, token=fetchtoken, fetched=False,
expires=datetime.datetime.utcnow() + datetime.timedelta(minutes=5)).put()
@ndb.transactional(xg=True)
def update_fetch_token(fetchtoken, authid):
if fetchtoken is not None and fetchtoken != '':
e = FetchToken.get_by_id(fetchtoken)
if e is not None:
e.expires = datetime.datetime.utcnow() + datetime.timedelta(seconds=30)
e.authid = authid
e.fetched = False
e.put()
@ndb.transactional()
def insert_new_authtoken(keyid, user_id, blob, expires, service):
entry = AuthToken.get_by_id(keyid)
if entry is None:
entry = AuthToken(id=keyid, user_id=user_id, blob=blob, expires=expires, service=service)
entry.put()
return entry
else:
return None
@ndb.transactional(xg=True)
def insert_new_statetoken(token, service, fetchtoken, version):
entry = StateToken.get_by_id(token)
if entry is None:
tokenversion = None
try:
tokenversion = int(version)
except:
pass
entry = StateToken(
id=token,
service=service,
fetchtoken=fetchtoken,
expires=datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
version=tokenversion)
entry.put()
return entry
else:
return None