.BANCHO. Add api handlers
This commit is contained in:
parent
15933ce962
commit
f6be15fa59
|
@ -59,3 +59,6 @@ class banchoRestartingException(Exception):
|
||||||
|
|
||||||
class apiException(Exception):
|
class apiException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class invalidArgumentsException(Exception):
|
||||||
|
pass
|
||||||
|
|
35
handlers/apiIsOnlineHandler.py
Normal file
35
handlers/apiIsOnlineHandler.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
from helpers import requestHelper
|
||||||
|
from constants import exceptions
|
||||||
|
import json
|
||||||
|
from objects import glob
|
||||||
|
|
||||||
|
class handler(requestHelper.asyncRequestHandler):
|
||||||
|
def asyncGet(self):
|
||||||
|
statusCode = 400
|
||||||
|
data = {"message": "unknown error"}
|
||||||
|
try:
|
||||||
|
# Check arguments
|
||||||
|
if requestHelper.checkArguments(self.request.arguments, ["u"]) == False:
|
||||||
|
raise exceptions.invalidArgumentsException()
|
||||||
|
|
||||||
|
# Get online staus
|
||||||
|
username = self.get_argument("u")
|
||||||
|
if username == None:
|
||||||
|
data["result"] = False
|
||||||
|
else:
|
||||||
|
data["result"] = True if glob.tokens.getTokenFromUsername(username) != None else False
|
||||||
|
|
||||||
|
# Status code and message
|
||||||
|
statusCode = 200
|
||||||
|
data["message"] = "ok"
|
||||||
|
except exceptions.invalidArgumentsException:
|
||||||
|
statusCode = 400
|
||||||
|
data["message"] = "missing required arguments"
|
||||||
|
finally:
|
||||||
|
# Add status code to data
|
||||||
|
data["status"] = statusCode
|
||||||
|
|
||||||
|
# Send response
|
||||||
|
self.clear()
|
||||||
|
self.set_status(statusCode)
|
||||||
|
self.finish(json.dumps(data))
|
23
handlers/apiOnlineUsersHandler.py
Normal file
23
handlers/apiOnlineUsersHandler.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from helpers import requestHelper
|
||||||
|
import json
|
||||||
|
from objects import glob
|
||||||
|
|
||||||
|
class handler(requestHelper.asyncRequestHandler):
|
||||||
|
def asyncGet(self):
|
||||||
|
statusCode = 400
|
||||||
|
data = {"message": "unknown error"}
|
||||||
|
try:
|
||||||
|
# Get online users count
|
||||||
|
data["result"] = len(glob.tokens.tokens)
|
||||||
|
|
||||||
|
# Status code and message
|
||||||
|
statusCode = 200
|
||||||
|
data["message"] = "ok"
|
||||||
|
finally:
|
||||||
|
# Add status code to data
|
||||||
|
data["status"] = statusCode
|
||||||
|
|
||||||
|
# Send response
|
||||||
|
self.clear()
|
||||||
|
self.set_status(statusCode)
|
||||||
|
self.finish(json.dumps(data))
|
23
handlers/apiServerStatusHandler.py
Normal file
23
handlers/apiServerStatusHandler.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from helpers import requestHelper
|
||||||
|
import json
|
||||||
|
from objects import glob
|
||||||
|
|
||||||
|
class handler(requestHelper.asyncRequestHandler):
|
||||||
|
def asyncGet(self):
|
||||||
|
statusCode = 400
|
||||||
|
data = {"message": "unknown error"}
|
||||||
|
try:
|
||||||
|
# Get online users count
|
||||||
|
data["result"] = -1 if glob.restarting == True else 1
|
||||||
|
|
||||||
|
# Status code and message
|
||||||
|
statusCode = 200
|
||||||
|
data["message"] = "ok"
|
||||||
|
finally:
|
||||||
|
# Add status code to data
|
||||||
|
data["status"] = statusCode
|
||||||
|
|
||||||
|
# Send response
|
||||||
|
self.clear()
|
||||||
|
self.set_status(statusCode)
|
||||||
|
self.finish(json.dumps(data))
|
39
handlers/ciTriggerHandler.py
Normal file
39
handlers/ciTriggerHandler.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
from helpers import requestHelper
|
||||||
|
from constants import exceptions
|
||||||
|
import json
|
||||||
|
from objects import glob
|
||||||
|
from helpers import consoleHelper
|
||||||
|
from constants import bcolors
|
||||||
|
from helpers import systemHelper
|
||||||
|
|
||||||
|
class handler(requestHelper.asyncRequestHandler):
|
||||||
|
def asyncGet(self):
|
||||||
|
statusCode = 400
|
||||||
|
data = {"message": "unknown error"}
|
||||||
|
try:
|
||||||
|
# Check arguments
|
||||||
|
if requestHelper.checkArguments(self.request.arguments, ["k"]) == False:
|
||||||
|
raise exceptions.invalidArgumentsException()
|
||||||
|
|
||||||
|
# Check ci key
|
||||||
|
key = self.get_argument("k")
|
||||||
|
if key is None or key != glob.conf.config["ci"]["key"]:
|
||||||
|
raise exceptions.invalidArgumentsException()
|
||||||
|
|
||||||
|
consoleHelper.printColored("[!] Ci event triggered!!", bcolors.PINK)
|
||||||
|
systemHelper.scheduleShutdown(5, False, "A new Bancho update is available and the server will be restarted in 5 seconds. Thank you for your patience.")
|
||||||
|
|
||||||
|
# Status code and message
|
||||||
|
statusCode = 200
|
||||||
|
data["message"] = "ok"
|
||||||
|
except exceptions.invalidArgumentsException:
|
||||||
|
statusCode = 400
|
||||||
|
data["message"] = "invalid ci key"
|
||||||
|
finally:
|
||||||
|
# Add status code to data
|
||||||
|
data["status"] = statusCode
|
||||||
|
|
||||||
|
# Send response
|
||||||
|
self.clear()
|
||||||
|
self.set_status(statusCode)
|
||||||
|
self.finish(json.dumps(data))
|
78
pep.py
78
pep.py
|
@ -16,81 +16,25 @@ from helpers import discordBotHelper
|
||||||
from objects import glob
|
from objects import glob
|
||||||
from objects import fokabot
|
from objects import fokabot
|
||||||
from objects import banchoConfig
|
from objects import banchoConfig
|
||||||
from handlers import mainHandler
|
|
||||||
from helpers import consoleHelper
|
from helpers import consoleHelper
|
||||||
from helpers import databaseHelperNew
|
from helpers import databaseHelperNew
|
||||||
from helpers import generalFunctions
|
from helpers import generalFunctions
|
||||||
|
|
||||||
|
from handlers import mainHandler
|
||||||
|
from handlers import apiIsOnlineHandler
|
||||||
|
from handlers import apiOnlineUsersHandler
|
||||||
|
from handlers import apiServerStatusHandler
|
||||||
|
from handlers import ciTriggerHandler
|
||||||
|
|
||||||
def make_app():
|
def make_app():
|
||||||
return tornado.web.Application([
|
return tornado.web.Application([
|
||||||
(r"/", mainHandler.handler)
|
(r"/", mainHandler.handler),
|
||||||
|
(r"/api/v1/isOnline", apiIsOnlineHandler.handler),
|
||||||
|
(r"/api/v1/onlineUsers", apiOnlineUsersHandler.handler),
|
||||||
|
(r"/api/v1/serverStatus", apiServerStatusHandler.handler),
|
||||||
|
(r"/api/v1/ciTrigger", ciTriggerHandler.handler),
|
||||||
])
|
])
|
||||||
|
|
||||||
# Ci trigger
|
|
||||||
'''@app.route("/ci-trigger")
|
|
||||||
@app.route("/api/ci-trigger")
|
|
||||||
def ciTrigger():
|
|
||||||
# Ci restart trigger
|
|
||||||
|
|
||||||
# Get ket from GET
|
|
||||||
key = flask.request.args.get('k')
|
|
||||||
|
|
||||||
# Get request ip
|
|
||||||
requestIP = flask.request.headers.get('X-Real-IP')
|
|
||||||
if requestIP == None:
|
|
||||||
requestIP = flask.request.remote_addr
|
|
||||||
|
|
||||||
# Check key
|
|
||||||
if key is None or key != glob.conf.config["ci"]["key"]:
|
|
||||||
consoleHelper.printColored("[!] Invalid ci trigger from {}".format(requestIP), bcolors.RED)
|
|
||||||
return flask.jsonify({"response" : "-1"})
|
|
||||||
|
|
||||||
# Ci event triggered, schedule server shutdown
|
|
||||||
consoleHelper.printColored("[!] Ci event triggered from {}".format(requestIP), bcolors.PINK)
|
|
||||||
systemHelper.scheduleShutdown(5, False, "A new Bancho update is available and the server will be restarted in 5 seconds. Thank you for your patience.")
|
|
||||||
|
|
||||||
return flask.jsonify({"response" : 1})
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/api/server-status")
|
|
||||||
def serverStatus():
|
|
||||||
# Server status api
|
|
||||||
# 1: Online
|
|
||||||
# -1: Restarting
|
|
||||||
return flask.jsonify({
|
|
||||||
"response" : 200,
|
|
||||||
"status" : -1 if glob.restarting == True else 1
|
|
||||||
})
|
|
||||||
|
|
||||||
@app.route("/api/v1/isOnline")
|
|
||||||
def apiIsOnline():
|
|
||||||
username = request.args.get("u")
|
|
||||||
if username == None:
|
|
||||||
result = False
|
|
||||||
else:
|
|
||||||
token = glob.tokens.getTokenFromUsername(username)
|
|
||||||
result = True if token != None else False
|
|
||||||
return flask.jsonify({
|
|
||||||
"result": result
|
|
||||||
})
|
|
||||||
|
|
||||||
@app.route("/api/v1/onlineUsers")
|
|
||||||
def apiOnlineUsers():
|
|
||||||
return flask.jsonify({
|
|
||||||
"result": len(glob.tokens.tokens)
|
|
||||||
})
|
|
||||||
|
|
||||||
# Main bancho server
|
|
||||||
@app.route("/", methods=['GET', 'POST'])
|
|
||||||
def banchoServer():
|
|
||||||
if flask.request.method == 'POST':
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
|
||||||
# Not a POST request, send html page
|
|
||||||
return responseHelper.HTMLResponse()'''
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# Server start
|
# Server start
|
||||||
consoleHelper.printServerStartHeader(True)
|
consoleHelper.printServerStartHeader(True)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user