Move .molly file parsing function into config.go.
This commit is contained in:
parent
3cd4a072fd
commit
37e177fbe0
2 changed files with 62 additions and 61 deletions
62
config.go
62
config.go
|
@ -2,6 +2,8 @@ package main
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
|
@ -93,3 +95,63 @@ func getConfig(filename string) (Config, error) {
|
|||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func parseMollyFiles(path string, config *Config, errorLog *log.Logger) {
|
||||
// Build list of directories to check
|
||||
var dirs []string
|
||||
dirs = append(dirs, path)
|
||||
for {
|
||||
if path == filepath.Clean(config.DocBase) {
|
||||
break
|
||||
}
|
||||
subpath := filepath.Dir(path)
|
||||
dirs = append(dirs, subpath)
|
||||
path = subpath
|
||||
}
|
||||
// Initialise MollyFile using main Config
|
||||
var mollyFile MollyFile
|
||||
mollyFile.GeminiExt = config.GeminiExt
|
||||
mollyFile.DefaultLang = config.DefaultLang
|
||||
mollyFile.DirectorySort = config.DirectorySort
|
||||
mollyFile.DirectoryReverse = config.DirectoryReverse
|
||||
mollyFile.DirectoryTitles = config.DirectoryTitles
|
||||
// Parse files in reverse order
|
||||
for i := len(dirs) - 1; i >= 0; i-- {
|
||||
dir := dirs[i]
|
||||
// Break out of the loop if a directory doesn't exist
|
||||
_, err := os.Stat(dir)
|
||||
if os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
// Construct path for a .molly file in this dir
|
||||
mollyPath := filepath.Join(dir, ".molly")
|
||||
_, err = os.Stat(mollyPath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// If the file exists and we can read it, try to parse it
|
||||
_, err = toml.DecodeFile(mollyPath, &mollyFile)
|
||||
if err != nil {
|
||||
errorLog.Println("Error parsing .molly file " + mollyPath + ": " + err.Error())
|
||||
continue
|
||||
}
|
||||
// Overwrite main Config using MollyFile
|
||||
config.GeminiExt = mollyFile.GeminiExt
|
||||
config.DefaultLang = mollyFile.DefaultLang
|
||||
config.DirectorySort = mollyFile.DirectorySort
|
||||
config.DirectoryReverse = mollyFile.DirectoryReverse
|
||||
config.DirectoryTitles = mollyFile.DirectoryTitles
|
||||
for key, value := range mollyFile.TempRedirects {
|
||||
config.TempRedirects[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.PermRedirects {
|
||||
config.PermRedirects[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.MimeOverrides {
|
||||
config.MimeOverrides[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.CertificateZones {
|
||||
config.CertificateZones[key] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
61
handler.go
61
handler.go
|
@ -5,7 +5,6 @@ import (
|
|||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/BurntSushi/toml"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"mime"
|
||||
|
@ -180,66 +179,6 @@ func resolvePath(path string, config Config) string {
|
|||
return path
|
||||
}
|
||||
|
||||
func parseMollyFiles(path string, config *Config, errorLog *log.Logger) {
|
||||
// Build list of directories to check
|
||||
var dirs []string
|
||||
dirs = append(dirs, path)
|
||||
for {
|
||||
if path == filepath.Clean(config.DocBase) {
|
||||
break
|
||||
}
|
||||
subpath := filepath.Dir(path)
|
||||
dirs = append(dirs, subpath)
|
||||
path = subpath
|
||||
}
|
||||
// Initialise MollyFile using main Config
|
||||
var mollyFile MollyFile
|
||||
mollyFile.GeminiExt = config.GeminiExt
|
||||
mollyFile.DefaultLang = config.DefaultLang
|
||||
mollyFile.DirectorySort = config.DirectorySort
|
||||
mollyFile.DirectoryReverse = config.DirectoryReverse
|
||||
mollyFile.DirectoryTitles = config.DirectoryTitles
|
||||
// Parse files in reverse order
|
||||
for i := len(dirs) - 1; i >= 0; i-- {
|
||||
dir := dirs[i]
|
||||
// Break out of the loop if a directory doesn't exist
|
||||
_, err := os.Stat(dir)
|
||||
if os.IsNotExist(err) {
|
||||
break
|
||||
}
|
||||
// Construct path for a .molly file in this dir
|
||||
mollyPath := filepath.Join(dir, ".molly")
|
||||
_, err = os.Stat(mollyPath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// If the file exists and we can read it, try to parse it
|
||||
_, err = toml.DecodeFile(mollyPath, &mollyFile)
|
||||
if err != nil {
|
||||
errorLog.Println("Error parsing .molly file " + mollyPath + ": " + err.Error())
|
||||
continue
|
||||
}
|
||||
// Overwrite main Config using MollyFile
|
||||
config.GeminiExt = mollyFile.GeminiExt
|
||||
config.DefaultLang = mollyFile.DefaultLang
|
||||
config.DirectorySort = mollyFile.DirectorySort
|
||||
config.DirectoryReverse = mollyFile.DirectoryReverse
|
||||
config.DirectoryTitles = mollyFile.DirectoryTitles
|
||||
for key, value := range mollyFile.TempRedirects {
|
||||
config.TempRedirects[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.PermRedirects {
|
||||
config.PermRedirects[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.MimeOverrides {
|
||||
config.MimeOverrides[key] = value
|
||||
}
|
||||
for key, value := range mollyFile.CertificateZones {
|
||||
config.CertificateZones[key] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handleRedirects(URL *url.URL, config Config, conn net.Conn, log *LogEntry, errorLog *log.Logger) {
|
||||
handleRedirectsInner(URL, config.TempRedirects, 30, conn, log, errorLog)
|
||||
handleRedirectsInner(URL, config.PermRedirects, 31, conn, log, errorLog)
|
||||
|
|
Loading…
Reference in a new issue