Status update for MoonGem - Gemini server with inline Lua scripting

panda-roux <contact (a) panda-roux.dev>

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

Link to individual message.

---

Previous Thread: [ANN] [tech] Romulus Gemini Client

Next Thread: [users] kiln version 0.2.0