-
Notifications
You must be signed in to change notification settings - Fork 0
/
SERVER.py
83 lines (74 loc) · 2.17 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
import flask
from time import sleep
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
# Set up mysql config
config = {
'user': 'root',
'password': '123456',
'host': 'localhost',
'database': 'user_id_ge',
'raise_on_warnings': True
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor(buffered = True)
# Set up the page
app = flask.Flask(__name__)
limiter = Limiter(
app,
key_func=get_remote_address,
default_limits=["200 per day", "50 per hour"]
)
@app.route('/')
@limiter.limit("1/second")
def index():
return flask.render_template('Index.html')
# Page for new ID
@app.route('/NewID')
@limiter.limit("1/second")
def NewID():
try:
# Unlock database
cursor.execute('UNLOCK TABLES')
# Select first unused
cursor.execute('SELECT id FROM IDS WHERE IDS.used = 0')
# Make sure the IDS are sufficient
idR = cursor.fetchone()
while idR is None:
pass
idR = str(idR[0])
# Set current id as used
cursor.execute('UPDATE IDS SET used = 1 WHERE id = %s', (idR,))
cnx.commit()
# Enlarge id pool
cursor.execute('SELECT COUNT(id) FROM IDS WHERE used = 0')
idC = cursor.fetchone()
while idC is None:
pass
idC = int(idC[0])
# Check remaining ids
if idC <= 10:
# generate another 10 ids
ID.generateID(cursor)
ret = '<h1>Congratulations! Your ID Number is: ' + idR + ' ' + str(idC) + '</h1>'
# Lock database
cursor.execute('LOCK TABLE IDS READ')
cursor.execute('LOCK TABLE IDS WRITE')
return ret
except Exception as e:
cursor.execute('LOCK TABLE IDS READ')
cursor.execute('LOCK TABLE IDS WRITE')
ret = 'An error has occur: '
ret += str(e)
return ret
# Run the Webserver
if __name__ == '__main__':
# Lock table
cursor.execute('LOCK TABLE IDS READ')
cursor.execute('LOCK TABLE IDS WRITE')
# Running
app.run(debug = False, host = '0.0.0.0', port = 8000, threaded = True)
# Make sure data is committed to the database
cnx.commit()
cursor.close()
cnx.close()