diff --git a/gegobi.py b/gegobi.py index 1789fca..5bd7528 100755 --- a/gegobi.py +++ b/gegobi.py @@ -41,7 +41,16 @@ class GegobiHandler(socketserver.BaseRequestHandler): self.send_gemini_header(50, "This server does not proxy requests.") return # Resolve path to filesystem - local_path = os.path.join(self.server.args.base, urllib.parse.unquote(self.request_path)) + if self.request_path.startswith("~") or self.request_path.startswith("/~") and self.server.args.tilde: + if self.request_path.startswith("/"): + self.request_path = self.request_path[1:] + bits = self.request_path.split(os.sep) + bits.insert(1, self.server.args.tilde) + bits.insert(0, os.sep + "home") + local_path = os.path.join(*bits) + else: + local_path = os.path.join(self.server.args.base, urllib.parse.unquote(self.request_path)) + print(local_path) # Handle not founds if not os.path.exists(local_path): self.send_gemini_header(51, "Not found.") @@ -249,6 +258,8 @@ Gemini protocol as well, resulting in "Gemini-Gopher bi-hosting" help='Serve only on 127.0.0.1.') parser.add_argument('--port', type=int, nargs="?", default=1965, help='TCP port to serve on.') + parser.add_argument('--tilde', type=str, nargs="?", default="", + help='Home subdirectory to map tilde URLs to.') args = parser.parse_args() if not (os.path.exists(args.cert) and os.path.exists(args.key)):