gophi/README.md

141 lines
3.8 KiB
Markdown
Raw Normal View History

# Gophor
A Gopher server written in GoLang as a means of learning about the Gopher
protocol, and more GoLang.
Possibly beta quality soon? More likely alpha right now.
`go build` and you're set to go! (...phor ha)
Linux only FOR NOW.
# Usage
```
gophor [args]
-root Change server root directory.
-port Change server listening port.
-hostname Change server hostname (FQDN, used to craft dir lists).
-bind-addr Change server bind-address (used in creating socket).
-uid Change UID to drop privileges to.
-gid Change GID to drop privileges to.
-system-log Path to gophor system log file, else use stderr.
-access-log Path to gophor access log file, else use stderr.
-cache-check Change file-cache freshness check frequency (in secs).
-cache-size Change max no. files in file-cache.
-cache-file-max Change maximum allowed size of a cached file.
```
# Features
- ZERO external dependencies
- Item type characters beyond RFC 1436 standard (see below)
- Security focused -- chroots and into server direrctory and drops
privileges. `maybe wait until stable release before use outside of hobby
setups.`
- LRU file caching -- with user-controlled file count and max file size.
- Separate system and access logging with output to file if requested (or
disable both!).
# Supported gophermap item types
```
0 -- regular file (text)
1 -- directory (menu)
2 -- CSO phone-book server... should you be using this in 2020 lmao
3 -- Error
4 -- Binhexed macintosh file
5 -- DOS bin archive
6 -- Unix uuencoded file
7 -- Index-search server
8 -- Text-based telnet session
9 -- Binary file
T -- Text-based tn3270 session... in 2020???
g -- Gif format graphic
I -- Image file of some kind
+ -- Redundant server
. -- Lastline if online this followed by CrLf
i -- Info message
h -- HTML document
s -- Audio file
p -- PNG image
d -- Document
M -- MIME type file
; -- Video file
c -- Calendar file
! -- Title
# -- Comment (not displayed)
- -- Hide file from directory listing
= -- Include subgophermap (prints file output here)
* -- Act as-if lastline and print directory listing below
Unavailable for now due to issues with accessing path within chroot:
$ -- Execute shell command and print stdout here
```
# Todos
- TLS support
- Connection throttling + timeouts
- Header + footer text
- Rotating logs
- Set default page width (modifies max UserName / Selector fields)
- Set default charset
- Autogenerated caps.txt
- Toggleable server status page (?)
- Proxy over HTTP support
- Finish inline shell scripting support
- Allow setting UID+GID via username string
- Fix file cache only updating if main gophermap changes (but not sub files)
- Add automatic truncating of subgophermap line lengths (e.g. at 70char
automatically introduce new-line)
- More fine-tuned handling of OS signals
- Add suport for `$hostname` in gophermaps to insert current hostname
# Please note
During the initial writing phase the quality of git commit messages may be
low and many changes are likely to be bundled together at a time, just
because the pace of development right now is rather break-neck.
As soon as we reach a stable point in development, or if other people start
contributing issues or PRs, whichever comes first, this will be changed
right away.
# Standards followed
Gopher-II (The Next Generation Gopher WWIS):
https://tools.ietf.org/html/draft-matavka-gopher-ii-00
All of the below can be viewed from your standard web browser using
floodgap's Gopher proxy:
https://gopher.floodgap.com/gopher/gw
RFC 1436 (The Internet Gopher Protocol:
gopher://gopher.floodgap.com:70/0/gopher/tech/rfc1436.txt
Gopher+ (upward compatible enhancements):
gopher://gopher.floodgap.com:70/0/gopher/tech/gopherplus.txt