-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.py
More file actions
110 lines (100 loc) · 3.65 KB
/
index.py
File metadata and controls
110 lines (100 loc) · 3.65 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
import redis
from flask import *
import os
from pysmx.SM3 import SM3
from gevent import monkey
monkey.patch_all()
def sm3_hash(data: str):
s = SM3()
s.update(data)
return str(s.hexdigest())
app = Flask(__name__)
redis_host = str(os.getenv("REDIS_HOST"))
redis_port = str(os.getenv("REDIS_PORT"))
redis_password = str(os.getenv("REDIS_PASSWORD"))
app.config['SECRET_KEY'] = str(os.getenv("SESSION_KEY"))
db = redis.Redis(host = redis_host,
port = redis_port,
password = redis_password,
decode_responses = True)
messages = []
message = db.get("message")
if message is not None:
temp = message.split(";")
temp.remove('')
for i in temp:
m = i.split(':')
messages.append({'username': str(m[0]), 'message': str(m[1])})
else:
message = ""
users = []
user = db.get("user")
if user is not None:
temp = user.split(";")
temp.remove('')
for i in temp:
u = i.split(':')
users.append({'username': str(u[0]), 'password': str(u[1])})
else:
user = ""
@app.route("/")
def index():
if session.get('login') is None or session.get('login') == False:
return redirect('/login')
return redirect("/chat")
@app.route("/login", methods = ["GET", "POST"])
def login():
if session.get('login') == True:
return redirect('/chat')
if request.method == "GET":
return render_template("login.html")
elif request.method == "POST":
Type = request.values.get("type")
username = request.values.get("username")
password = request.values.get("password")
global user
global users
if Type == 'register':
if username is None or password is None:
return redirect("/")
if len(username) > 20:
return "The username is too long."
if ':' in username or ';' in username:
return "The username contains special characters."
user = str(user) + str(username) + ":" + str(sm3_hash(password)) + ";"
users.append({"username": str(username), "password": str(sm3_hash(password))})
db.set("user", user)
session['login'] = True
session['username'] = username
return redirect("/chat")
elif Type == 'login':
for u in users:
if u['password'] == sm3_hash(password) and u['username'] == username:
session['login'] = True
session['username'] = username
return redirect('/chat')
return "The username or password do not match."
@app.route("/chat", methods = ["GET", "POST"])
def chat():
if session.get('login') is None or session.get('login') == False:
return redirect('/login')
if request.method == "GET":
return render_template("chat.html", username = session.get('username'))
elif request.method == "POST":
username = session.get("username")
mess = request.values.get("message")
if mess is None:
return redirect("/")
if len(mess) > 1000:
return "The message is too long."
if ':' in mess or ';' in mess:
return "The message contains special characters."
global message
global messages
message = str(message) + str(username) + ":" + str(mess) + ";"
messages.append({"username": str(username), "message": str(mess)})
db.set("message", message)
return redirect("/chat")
@app.route('/api')
def api():
return render_template("api.html", messages = messages)