Move configuration to a file

git-svn-id: file:///srv/svn/repo/marisa/trunk@30 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
dev
2021-10-19 09:45:55 +00:00
parent b62335604f
commit 6f7e7c7515
2 changed files with 57 additions and 29 deletions

1
go.mod
View File

@@ -5,4 +5,5 @@ go 1.17
require ( require (
github.com/dustin/go-humanize v1.0.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect
github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de // indirect github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de // indirect
gopkg.in/ini.v1 v1.63.2 // indirect
) )

View File

@@ -18,7 +18,7 @@ import (
"encoding/json" "encoding/json"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/vharitonsky/iniflags" "gopkg.in/ini.v1"
) )
type templatedata struct { type templatedata struct {
@@ -34,15 +34,15 @@ type metadata struct {
} }
var conf struct { var conf struct {
bind string
user string user string
group string group string
chroot string
bind string
baseuri string baseuri string
rootdir string
tmplpath string
filepath string filepath string
metapath string metapath string
rootdir string
chroot string
templatedir string
filectx string filectx string
metactx string metactx string
maxsize int64 maxsize int64
@@ -117,7 +117,7 @@ func writemeta(filename string, expiry int64) error {
} }
func servetemplate(w http.ResponseWriter, f string, d templatedata) { func servetemplate(w http.ResponseWriter, f string, d templatedata) {
t, err := template.ParseFiles(conf.templatedir + "/" + f) t, err := template.ParseFiles(conf.tmplpath + "/" + f)
if err != nil { if err != nil {
http.Error(w, "Internal error", http.StatusInternalServerError) http.Error(w, "Internal error", http.StatusInternalServerError)
return return
@@ -244,21 +244,48 @@ func uploader(w http.ResponseWriter, r *http.Request) {
} }
func main() { func main() {
flag.StringVar(&conf.bind, "bind", "0.0.0.0:8080", "Address to bind to (default: 0.0.0.0:8080)") var file string
flag.StringVar(&conf.user, "user", "", "User to drop privileges to on startup (default: current user)") flag.StringVar(&file, "f", "", "Configuration file")
flag.StringVar(&conf.group, "group", "", "Group to drop privileges to on startup (default: user's group)") flag.BoolVar(&verbose, "v", false, "Verbose logging")
flag.StringVar(&conf.baseuri, "baseuri", "http://127.0.0.1:8080", "Base URI to use for links (default: http://127.0.0.1:8080)") flag.Parse()
flag.StringVar(&conf.filepath, "filepath", "./files", "Path to save files to (default: ./files)")
flag.StringVar(&conf.metapath, "metapath", "./meta", "Path to save metadata to (default: ./meta)")
flag.StringVar(&conf.filectx, "filectx", "/f/", "Context to serve files from (default: /f/)")
flag.StringVar(&conf.metactx, "metactx", "/m/", "Context to serve metadata from (default: /m/)")
flag.StringVar(&conf.rootdir, "rootdir", "./static", "Root directory (default: ./static)")
flag.StringVar(&conf.chroot, "chroot", "", "Directory to chroot into upon starting (default: no chroot)")
flag.StringVar(&conf.templatedir, "templatedir", "./templates", "Templates directory (default: ./templates)")
flag.Int64Var(&conf.maxsize, "maxsize", 30064771072, "Maximum file size (default: 28Gib)")
flag.Int64Var(&conf.expiry, "expiry", 86400, "Link expiration time (default: 24h)")
iniflags.Parse() /* default values */
conf.bind = "0.0.0.0:8080"
conf.baseuri = "http://127.0.0.1:8080"
conf.rootdir = "/htdocs"
conf.tmplpath = "/htdocs/templates"
conf.filepath = "/htdocs/files"
conf.metapath = "/htdocs/meta"
conf.filectx = "/f/"
conf.metactx = "/m/"
conf.maxsize = 34359738368
conf.expiry = 86400
if file != "" {
if verbose {
log.Printf("Reading configuration %s", file)
}
cfg, err := ini.Load(file)
if err != nil {
fmt.Println(err)
return
}
conf.bind = cfg.Section("").Key("bind").String()
conf.user = cfg.Section("").Key("user").String()
conf.group = cfg.Section("").Key("group").String()
conf.baseuri = cfg.Section("").Key("baseuri").String()
conf.filepath = cfg.Section("").Key("filepath").String()
conf.metapath = cfg.Section("").Key("metapath").String()
conf.filectx = cfg.Section("").Key("filectx").String()
conf.metactx = cfg.Section("").Key("metactx").String()
conf.rootdir = cfg.Section("").Key("rootdir").String()
conf.chroot = cfg.Section("").Key("chroot").String()
conf.tmplpath = cfg.Section("").Key("tmplpath").String()
conf.maxsize, _ = cfg.Section("").Key("maxsize").Int64()
conf.expiry, _ = cfg.Section("").Key("expiry").Int64()
}
if verbose { if verbose {
log.Printf("Applied configuration:\n%s", conf) log.Printf("Applied configuration:\n%s", conf)