Excuse, more temp fixes
|9 months ago|
|examples||10 months ago|
|LICENSE||2 years ago|
|README.gmi||9 months ago|
|README.md||9 months ago|
|config.go||11 months ago|
|dirlist.go||2 years ago|
|dynamic.go||10 months ago|
|go.mod||2 years ago|
|go.sum||2 years ago|
|spsrv.go||9 months ago|
A static spartan server with many features:
- folder redirects
- /~user directories
- directory listing
- CONF or TOML config file
Known servers running spsrv:
Table of Contents
you have two options for now:
Option 1: with
first, you need to have go installed and have a folder
pointing to it.
go get git.sr.ht/~hedy/spsrv
there will be a binary at
~/go/bin/ with the source code at
feel free to move the binary somewhere else like
Option 2: just build it yourself
git clone https://git.sr.ht/~hedy/spsrv from any directory and
make sure you have go installed and working.
git checkout v0.0.0 # optionally pin a specific tag go build
when it finishes, the binary will be in the current directory.
If you don't have/want go installed, you can contact me, and if you're lucky, I have the same OS as you and you can use my compiled binary (lol). I'll eventually have automated uploads of binaries for various architectures for each release in the future.
The default config file location is
/etc/spsrv.conf you can specify your own path by running spsrv like
spsrv -c /path/to/file.conf
You don't need a config file to have spsrv running, it will just use the default values.
Note that the options are case insensitive.
Here are the config options and their default values
port=300: port to listen to
hostname="localhost": if this is set, any request that for hostnames other than this value would be rejected
rootdir="/var/spartan": folder for fetching files
dirlistEnable=true: enable directory listing for folders that does not have
dirlistReverse=false: reverse the order of which files are listed
dirlistSort="name": how files are sorted, only "name", "size", and "time" are accepted. Defaults to "name" if an unknown option is encountered
dirlistTitles=true: if true, directory listing will use first top level header in
*.gmifiles instead of the filename
userdirEnable=true: enable serving
userdir="public_spartan": root directory for users. This should not have trailing slashes, and it is relative to
userSubdomains=false: User vhosts. Whether to allow
user.host.name/foo.txtbeing the same as
hostname="host.name"). NOTE: This only works when
hostnameoption is set.
CGIPaths=["cgi/"]: list of paths where world-executable files will be run as CGI processes. These paths would be checked if it prefix the requested path. For the default value, a request of
./public/cgi/hi.sh, for example) will run
hi.shscript if it's world executable.
usercgiEnable=false: enable running user's CGI scripts too. This is dangerous as spsrv does not (yet) change the Uid of the CGI process, hence the process would be ran by the same user that is running the server, which could mean write access to configuration files, etc. Note that this option will be assumed
userdirEnableis set to
false. Which means if user directories are not enabled, there will be no per-user CGI.
Check out some example configuraton in the examples/ directory.
You can override values in config file if you supply them from the command line:
Usage: spsrv [ [ -c <path> -h <hostname> -p <port> -d <path> ] | --help ] -c, --config string Path to config file -d, --dir string Root content directory -h, --hostname string Hostname -p, --port int Port to listen to
Note that you cannot set the hostname or the dir path to
, because spsrv
uses that to check whether you provided an option. You can't set port to
either, sorry, this limitation comes with the advantage of being able to
override config values from the command line.
There are no arguments wanted when running spsrv, only options as listed above :)
The following environment values are set for CGI scripts:
GATEWAY_INTERFACE # CGI/1.1 REMOTE_ADDR # Remote address SCRIPT_PATH # (Relative) path of the CGI script SERVER_SOFTWARE # SPSRV SERVER_PROTOCOL # SPARTAN REQUEST_METHOD # Set to nothing SERVER_PORT # Port SERVER_NAME # Hostname DATA_LENGTH # Input data length
The data block, if any, will be piped as stdin to the CGI process.
Keep in mind that CGI scripts (as of now) are run by the same user as the server process, hence it is generally dangerous for allowing users to have their own CGI scripts. See configuration section for more details.
Check out some example CGI scripts in the examples/ directory.
/folder to /folder/ redirects
logging to files
refactor working dir part
- status meta
- user homedir
- hostname, port
- public dir
- dirlist title
- user vhost
- userdir slug
- pipe data block
- user cgi config and change uid to user
- regex in cgi paths
Multiple servers with each of their own confs