2019-11-06 10:08:44 -05:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2020-06-27 12:52:29 -04:00
|
|
|
"errors"
|
2019-11-06 10:08:44 -05:00
|
|
|
"github.com/BurntSushi/toml"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2020-06-27 12:52:29 -04:00
|
|
|
Port int
|
|
|
|
Hostname string
|
|
|
|
CertPath string
|
|
|
|
KeyPath string
|
|
|
|
DocBase string
|
|
|
|
HomeDocBase string
|
|
|
|
GeminiExt string
|
|
|
|
DefaultLang string
|
|
|
|
LogPath string
|
|
|
|
TempRedirects map[string]string
|
|
|
|
PermRedirects map[string]string
|
2020-06-27 18:12:32 -04:00
|
|
|
MimeOverrides map[string]string
|
2020-06-27 12:52:29 -04:00
|
|
|
CGIPaths []string
|
|
|
|
SCGIPaths map[string]string
|
2020-06-28 08:47:36 -04:00
|
|
|
CertificateZones map[string][]string
|
2020-06-27 12:52:29 -04:00
|
|
|
DirectorySort string
|
|
|
|
DirectoryReverse bool
|
2020-06-27 16:57:03 -04:00
|
|
|
DirectoryTitles bool
|
2019-11-06 10:08:44 -05:00
|
|
|
}
|
|
|
|
|
2020-06-10 14:40:13 -04:00
|
|
|
type MollyFile struct {
|
2020-06-27 17:44:15 -04:00
|
|
|
GeminiExt string
|
|
|
|
DefaultLang string
|
|
|
|
DirectorySort string
|
|
|
|
DirectoryReverse bool
|
|
|
|
DirectoryTitles bool
|
2020-06-10 14:40:13 -04:00
|
|
|
}
|
|
|
|
|
2019-11-06 10:08:44 -05:00
|
|
|
func getConfig(filename string) (Config, error) {
|
|
|
|
|
|
|
|
var config Config
|
|
|
|
|
|
|
|
// Defaults
|
2020-03-24 17:05:26 -04:00
|
|
|
config.Port = 1965
|
2019-11-06 10:08:44 -05:00
|
|
|
config.Hostname = "localhost"
|
|
|
|
config.CertPath = "cert.pem"
|
|
|
|
config.KeyPath = "key.pem"
|
|
|
|
config.DocBase = "/var/gemini/"
|
|
|
|
config.HomeDocBase = "users"
|
2020-06-08 15:47:33 -04:00
|
|
|
config.GeminiExt = "gmi"
|
2020-06-10 15:22:15 -04:00
|
|
|
config.DefaultLang = ""
|
2019-11-06 10:08:44 -05:00
|
|
|
config.LogPath = "molly.log"
|
2020-06-08 13:59:16 -04:00
|
|
|
config.TempRedirects = make(map[string]string)
|
|
|
|
config.PermRedirects = make(map[string]string)
|
2020-06-08 15:46:39 -04:00
|
|
|
config.CGIPaths = make([]string, 0)
|
2020-06-04 14:41:40 -04:00
|
|
|
config.SCGIPaths = make(map[string]string)
|
2020-06-27 12:52:29 -04:00
|
|
|
config.DirectorySort = "Name"
|
2019-11-06 10:08:44 -05:00
|
|
|
|
|
|
|
// Return defaults if no filename given
|
|
|
|
if filename == "" {
|
|
|
|
return config, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempt to overwrite defaults from file
|
|
|
|
_, err := toml.DecodeFile(filename, &config)
|
|
|
|
if err != nil {
|
|
|
|
return config, err
|
|
|
|
}
|
2020-06-27 12:52:29 -04:00
|
|
|
|
|
|
|
// Validate pseudo-enums
|
|
|
|
switch config.DirectorySort {
|
|
|
|
case "Name", "Size", "Time":
|
|
|
|
default:
|
|
|
|
return config, errors.New("Invalid DirectorySort value.")
|
|
|
|
}
|
|
|
|
|
2019-11-06 10:08:44 -05:00
|
|
|
return config, nil
|
|
|
|
}
|