6
6
from flask import Flask , request , send_from_directory
7
7
8
8
9
+ # Set up scheduler
9
10
sched = BackgroundScheduler (timezone = "UTC" )
10
11
sched .start ()
11
12
17
18
app .config .from_pyfile ("config.py" )
18
19
19
20
21
+ # Views
22
+
20
23
@app .route ("/" )
21
24
def index ():
22
25
return app .send_static_file ("index.html" )
@@ -36,7 +39,7 @@ def announce():
36
39
if ip .startswith ("::ffff:" ):
37
40
ip = ip [7 :]
38
41
39
- data = request .form [ "json" ] if request . method == "POST" else request . args ["json" ]
42
+ data = request .values ["json" ]
40
43
41
44
if len (data ) > 5000 :
42
45
return "JSON data is too big." , 413
@@ -52,7 +55,11 @@ def announce():
52
55
if not "action" in server :
53
56
return "Missing action field." , 400
54
57
55
- if server ["action" ] == "start" :
58
+ action = server ["action" ]
59
+ if action not in ("start" , "update" , "delete" ):
60
+ return "Invalid action field." , 400
61
+
62
+ if action == "start" :
56
63
server ["uptime" ] = 0
57
64
58
65
server ["ip" ] = ip
@@ -65,9 +72,9 @@ def announce():
65
72
server ["port" ] = int (server ["port" ])
66
73
#### End compatability code ####
67
74
68
- old = serverList .get (server [ "ip" ] , server ["port" ])
75
+ old = serverList .get (ip , server ["port" ])
69
76
70
- if server [ " action" ] == "delete" :
77
+ if action == "delete" :
71
78
if not old :
72
79
return "Server not found." , 500
73
80
serverList .remove (old )
@@ -76,7 +83,7 @@ def announce():
76
83
elif not checkRequest (server ):
77
84
return "Invalid JSON data." , 400
78
85
79
- if server [ " action" ] != "start " and not old :
86
+ if action == "update " and not old :
80
87
if app .config ["ALLOW_UPDATE_WITHOUT_OLD" ]:
81
88
old = server
82
89
old ["start" ] = time .time ()
@@ -88,15 +95,15 @@ def announce():
88
95
89
96
server ["update_time" ] = time .time ()
90
97
91
- server ["start" ] = time .time () if server [ " action" ] == "start" else old ["start" ]
98
+ server ["start" ] = time .time () if action == "start" else old ["start" ]
92
99
93
100
if "clients_list" in server :
94
101
server ["clients" ] = len (server ["clients_list" ])
95
102
96
103
server ["clients_top" ] = max (server ["clients" ], old ["clients_top" ]) if old else server ["clients" ]
97
104
98
105
# Make sure that startup options are saved
99
- if server [ " action" ] != "start " :
106
+ if action == "update " :
100
107
for field in ("dedicated" , "rollback" , "mapgen" , "privs" ,
101
108
"can_see_far_names" , "mods" ):
102
109
if field in old :
@@ -117,11 +124,10 @@ def announce():
117
124
118
125
return "Thanks, your request has been filed." , 202
119
126
120
- def purgeOld ():
121
- serverList .purgeOld ()
122
-
123
- sched .add_job (purgeOld , "interval" , seconds = 60 , coalesce = True , max_instances = 1 )
127
+ sched .add_job (lambda : serverList .purgeOld (), "interval" ,
128
+ seconds = 60 , coalesce = True , max_instances = 1 )
124
129
130
+ # Utilities
125
131
126
132
# Returns ping time in seconds (up), False (down), or None (error).
127
133
def serverUp (info ):
@@ -194,7 +200,7 @@ def checkRequest(server):
194
200
# Accept strings in boolean fields but convert it to a
195
201
# boolean, because old servers sent some booleans as strings.
196
202
if data [1 ] == "bool" and type (server [name ]).__name__ == "str" :
197
- server [name ] = True if server [name ].lower () in [ "true" , "1" ] else False
203
+ server [name ] = True if server [name ].lower () in ( "true" , "1" ) else False
198
204
continue
199
205
# clients_max was sent as a string instead of an integer
200
206
if name == "clients_max" and type (server [name ]).__name__ == "str" :
0 commit comments