💾 Archived View for gemi.dev › gemini-mailing-list › 000911.gmi captured on 2024-05-26 at 16:56:36. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-12-28)
-=-=-=-=-=-=-
Hope you're well! A couple of weeks ago I sent out a notice regarding a piece of Gemini server software I'd developed. This is an update in regards to how that project has been progressing. https://sr.ht/~panda-roux/MoonGem/ gemini://gemini.panda-roux.dev/moongem I'm considering MoonGem to be "basically finished" for now. There are a couple of luxuries I'd like to add, but it's essentially feature-complete as far as I'm concerned. As of version 1.3.1, the following features have been added in addition to refactoring and code cleanup: Scripting API features (and corresponding Lua method signatures): * Input handling o HEAD:get_input([prompt]) o HEAD:get_sensitive_input([prompt]) * Specifying a language header part o HEAD:set_lang(<language>) * Client certificate handling o HEAD:get_cert([prompt]) o HEAD:has_cert() o Currently a fingerprint and not_after fields are captured. Server features: * Buffered responses for non-gemtext files (i.e. static files are sent piecemeal) * Specify a non-standard port via the MOONGEM_PORT environment variable * Sanitized URI paths * Proper request logging o Example: [::ffff:127.0.0.1:54502] /moongem | 32 header + 3639 body bytes sent (total: 3671) * Request pipeline logic that can be interrupted by script method calls requiring an irregular response code o i.e. if a script calls HEAD:get_input() and there's no input in the request URI, the server will drop what it's doing and return a 1X code (and prompt META) immediately. The following are nice-to-have features that I would like to add in the future: * Automatic directory listing o Implementing this in Lua is trivial but it'd be nice to have the server handle it * Expose more information from client certificates to the scripting API * Rate-limiting * Some sort of mechanism for response caching o Not worth the headache of trying to do this correctly at the moment * Some sort of fancy URI variable binding (thinking of ASP.NET's routing, e.g. "/posts/{postId}/{commentId}") Thank you for reading! Any and all feedback is appreciated. panda-roux
---