Update default index file

This commit is contained in:
Michael Lazar 2019-08-23 09:45:24 -04:00
parent 1066d39125
commit fea2d91d1e
2 changed files with 22 additions and 6 deletions

View File

@ -1,5 +1,12 @@
# Jetforce Changelog # Jetforce Changelog
### Unreleased
- Files with the ".gemini" extension are now recognized as text/gemini.
- The default index file has been changed from ".gemini" to "index.gmi".
- Added a new --index-file flag that can be used to customize the name of the
gemini file that will be served when a directory is requested.
### v0.0.6 (2019-08-22) ### v0.0.6 (2019-08-22)
- Significant refactoring of the base application interface. - Significant refactoring of the base application interface.

View File

@ -198,13 +198,15 @@ class StaticDirectoryApplication(JetforceApplication):
directory listing will be auto-generated. directory listing will be auto-generated.
""" """
def __init__(self, directory: str = "/var/gemini"): def __init__(self, directory: str = "/var/gemini", index_file: str = "index.gmi"):
super().__init__() super().__init__()
self.routes.append((RoutePattern(), self.serve_static_file)) self.routes.append((RoutePattern(), self.serve_static_file))
self.root = pathlib.Path(directory).resolve(strict=True) self.root = pathlib.Path(directory).resolve(strict=True)
self.index_file = index_file
self.mimetypes = mimetypes.MimeTypes() self.mimetypes = mimetypes.MimeTypes()
self.mimetypes.add_type("text/gemini", ".gmi") self.mimetypes.add_type("text/gemini", ".gmi")
self.mimetypes.add_type("text/gemini", ".gemini")
def serve_static_file(self, request: Request): def serve_static_file(self, request: Request):
@ -222,9 +224,9 @@ class StaticDirectoryApplication(JetforceApplication):
generator = self.load_file(filesystem_path) generator = self.load_file(filesystem_path)
return Response(Status.SUCCESS, mimetype, generator) return Response(Status.SUCCESS, mimetype, generator)
elif filesystem_path.is_dir(): elif filesystem_path.is_dir():
gemini_file = filesystem_path / ".gemini" index_file = filesystem_path / self.index_file
if gemini_file.exists(): if index_file.exists():
generator = self.load_file(gemini_file) generator = self.load_file(index_file)
else: else:
generator = self.list_directory(url_path, filesystem_path) generator = self.list_directory(url_path, filesystem_path)
return Response(Status.SUCCESS, "text/gemini", generator) return Response(Status.SUCCESS, "text/gemini", generator)
@ -519,10 +521,17 @@ def run_server() -> None:
Entry point for running the command line static directory server. Entry point for running the command line static directory server.
""" """
parser = command_line_parser() parser = command_line_parser()
parser.add_argument("--dir", help="local directory to serve", default="/var/gemini") parser.add_argument(
"--dir", help="Path on the filesystem to serve", default="/var/gemini"
)
parser.add_argument(
"--index-file",
help="The gemini directory index file [i.e. index.html]",
default="index.gmi",
)
args = parser.parse_args() args = parser.parse_args()
app = StaticDirectoryApplication(args.dir) app = StaticDirectoryApplication(args.dir, args.index_file)
server = GeminiServer( server = GeminiServer(
host=args.host, host=args.host,
port=args.port, port=args.port,