diff options
author | Juan J. MartÃnez <jjm@usebox.net> | 2021-07-20 19:24:39 +0000 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2021-07-22 19:49:53 +0100 |
commit | a13c87ea9b0fae2a38adead85cb97e6c5e31c6d8 (patch) | |
tree | e60a35310a2a9f120a5c3e769ea862e950d322f5 /README.md | |
parent | ab4a5268bd2971a364bf026aede2cb50c885a03d (diff) | |
parent | c760d7c9bd14d7e56ae1553a0b3c4a1258448686 (diff) | |
download | spacebeans-a13c87ea9b0fae2a38adead85cb97e6c5e31c6d8.tar.gz spacebeans-a13c87ea9b0fae2a38adead85cb97e6c5e31c6d8.zip |
Merge branch 'cgi-suport-wip' into 'master'
CGI support
See merge request reidrac/spacebeans!1
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -90,6 +90,48 @@ secret used when importing the certificate. CA signed certificates don't play well with TOFU, but if the client is properly validating the certificate, this is perfectly safe. +## CGI support + +Classic CGI is supported via the `allow-cgi` flag in the `directories` directive. + +The flag only affects to the specified directory. + +The environment variables provided to the CGIs are: + +| Variable | Example | +| --- | --- | +| REMOTE_ADDR | `127.0.0.1` | +| SERVER_PORT | `1965` | +| GEMINI_URL | `gemini://localhost/mycgi/example/path?test=1` | +| REMOTE_HOST | `127.0.0.1` | +| SERVER_PROTOCOL | `GEMINI` | +| SERVER_SOFTWARE | `spacebeans/v1.1.3` | +| SCRIPT_NAME | `mycgi` | +| SERVER_NAME | `localhost` | +| PATH_INFO | `/example/path` | +| GATEWAY_INTERFACE | `CGI/1.1` | +| QUERY_STRING | `test=1` | + +These are described in [RFC-3875](https://datatracker.ietf.org/doc/html/rfc3875). + +The server expects: + +- the CGI must terminate with exit code `0` (success) +- the response will be in CGI's standard output +- it **must** be a valid Gemini response + +An example of a CGI script written in Python that outputs the environment +variables could be: + +```python +#!/usr/bin/env python3 + +import os + +print("20 text/gemini\r\n") +print('\n'.join([k + "=" + v for k, v in os.environ.items()])) +``` + ## Development Requirements: |