Skip to content

Gopher Server

The Gopher content server provides access to publicly exposed message conferences and areas over Gopher (gopher://) as well as any other content you wish to serve in your Gopher Hole!

Gopher configuration is found in contentServers.gopher in config.hjson.

ItemRequiredDescription
enabledYesSet to true to enable Gopher
staticRootYesSets the path serving as the static root path for all Gopher content. Defaults to enigma-bbs/gopher.
See also Gophermap’s below
portNoOverride the default port of 8070
publicHostnameYesSet the public hostname/domain that Gopher will serve to the outside world. Example: myfancybbs.com
publicPortYesSet the public port that Gopher will serve to the outside world.
exposedConfAreasNoAn map of conference tags to an object containing include’d area tags, and exceptions via exclude’d area tags. Area tags may contain wildcards of ’*’ and ’?’. Any area tags that match will be exposed to Gopher. See Example Configuration below.

Notes on publicHostname and publicPort: The Gopher protocol serves content that contains host/domain and port even when referencing it’s own documents. Due to this, these members must be set to your publicly addressable Gopher server!

Gophermap’s are how to build menus for your Gopher Hole. Each map is a simple text file named gophermap (all lowercase, no extension) with DOS style CRLF endings.

Within any directory nested within your staticRoot may live a gophermap. A template may be found in the enigma-bbs/misc directory.

ENiGMA will pre-process gophermap files replacing in following variables:

  • {publicHostname}: The public hostname from your config.
  • {publicPort}: The public port from your config.

An example gophermap living in enigma-bbs/gopher:

iWelcome to a Gopher server! {publicHostname} {publicPort}
1Public Message Area /msgarea {publicHostname} {publicPort}
.

Let’s suppose you are serving Gopher for your BBS at myfancybbs.com. Your ENiGMA½ system is listening on the default Gopher port of 8070 but you’re behind a firewall and want port 70 exposed to the public. Lastly, you want to expose some ArakNet areas:

contentServers: {
gopher: {
enabled: true
publicHostname: myfancybbs.com
publicPort: 70
// Expose some public message conferences/areas
exposedConfAreas: {
araknet: { // ArakNet's conference tag
// start with all areas exposed
include: [ "*" ]
// ...except the +op and Phenom private areas
exclude: [ "ark_sysop", "ark_phenom" ]
}
}
}
}