gemini+submit:// (was Re: Uploading Gemini content)

Luke Emmet luke at marmaladefoo.com
Sat Jun 13 14:06:48 BST 2020


Hi everyone

I've been thinking some more about this self-editing wiki concept, which 
seems a great application to support writers of Gemini content. I think 
there is an opportunity for a very simple addition to Gemini that would 
support client based content submission.

The mental model is quite simple - imagine a simple web page, having a 
single text area and a single submit button. The user can edit the text 
and submit the content. The client knows where to send the content (form 
attribute) and how to send it (HTTP protocol using POST).

Exactly what the name for this doesnt really matter, and it will need to 
integrate with the authentication/certificates mechanisms we already are 
establishing.

Essentially there are a number of new elements

1. New scheme extending gemini, only for those that want to. This is not 
gemini, but something else. Whether it gets considered for gemini is a 
separate conversation.

2. An extended client behaviour working with the preformatted text 
regions having suitable markers to be defined

3. A simple text submit protocol (text/plain only, UTF-8 only)

The elements could look like this

1. The scheme name is gemini+submit:// or something, doesnt really 
matter, but is distinct from gemini://.

2. Using the preformatted regions to specify the URL end point to post 
to. Only end points having gemini+submit:// as the scheme would have an 
active behaviour. This is done in a backwards compatible way so simpler 
clients just render the content as preformatted text

Note we use 4 back ticks to convey that the content may be edited and 
submitted. There could be some other option to indicate this, the syntax 
marker is not significant, can be changed to ```! or something else. 
This gracefully degrades and is valid text/gemini

````gemini+submit://domain/end-point/handler?any-params-you-like-probably-includes-asset-id-or-path

```` (could be 3 or 4 doesnt really matter)

the 4 back ticks mean existing clients will just show the text.

The URI will probably contain information for the server to know where 
to put the content such as:

asset-id=1234ae4f34ae

or

path=/path/on/filesystem/to/file.gmi

3. The client allows the user to edit the content and then "submit" 
(button or whatever) the content to the end point as follows:

CONTENTLENGTH<SPACE>FULL_URI_FROM_TEXT_AREA<CR><LF>
<client sends the byte content>
<client closes connection>

Only text/plain is ever sent so we don't need to specify mime type. 
Simple and restricted.
Only UTF is ever sent, so we dont need to specify it. Simple and restricted.

There is only ever one "block" of text submitted, which is the content 
of the preformatted area (no multi-field forms).

The end point on the server knows when content has arrived as the 
content length is pre-notified in the header, replies with redirect to 
success page probably.

server may also respond requesting input,certificates

on the server, the end point might be inside the server or could be a 
CGI or similar application that might get the content via stdin (as per 
POST for HTTP)

It would be nice to adopt a common scheme for this together with 
gemini+put:// (for arbitrary binary upload) and gemini+delete:// 
suggestions suggested earlier on this thread. For example to integrate 
certificates, success or failure etc.

Potentially this scheme can be used to edit simple text content of a 
number of back end applications.

There are no changes need to any client or server that is not interested 
to implement this.

I think this has a similar simplicity to the spirit of Gemini and does 
not open huge doors for a horse and cart to come through.

Best Wishes

  - Luke


More information about the Gemini mailing list