Skip to main content

Extensible Gemini/Titan server

Project description

GmCapsule is an extensible server for Gemini and Titan.

See the User manual for configuration and usage instructions.

Installation

Install "gmcapsule" via pip:

pip install gmcapsule

Then run the server daemon:

gmcapsuled

Running via systemd

Create the following service file and save it as ~/.config/systemd/user/gmcapsule.service:

[Unit]
Description=GmCapsule: extensible Gemini/Titan server
After=network.target

[Service]
Type=simple
ExecStart=<YOUR-INSTALL-PATH>/gmcapsuled
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
Environment="PYTHONUNBUFFERED=1"
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=gmcapsule

[Install]
WantedBy=default.target

Replace <YOUR-INSTALL-PATH> with the actual path of gmcapsuled. pip will install it in a directory on your PATH.

Then you can do the usual:

systemctl --user daemon-reload
systemctl --user enable gmcapsule
systemctl --user start gmcapsule

The log can be viewed via journalctl (or syslog):

journalctl -xe --user-unit=gmcapsule

Change log

v0.6

  • Added stream to the [cgi.*] section to enable streaming output mode where the output of the CGI child process is immediately sent to the client without any buffering. Streaming is not supported if the server is using multiple processes.
  • Markdown: Fixed handling of alt text in preformatted blocks (patch by Mike Cifelli).

v0.5

  • Added processes to the [server] section to configure how many request handler processes are started.
  • Extension modules can register new protocols in addition to the built-in Gemini and Titan.
  • SIGHUP causes the configuration file to be reloaded and workers to be restarted. The listening socket remains open, so the socket and TLS parameters cannot be changed.
  • API change: Extension modules get initialized separately in each worker thread. Instead of a Capsule, the extension module init method is passed a Context. Capsule is no longer available as global state.
  • API change: Identity no longer contains OpenSSL objects for the certificate and public key. Instead, they are provided as serialized in DER format.

v0.5.1:

  • Identity class is available when importing the gmcapsule module.

v0.5.2:

  • Fixed error in the "rewrite" module (Codeberg PR #1).

v0.5.3:

  • Enable address reuse on the server socket for unimpeded restarting (Codeberg PR #3).

v0.4

  • Added built-in module "rewrite" that matches regular expressions against the request path and can rewrite the path or return a custom status for redirection, "Gone" messages, or other exceptional situations.
  • Extension module load order is determined after locating all modules from all directories. Previously, the order was local to each directory.
  • Added a new configuration section [priority] for overriding default module priorities determined from file names. This is useful for changing the priority of the built-in modules.

v0.4.1:

  • Rewrite: Request query string can be included in a status using the ${QUERY_STRING} variable.

v0.3

  • Added a shutdown event for custom background workers.
  • Request.query is None if there is no query string present. Previously, the query string was an empty string in this case. This allows making a distinction between empty and absent query strings.

v0.3.1:

  • CGI: Fixed handling of a missing query string.

v0.3.2:

  • GitView: Fixed processing of Git commit history when a message contains backslashes.

v0.2

  • Added [cgi] bin_root configuration option for automatically and dynamically mapping all executables in a directory tree to URL entry points.
  • Minor documentation updates.
  • Published on PyPi as "gmcapsule".

v0.2.1:

  • Fixed error handling. Exceptions are now caught and the error message is printed.

v0.2.2:

  • Reduced required Python version to 3.6 (f-strings).
  • Added systemd instructions.

v0.2.3:

  • Requests exceeding 1024 bytes should result in an error code and not just be ignored.
  • Respond with an error code to malformed UTF-8 in the request.
  • Verify that the port number in the request URI matches the server's port.

v0.2.4:

  • Fixed an error in the Markdown parser.

v0.2.5:

  • Fixed handling of exceptions from request handler, and print a traceback.
  • Fixed importlib error with Python 3.11.

v0.1

  • Initial public release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gmcapsule-0.6.1.tar.gz (28.8 kB view details)

Uploaded Source

Built Distribution

gmcapsule-0.6.1-py3-none-any.whl (32.7 kB view details)

Uploaded Python 3

File details

Details for the file gmcapsule-0.6.1.tar.gz.

File metadata

  • Download URL: gmcapsule-0.6.1.tar.gz
  • Upload date:
  • Size: 28.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.1

File hashes

Hashes for gmcapsule-0.6.1.tar.gz
Algorithm Hash digest
SHA256 7dddf2eff1277b6570d0ebc59569003d14dfe877ae1407b814baf83aefa12fcc
MD5 8984472134c829cfbb7c448511615bdd
BLAKE2b-256 5015430758a2295cae438de8082d15c46273ee2ac61a740e049398bfc106dbec

See more details on using hashes here.

File details

Details for the file gmcapsule-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: gmcapsule-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 32.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.1

File hashes

Hashes for gmcapsule-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cd2c1aac78b3f73b017a77252725f38f542ddc966734b62a4c42c661f6124ee7
MD5 176212db3454aad6289773dce939bb4c
BLAKE2b-256 95c43551adff0de0aa1f9d22082fc98af2433c2861883d213539add3e3dcccb1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page