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