diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2025-10-07 20:29:09 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2025-10-07 20:29:09 -0700 |
| commit | 40e6f248d4e302c8541d72778de64b5bdde2b69c (patch) | |
| tree | 7187d86f922af555c765059b36eacfa4e874213a /roseh.moe.go | |
| parent | Log (diff) | |
| download | roseh.moe-40e6f248d4e302c8541d72778de64b5bdde2b69c.tar.zst | |
Use ini for the secrets file as well
Diffstat (limited to 'roseh.moe.go')
| -rw-r--r-- | roseh.moe.go | 72 |
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 |
