-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
executable file
·174 lines (156 loc) · 7.07 KB
/
server.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
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
from flask import Flask, request, url_for, redirect, jsonify
from geventwebsocket.handler import WebSocketHandler
from geventwebsocket import WebSocketError
from gevent.pywsgi import WSGIServer
import random as rd
import json
import database_helper
#Dictionary used to implement the auto-logout functionality
activeSessions = {}
app = Flask(__name__)
@app.route('/')
def root():
return app.send_static_file("client.html")
@app.route('/api')
def api():
print(activeSessions)
if request.environ.get('wsgi.websocket'):
ws = request.environ['wsgi.websocket']
token = ws.receive()
email = database_helper.get_loggedinuser(token)['email']
if email in activeSessions:
#activeSessions[email].send(json.dumps("signout"))
database_helper.delete_token(activeSessions[email])
del activeSessions[email]
activeSessions[email] = token
print("active websocket replaced")
print(activeSessions)
else:
activeSessions[email] = token
print("new active websocket added")
print(activeSessions)
while True:
message = ws.receive()
print(message)
ws.send(message)
return ""
# def api():
# if request.environ.get('wsgi.websocket'):
# ws = request.environ['wsgi.websocket']
# while True:
# token = ws.receive()
# print(token)
# print("test")
# ws.send(token)
# return ""
@app.route('/user/signin', methods=['POST'])
def sign_in():
data = request.get_json()
user = database_helper.get_user(data['email'])
if user != None:
if user['password'] == data['password']:
characters = "abcdefghiklmnopqrstuvwwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
token = ""
for i in range(36):
token += characters[rd.randint(0, 61)]
database_helper.save_token(data['email'], token)
return jsonify({"success": True, "msg": "Successfully signed in", "data": token})
else:
return jsonify({"success": False, "msg": "Wrong password"})
else:
return jsonify({"success": False, "msg": "User doesn't exist"})
@app.route('/user/signup', methods=['POST'])
def sign_up():
data = request.get_json()
if 'email' in data and 'password' in data and 'firstname' in data and 'familyname' in data and 'gender' in data and 'city' in data and 'country' in data:
if len(data['password']) > 7:
result = database_helper.save_user(data['email'], data['password'], data['firstname'], data['familyname'], data['gender'], data['city'], data['country'])
if result == True:
return jsonify({"success": True, "msg": "User succesfully created"})
else:
return jsonify({"success": False, "msg": "Password is too short"})
else:
return jsonify({"success": False, "msg": "Not good data"})
@app.route('/user/signout', methods=['POST'])
def sign_out():
token = request.headers.get("token")
if database_helper.get_loggedinuser(token) != None:
email = database_helper.get_loggedinuser(token)['email']
database_helper.delete_token(token)
del activeSessions[email]
return jsonify({"success": True, "msg": "User succesfully signed out"})
else:
return jsonify({"success": False, "msg": "User is not signed in"})
@app.route('/user/changepsw', methods=['POST'])
def change_password():
data = request.get_json()
token = request.headers.get("token")
if database_helper.get_loggedinuser(token) != None:
email = database_helper.get_loggedinuser(token)['email']
if database_helper.get_user(email)['password'] == data['oldpassword']:
database_helper.change_password(email, data['newpassword'])
return jsonify({"success": True, "msg": "Password changed"})
else:
return jsonify({"success": False, "msg": "Wrong password"})
else:
return jsonify({"success": False, "msg": "User is not signed in"})
@app.route('/user/data/getbytoken', methods=['GET'])
def get_user_data_by_token():
token = request.headers.get("token")
email = database_helper.get_loggedinuser(token)['email']
return get_user_data_by_email(email)
@app.route('/user/data/getbyemail/<email>', methods=['GET'])
def get_user_data_by_email(email):
token = request.headers.get("token")
if database_helper.get_loggedinuser(token) != None:
if database_helper.get_user(email) != None:
data = database_helper.get_user(email)
result = {"email": data['email'], "firstname": data['firstname'], "familyname": data['familyname'], "gender": data['gender'], "city": data['city'], "country": data['country']}
return {"success": True, "msg": "User data retrieved", "data": result}
else:
return jsonify({"success": False, "msg": "User doesn't exist"})
else:
return jsonify({"success": False, "msg": "User is not signed in"})
@app.route('/user/messages/getbytoken', methods=['GET'])
def get_user_messages_by_token():
token = request.headers.get("token")
email = database_helper.get_loggedinuser(token)['email']
return get_user_messages_by_email(email)
@app.route('/user/messages/getbyemail/<email>', methods=['GET'])
def get_user_messages_by_email(email):
token = request.headers.get("token")
if database_helper.get_loggedinuser(token) != None:
if database_helper.get_user(email) != None:
messages = database_helper.get_usermessages(email)
if messages != None:
result = [message for message in messages]
return jsonify({"success": True, "msg": "User messages retrieved", "data": result})
else:
return jsonify({"success": True, "msg": "User messages retrieved", "data": None})
else:
return jsonify({"success": False, "msg": "User doesn't exist"})
else:
return jsonify({"success": False, "msg": "User is not signed in"})
@app.route('/user/messages/post', methods=['POST'])
def post_message():
data = request.get_json()
token = request.headers.get("token")
fromemail = database_helper.get_loggedinuser(token)['email']
if database_helper.get_user(fromemail) != None:
if data['toemail'] == None:
data['toemail'] = fromemail
if database_helper.get_user(data['toemail']) != None:
database_helper.save_message(data['message'], fromemail, data['toemail'])
return {"success": True, "msg": "Message posted"}
else:
return jsonify({"success": False, "msg": "Recipient user doesn't exist"})
else:
return jsonify({"success": False, "msg": "User is not signed in"})
# @app.route('/user/test/<email>', methods=['POST'])
# def test(email):
# print(database_helper.get_usermessages(email))
# return jsonify(database_helper.get_usermessages(email))
if __name__ == '__main__':
app.debug = True
http_server = WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()