OpenDroneMap-WebODM/app/tests/scripts/simple_auth_server.py

97 wiersze
3.1 KiB
Python

import http.server
from http.server import SimpleHTTPRequestHandler
import socketserver
import sys
import threading
from time import sleep
import json
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes("Simple auth server is running", encoding="utf-8"))
def send_error(self, code, error):
self.send_json(code, {"error": error})
def send_json(self, code, data):
response = bytes(json.dumps(data), encoding="utf-8")
self.send_response(200)
self.send_header('Content-type','application/json')
self.send_header('Content-length', len(response))
self.end_headers()
self.wfile.write(response)
def do_POST(self):
if self.path == '/auth':
if not 'Content-Length' in self.headers:
self.send_error(403, "Missing form data")
return
content_length = int(self.headers['Content-Length'])
post_data_str = self.rfile.read(content_length).decode("utf-8")
post_data = {}
for item in post_data_str.split('&'):
k,v = item.split('=')
post_data[k] = v
username = post_data.get("username")
password = post_data.get("password")
print("Login request for " + username)
if username == "extuser1" and password == "test1234":
print("Granted")
self.send_json(200, {
'user_id': 100,
'username': 'extuser1',
'maxQuota': 500,
'node': {
'hostname': 'localhost',
'port': 4444,
'token': 'test'
}
})
else:
print("Unauthorized")
return self.send_error(401, "unauthorized")
else:
self.send_error(404, "not found")
class WebServer(threading.Thread):
def __init__(self):
super().__init__()
self.host = "0.0.0.0"
self.port = int(sys.argv[1]) if len(sys.argv) >= 2 else 8080
self.ws = socketserver.TCPServer((self.host, self.port), MyHandler)
def run(self):
print("WebServer started at Port:", self.port)
self.ws.serve_forever()
def shutdown(self):
# set the two flags needed to shutdown the HTTP server manually
# self.ws._BaseServer__is_shut_down.set()
# self.ws.__shutdown_request = True
print('Shutting down server.')
# call it anyway, for good measure...
self.ws.shutdown()
print('Closing server.')
self.ws.server_close()
self.join()
if __name__=='__main__':
webServer = WebServer()
webServer.start()
while True:
try:
sleep(0.5)
except KeyboardInterrupt:
print('Keyboard Interrupt sent.')
webServer.shutdown()
exit(0)