summaryrefslogtreecommitdiffstats
path: root/roseh.moe.go
diff options
context:
space:
mode:
Diffstat (limited to 'roseh.moe.go')
-rw-r--r--roseh.moe.go72
1 files changed, 29 insertions, 43 deletions
diff --git a/roseh.moe.go b/roseh.moe.go
index cfa9218..8a29da9 100644
--- a/roseh.moe.go
+++ b/roseh.moe.go
@@ -1,8 +1,6 @@
package main
import (
- "bufio"
- "bytes"
"crypto/hmac"
"crypto/rand"
"crypto/sha256"
@@ -22,6 +20,7 @@ import (
"sync"
"time"
+ "roseh.moe/pkg/roseh.moe/internal/ini"
"roseh.moe/pkg/roseh.moe/internal/pwhash"
"roseh.moe/pkg/wordlist"
)
@@ -29,7 +28,7 @@ import (
var (
port = flag.Int("port", 42069, "port to listen on")
selfURL = flag.String("self-url", "http://localhost:42069", "base URL of the server")
- secretsFile = flag.String("secrets", "secrets", "secrets file")
+ secretsFile = flag.String("secrets", "secrets.ini", "secrets file")
configFile = flag.String("config", "config.ini", "configuration file (no spec or examples, sorry)")
serverStartTime = time.Now()
@@ -38,21 +37,29 @@ var (
var notepadPassword, secretKey []byte
func loadSecrets() error {
- secrets, err := os.ReadFile(*secretsFile)
+ f, err := os.Open(*secretsFile)
if err != nil {
return err
}
- for _, line := range bytes.Split(bytes.TrimSuffix(secrets, []byte("\n")), []byte("\n")) {
- if pw, ok := bytes.CutPrefix(line, []byte("notepad-password=")); ok {
- notepadPassword, err = hex.AppendDecode(nil, pw)
+ defer f.Close()
+ p := new(ini.Parser)
+ for keyVal, err := range p.Parse(f) {
+ if err != nil {
+ return fmt.Errorf("%s:%d %s", *secretsFile, p.LineNumber, err)
+ }
+ switch keyVal.Key {
+ case "notepad-password":
+ notepadPassword, err = hex.AppendDecode(nil, []byte(keyVal.Val))
if err != nil {
- return err
+ return fmt.Errorf("%s:%d %s", *secretsFile, p.LineNumber, err)
}
- } else if key, ok := bytes.CutPrefix(line, []byte("secret-key=")); ok {
- secretKey, err = hex.AppendDecode(nil, key)
+ case "secret-key":
+ secretKey, err = hex.AppendDecode(nil, []byte(keyVal.Val))
if err != nil {
- return err
+ return fmt.Errorf("%s:%d %s", *secretsFile, p.LineNumber, err)
}
+ default:
+ return fmt.Errorf("%s:%d unknown key", *secretsFile, p.LineNumber)
}
}
return nil
@@ -92,41 +99,20 @@ func loadConfig() (*serviceConfiguration, error) {
packageRedirects: make(map[string]string),
commandRedirects: make(map[string]string),
}
- scanner := bufio.NewScanner(f)
- lineNo := 0
- var currentSection map[string]string
- for scanner.Scan() {
- lineNo++
- line := strings.TrimSpace(scanner.Text())
- if len(line) == 0 || strings.HasPrefix(line, "//") || strings.HasPrefix(line, "#") {
- continue
- }
- if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
- switch sectionName := strings.TrimSpace(line[1 : len(line)-1]); sectionName {
- case "package-redirects":
- currentSection = config.packageRedirects
- case "command-redirects":
- currentSection = config.commandRedirects
- default:
- currentSection = nil
- log.Printf("Warning: %s:%d unknown section", *configFile, lineNo)
- }
- continue
- }
- key, val, ok := strings.Cut(line, "=")
- if !ok {
- log.Printf("Warning: %s:%d invalid key-value pair", *configFile, lineNo)
+ p := new(ini.Parser)
+ for keyVal, err := range p.Parse(f) {
+ if err != nil {
+ log.Printf("Warning: %s:%d %s", *configFile, p.LineNumber, err)
continue
}
- if currentSection == nil {
- log.Printf("Warning: %s:%d key-value pair outside section", *configFile, lineNo)
- continue
+ switch p.Section {
+ case "package-redirects":
+ config.packageRedirects[keyVal.Key] = keyVal.Val
+ case "command-redirects":
+ config.packageRedirects[keyVal.Key] = keyVal.Val
+ default:
+ log.Printf("Warning: %s:%d unknown section", *configFile, p.LineNumber)
}
- key, val = strings.TrimSpace(key), strings.TrimSpace(val)
- currentSection[key] = val
- }
- if err := scanner.Err(); err != nil {
- return nil, err
}
serviceConfigMu.Lock()
serviceConfig = config