zhongrj
2025-11-25 b89962006164a462404b79a738bee8cbb6d7fe7e
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
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)