-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser.py
More file actions
183 lines (113 loc) · 3.19 KB
/
user.py
File metadata and controls
183 lines (113 loc) · 3.19 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
import uuid
import firebase_admin
from firebase_admin import credentials, auth
from config import ROOT_DIR
from struct import error
import redis
import json
r = redis.Redis(host='localhost', port=6379, db=0)
cred = credentials.Certificate(ROOT_DIR+"/music-generator-9578a-firebase-adminsdk-sa6xv-7dd5a859e8.json")
firebase_admin.initialize_app(cred)
class FireBaseTokenRevokedError(Exception):
pass
class FireBaseTokenInvalidError(Exception):
pass
def validate_firebase_token(id_token):
try:
# Verify the ID token while checking if the token is revoked by
# passing check_revoked=True.
decoded_token = auth.verify_id_token(id_token)
uid = decoded_token['uid']
return uid
except:
raise
def get_or_add_user_by_id_token(id_token):
try:
uid = validate_firebase_token(id_token)
except auth.RevokedIdTokenError:
return None, "Revoked id token!"
except auth.InvalidIdTokenError:
return None, "Invalid id token!"
except ValueError:
return None, "Id token can't be empty!"
if uid == None:
return None, "id token is not valid"
user = get_or_add_user(uid), None
return user
def get_or_add_user(uid):
user = get_user(uid)
if user == None:
user = add_user(uid)
return user
def r_get(key):
result = r.get(key)
if result == None:
return None
return json.loads(result)
def r_set(key, value):
r.set(key, json.dumps(value))
def get_all(key, create_if_none=True):
list = r_get(key)
if list == None and create_if_none == True:
r_set(key, [])
return []
return list
def get(key, id_key, id_val):
list = get_all(key)
for list_item in list:
if list_item.get(id_key, None) == id_val:
return list_item
return None
def add(key, value, id_key=None):
list = get_all(key)
if id_key != None:
for list_item in list:
if list_item[id_key] == value[id_key]:
return None
list.append(value)
r_set(key, list)
return value
def delete(key, id_key, id_val):
list = get_all(key)
for i, list_item in enumerate(list):
if list_item.get(id_key, None) == id_val:
del list[i]
r_set(key, list)
return True
return False
def get_users():
return get_all('users')
def get_user(uid):
return get('users', 'uid', uid)
def add_user(uid):
new_user = { 'uid': str(uid) }
return add('users', new_user, 'uid')
def delete_user(uid):
return delete('users', 'uid', uid)
def add_track(uid, file_name, output_midi_filename):
add('tracks', {
'file_name': file_name,
'output_midi_filename': output_midi_filename,
'uid': uid
})
return True
def delete_track(uid, file_name):
list = get_all('tracks')
for i, list_item in enumerate(list):
if list_item.get('file_name', None) == file_name and list_item.get('uid', None) == uid:
del list[i]
print(list)
r_set("tracks", list)
return True
return False
def get_tracks_by_uid(uid):
tracks = []
for track in get_all('tracks'):
if track.get('uid', None) == uid:
tracks.append(track)
return tracks
def get_track_by_file_name(file_name):
for track in get_all('tracks'):
if track.get('file_name', None) == file_name:
return track
return None