Status update for MoonGem - Gemini server with inline Lua scripting
panda-roux
contact at panda-roux.dev
Thu May 20 18:47:44 BST 2021
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0x44DDD4AEE37FA6A8.asc
Type: application/pgp-keys
Size: 5149 bytes
Desc: OpenPGP public key
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20210520/95f25d6a/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20210520/95f25d6a/attachment-0001.sig>
More information about the Gemini
mailing list