Project

General

Profile

« Previous | Next » 

Revision 591c48a6

Added by jahoti about 2 years ago

Make test suite mildly usable

Allow test/server.py to be run as a command and add some "webpages" for it.

View differences:

test/server.py
1
#!/usr/bin/env python3
2
#
1 3
# Copyright (C) 2021 jahoti <jahoti@tilde.team>
2 4
# Licensing information is collated in the `copyright` file
3 5

  
......
6 8
wrapping the classes in proxy_core.py
7 9
"""
8 10

  
9
from proxy_core import *
11
import proxy_core
10 12
from urllib.parse import parse_qs
13
from misc_constants import *
14
from world_wide_library import catalog as internet
11 15

  
12
internet = {} # Add info here later
13
mime_types = {
14
	"7z": "application/x-7z-compressed",	"oga": "audio/ogg",
15
	"abw": "application/x-abiword",		"ogv": "video/ogg",
16
	"arc": "application/x-freearc",		"ogx": "application/ogg",
17
	"bin": "application/octet-stream",	"opus": "audio/opus",
18
	"bz": "application/x-bzip",		"otf": "font/otf",
19
	"bz2": "application/x-bzip2",		"pdf": "application/pdf",
20
	"css": "text/css",			"png": "image/png",
21
	"csv": "text/csv",			"sh": "application/x-sh",
22
	"gif": "image/gif",			"svg": "image/svg+xml",
23
	"gz": "application/gzip",		"tar": "application/x-tar",
24
	"htm": "text/html",			"ts": "video/mp2t",
25
	"html": "text/html",			"ttf": "font/ttf",
26
	"ico": "image/vnd.microsoft.icon",	"txt": "text/plain",
27
	"js": "text/javascript",		"wav": "audio/wav",
28
	"jpeg": "image/jpeg",			"weba": "audio/webm",
29
	"jpg": "image/jpeg",			"webm": "video/webm",
30
	"json": "application/json",		"woff": "font/woff",	
31
	"mjs": "text/javascript",		"woff2": "font/woff2",
32
	"mp3": "audio/mpeg",			"xhtml": "application/xhtml+xml",
33
	"mp4": "video/mp4",			"zip": "application/zip",
34
	"mpeg": "video/mpeg",
35
	"odp": "application/vnd.oasis.opendocument.presentation",
36
	"ods": "application/vnd.oasis.opendocument.spreadsheet",
37
	"odt": "application/vnd.oasis.opendocument.text",
38
	"xml": "application/xml" # text/xml if readable from casual users
39
}
40

  
41
class RequestHijacker(ProxyRequestHandler):
42
	certdir = global_certdir
43
	
16
class RequestHijacker(proxy_core.ProxyRequestHandler):
44 17
	def handle_request(self, req_body):
45 18
		path_components = self.path.split('?', maxsplit=1)
46 19
		path = path_components[0]
......
103 76

  
104 77
def do_an_internet(certdir, port):
105 78
	"""Start up the proxy/server"""
106
	global global_certdir
107
	global_certdir = certdir
108
	
109
	httpd = ThreadingHTTPServer(('', port), RequestHijacker)
79
	proxy_core.certdir = certdir
80
	httpd = proxy_core.ThreadingHTTPServer(('', port), RequestHijacker)
110 81
	httpd.serve_forever()
82

  
83
if __name__ == '__main__':
84
	import sys
85
	def fail(msg, error_code):
86
		print('Error:', msg)
87
		print('Usage:', sys.argv[0], '[certificates directory] (port)')
88
		sys.exit(error_code)
89
	
90
	if len(sys.argv) < 2:
91
		fail('missing required argument "certificates directory".', 1)
92
	
93
	certdir = sys.argv[1]
94
	if not proxy_core.os.path.isdir(certdir):
95
		fail('selected certificate directory does not exist.', 2)
96
	
97
	port = sys.argv[2] if len(sys.argv) > 2 else '1337'
98
	if not port.isnumeric():
99
		fail('port must be an integer.', 3)
100
	
101
	do_an_internet(certdir, int(port))

Also available in: Unified diff