| #!/usr/bin/env python3 |
| |
| import os |
| import sys |
| from urllib.parse import parse_qs |
| |
| def contentType(path): |
| if path.endswith('.html'): |
| return 'text/html' |
| if path.endswith('.manifest'): |
| return 'text/cache-manifest' |
| if path.endswith('.js'): |
| return 'text/javascript' |
| if path.endswith('.xml'): |
| return 'application/xml' |
| if path.endswith('.xhtml'): |
| return 'application/xhtml+xml' |
| if path.endswith('.svg'): |
| return 'application/svg+xml' |
| if path.endswith('.xsl'): |
| return 'application/xslt+xml' |
| if path.endswith('.gif'): |
| return 'image/gif' |
| if path.endswith('.jpg'): |
| return 'image/jpeg' |
| if path.endswith('.png'): |
| return 'image/png' |
| return 'text/plain' |
| |
| referer = os.environ.get('HTTP_REFERER', '') |
| |
| query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True) |
| path = query.get('path', [''])[0] |
| expected_referer = query.get('expected-referer', [''])[0] |
| |
| if expected_referer == referer and os.path.isfile(path): |
| sys.stdout.write( |
| 'status: 200\r\n' |
| 'Cache-control: no-store\r\n' |
| f'Content-Type: {contentType(path)}\r\n\r\n' |
| ) |
| |
| sys.stdout.flush() |
| with open(os.path.join(os.path.dirname(__file__), path), 'rb') as file: |
| sys.stdout.buffer.write(file.read()) |
| else: |
| sys.stdout.write( |
| 'status: 404\r\n' |
| 'Content-Type: text/html\r\n\r\n' |
| ) |