-
Notifications
You must be signed in to change notification settings - Fork 0
/
Firebase.py
130 lines (98 loc) · 4.33 KB
/
Firebase.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
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
import firebase_admin
from firebase_admin import auth
from firebase_admin import credentials
from core import *
from flask_cors import cross_origin
cred = credentials.Certificate("./config/FirebaseCredential.json")
FIREBASE_APP = firebase_admin.initialize_app(cred)
from Session import *
from Database import *
from flask import send_file, request, abort, jsonify, Response
from json import dumps
import traceback
@app.route('/flex/user/<swid>/detail', methods=['POST'])
@cross_origin(supports_credentials=True)
def getUserDetail(swid):
userData = {}
user = Penguin.query.filter_by(swid=swid).first()
if not user:
return abort(404)
# avatar = Avatar.query.filter_by(penguin_id=user.id).first()
member = Membership.query.filter_by(penguin_id=user.id).order_by(Membership.expires.desc()).first()
coins = Coin.query.with_entities(func.sum(Coin.transaction)).filter_by(penguin_id=user.id).scalar() or 0
mail_count = Mail.query.filter_by(penguin_id=user.id, opened=0).count() or 0
if session['login_data']['swid'] != swid:
userData['user.name'] = user.nickname
online = app.redis.hgetall("online:{}".format(user.id))
userData['user.online'] = online['place_name'] if online and 'place_name' in online and not user.moderator else None
if user.moderator:
userData['user.moderator'] = True
_friend = Friend.query.filter_by(penguin_id=user.id, friend=session['login_data']['swid']).first()
userData['user.friend'] = False if _friend is None else True
if _friend is not None:
userData['friend.since'] = str(_friend.befriended)
userData['friend.bff'] = bool(int(_friend.bff))
return jsonify(userData)
userData['member.data'] = {'expire': str(member.expires), 'since': str(member.redeemed_on or None)} if member else {}
userData['coins.count'] = int(coins)
userData['mail.count'] = int(mail_count)
if user.moderator:
userData['moderator.data'] = {}
if user.moderator == 1:
userData['moderator.data']['meta'] = 'Moderator'
elif user.moderator == 2:
userData['moderator.data']['meta'] = 'Stealth Mod'
elif user.moderator == 3:
userData['moderator.data']['meta'] = 'Mascot'
return jsonify(userData)
@app.route('/flex/user/<swid>/coins', methods=['POST'])
@cross_origin(supports_credentials=True)
def getUserCoinHistory(swid):
try:
if swid != session['login_data']['swid']:
return abort(404)
user = Penguin.query.filter_by(swid=swid).first()
if not user:
return abort(404)
coins = Coin.query.filter_by(penguin_id=user.id).order_by(Coin.id.desc()).limit(100).all()
userData = {}
userData['coins.data'] = {coin.id : {'transaction': coin.transaction, 'comment': coin.comment} for coin in coins}
return jsonify(userData)
except:
traceback.print_exc()
@app.route('/flex/user/<swid>/bans', methods=['POST'])
@cross_origin(supports_credentials=True)
def getUserBanHistory(swid):
try:
if swid != session['login_data']['swid']:
return abort(404)
user = Penguin.query.filter_by(swid=swid).first()
if not user:
return abort(404)
bans = Ban.query.filter_by(penguin_id=user.id).order_by(Ban.id.desc()).all()
userData = {}
userData['bans.data'] = {ban.id : {'moderator': ban.moderator, 'comment': ban.comment, 'expire': str(ban.expire), 'since': str(ban.time)} for ban in bans}
return jsonify(userData)
except:
traceback.print_exc()
@app.route('/flex/user/<swid>/friends', methods=['POST'])
@cross_origin(supports_credentials=True)
def getUserFriendsDetail(swid):
user = Penguin.query.filter_by(swid=swid).first()
if not user:
return abort(404)
userData = {}
friends = Friend.query.filter_by(penguin_id=user.id)
requests = Request.query.filter_by(penguin_id=user.id)
userData['friend.count'] = int(friends.count())
userData['request.count'] = int(requests.count())
if swid == session['login_data']['swid']:
userData['friend.data'] = {str(friend.friend) : {'since': str(friend.befriended), 'bff': bool(int(friend.bff))} for friend in friends.all()}
userData['request.data'] = [str(r.requested_by) for i in requests.all()]
return jsonify(userData)
@app.route('/flex/user/signout', methods=['POST', 'GET'])
@cross_origin(supports_credentials=True)
def signOut():
if 'login_data' in session:
session.pop('login_data')
return jsonify({'user.signout': 'login_data' not in session})