Home

Awesome

Atlas

the launch rocket of the gemini capsule

Features

*Still WIP

Built-in Special Tokens

TokenReplaced With
%%{sub}%%Gemini: Subject Name of the Client Cert (without CN=) - if any - otherwise 'Anon'. For Spartan it always returns 'Spartan'
%%{host}%%FQDN - eg: her.st
%%{path}%%requested path - eg: /index.gmi
%%{scheme}%%protocol of request - eg: spartan / gemini
%%{date}%%YYYY-MM-DD - eg: 2024-03-30
%%{time}%%HH:mm:ss - eg: 21:04:25
%%{datetime}%%YYYY-MM-DD HH-mm-ss - eg: 2024-03-30 21:04:25
%%{rendertime}%%Milliseconds - eg: 0.59
%%{ls}%%Create Directory Index

Example

GemtextRendered
Sub: %%{sub}%%Sub: Alumniminium
Host: %%{host}%%Host: localhost
Path: %%{path}%%Path: /index.gmi
Scheme: %%{scheme}%%Scheme: gemini
Date: %%{date}%%Date: 2024-04-01
Time: %%{time}%%Time: 11:32:41
Datetime: %%{datetime}%%Datetime: 2024-04-01 11:32:41
Render Time: %%{rendertime}%%Render Time: 4564.80
%%{ls}%%=> gemini://localhost//index.gmi 2024-04-01 | 0.00mb | index.gmi
=> gemini://localhost//localhost.pfx 2024-03-30 | 0.00mb | localhost.pfx

Atlas Statistics

You can always access Atlas Stats on the following URL: gemini://yourserver.tld/atlas.stats

Stats Screenshot Stats Screenshot

Roadmap (in no particular order)

Sample configuration with all options

A minimal config file will be autogenerated if none is found. this one is just an advanced example

{
  "GeminiPort": 1965,
  "SpartanPort": 300,

  "SlowMode": true, // animations, currently only for gemini
  "SlowModeMaxMilliSeconds": 2000, // max time for animations in ms

  "Capsules": {
    
    "allsafe.net": {
      "AbsoluteRootPath": "/srv/gemini/allsafe.net/",
      "AbsoluteTlsCertPath": "/srv/gemini/allsafe.net/allsafe.net.pfx",
      "FQDN": "allsafe.net",
      "Index": "index.gmi",

      "Locations": 
      [
        {
          "AbsoluteRootPath": "/srv/gemini/allsafe.net/",
          "Index": "index.gmi",
        }
      ]

    },

    "evilcorp.net": {
      "FQDN": "evilcorp.net",
      "AbsoluteRootPath": "/srv/gemini/evilcorp.net/",
      "AbsoluteTlsCertPath": "",// will be automatically created and placed at AbsoluteRootPath/FQDN.pfx
      "Index": "index.gmi",
      "MaxUploadSize": 4194304, // global max upload size (bytes)
      
      "Locations": [
        {
          "AbsoluteRootPath": "/srv/gemini/evilcorp.net/",
          "Index": "index.gmi",
        },

        {
          "AbsoluteRootPath": "/srv/gemini/evilcorp.net/cgi/",
          "Index": "script.csx",
          "CGI": true,
          "RequireClientCert": true,  // disables access for spartan protocol due to lack of support
        },

        {
          "AbsoluteRootPath": "/srv/gemini/evilcorp.net/textfiles/",
          "Index": "index.gmi",
          "DirectoryListing": true, 
          "AllowFileUploads": true, // public Titan/Spartan  uploads in this location
          "MaxUploadSize": 100000, // override max upload size (bytes)
          "DefaultMimeType": "text/plain", // default mimetype for files without or unknown extension

          "AllowedMimeTypes": {
            "text/*": { // whitelist all text files
              "MaxSizeBytes": 1048576 // override max upload size for text files
            },
          }
        }
      ]

    }

  }
}

CGI Interface

The CGI interface provides the following environment variables:

VariableDescriptionDefault
DOTNET_CLI_HOMERequired for .NET assemblies to execute~/.dotnet
GATEWAY_INTERFACECGI VersionCGI/1.1
SERVER_PROTOCOLEither Gemini or SpartanGEMINI / SPARTAN
SERVER_PORTGemini or Spartan Port according to config.json1965 / 300
SERVER_SOFTWAREatlas/version stringatlas/0.2b
URLURL of the Requestgemini://evil.corp/cgi/binary?queryString=value#fragment&token
SCRIPT_NAMEthe CGI script namebinary
PATH_INFOSee CGI documentationHopefully correct
QUERY_STRINGQuery from the URL?queryString=value#fragment&token
SERVER_NAMEthe FQDN of the vhostevil.corp
REMOTE_HOSTThe IP of the client sending the request127.0.0.1
REMOTE_ADDRas aboveas above
TLS_VERSIONGemini Only1.3
REMOTE_USERTLS Cert Subject without CN=trbl
TLS_CLIENT_SUBJECTas aboveas above
TLS_CLIENT_VALIDCertificate is not expiredtrue
TLS_CLIENT_TRUSTEDCertificate issued by atlasfalse
TLS_CLIENT_HASHThe Certificate Thumbprint0baf2asdb23i02..
TLS_CLIENT_NOT_BEFORECertificate Valid From Time08/28/2022 18:26:30
TLS_CLIENT_NOT_AFTERCertificate Valid To Time08/28/3000 18:26:30
TLS_CLIENT_SERIAL_NUMBERThe Certificate Serial Number
AUTH_TYPECERTIFICATE or NONENONE

sample CGI script

Commenting on Articles atlas-comments