馃崄 A very simple static Gemini server, now with Titan support!
cpp gemini titan gemini-protocol titan-protocol
C++ 82.3%
Nix 9.2%
Shell 2.2%
Dockerfile 1.7%
Other 4.6%
44 1 0

Clone this repository

https://tangled.org/fuwn.net/maple https://tangled.org/did:plc:g4lsi6ub2d3kqklfokk3dvmy/maple
git@tangled.org:fuwn.net/maple git@tangled.org:did:plc:g4lsi6ub2d3kqklfokk3dvmy/maple

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Maple#

A very simple static Gemini server, now with Titan support!

Lines-of-code#

This codebase is now 351 lines of lines-of-code!

The statement "... written within a single file and liberally spanning 159 lines-of-code." has been removed.

If you would still like the minimal 159-LOC experience, checkout 49ce0f8! (Docker tag 0.1.4) Do note, that version of this project is outdated and only has Gemini support.

Usage#

Docker Compose#

A Docker Compose file is already setup here. The only field which should be modified is the ports, if need be.

docker-compose up -d

Docker#

docker run -p 1965:1965 -v ./your_capsules_directory:/maple/.maple fuwn/maple:latest

Executable#

  1. Build: tup (requires Tup)
  2. Run: build/maple, or TITAN=1 TITAN_TOKEN=secret TITAN_MAX_SIZE=2048 build/maple

Certificates#

Before any possible method of usage; you must generate or use a preexisting server certificate.

If you do not have an existing certificate, generate one using the provided certificate generations script: bin/genkey (requires OpenSSL).

The server certificate must be placed in a directory -- directly adjacent to the Docker Compose file or executable -- named .maple. The public and private keys must be named public.pem and private.pem, respectively.

Gemini Content#

Gemini content must be placed in a directory -- directly adjacent to the Docker Compose file or executable -- named .maple/gmi and ending with the file extension .gmi.

Environment Variables#

Maple can be configured with three optional environment variables:

TITAN#

Enable Titan support.

Takes a value of either true or 1, case-insensitive.

Defaults to off.

TITAN_TOKEN#

Set a token to restrict Titan access.

Takes a string value, case-sensitive.

Defaults to no token, anyone can upload!

TITAN_MAX_SIZE#

The maximum size in bytes which a Titan upload is permitted to perform.

Takes an integer.

Default to 1024.

Hacking#

If you decide to tamper with Maple, you should give your commits a test. As there isn't a test suite yet, feel free to use any of these examples:

# Using OpenSSL directly to debug different requests:
$ openssl s_client -ign_eof -quiet -connect localhost:1965 <<< \
> "gemini://localhost:1965"

# Using Bollux to debug proper requests... or any client!
$ bollux localhost

Capsules using Maple#

Add yours!

License#

This project is licensed with the GNU General Public License v3.0.