summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--default.nix2
-rw-r--r--go.mod1
-rw-r--r--go.sum4
-rw-r--r--internal/config/config.go7
-rw-r--r--roseh.moe.go55
-rw-r--r--tools/auth/auth.go18
6 files changed, 48 insertions, 39 deletions
diff --git a/default.nix b/default.nix
index 269e821..fd2f57f 100644
--- a/default.nix
+++ b/default.nix
@@ -16,5 +16,5 @@ pkgs.buildGoModule rec {
# remember to bump this hash when your dependencies change.
# vendorHash = pkgs.lib.fakeHash;
- vendorHash = "sha256-J5cVBGeQ7lLVd4KMkbwDdpnCckW/t9m1Y2V9Y5PjEIs=";
+ vendorHash = "sha256-zt1Q33F6/XuKdfRX8lB/8IukH21WFuuzCMbIDR5TEE4=";
}
diff --git a/go.mod b/go.mod
index f41972f..989a4e7 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,6 @@ go 1.25
require (
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
golang.org/x/term v0.38.0
- roseh.moe/pkg/ccl v1.0.1
roseh.moe/pkg/oae2 v0.1.0
roseh.moe/pkg/wordlist v1.0.2
)
diff --git a/go.sum b/go.sum
index f7204d2..df26c37 100644
--- a/go.sum
+++ b/go.sum
@@ -1,13 +1,9 @@
-github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
-github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
-roseh.moe/pkg/ccl v1.0.1 h1:jD8d45xlyB3OphhSI9qoMvKAohyQ2Xtq52NPOnqBWtE=
-roseh.moe/pkg/ccl v1.0.1/go.mod h1:OCcZ30pQDtjXgqgpN8eLo6f/pTi6XVKIHPs1k+gups0=
roseh.moe/pkg/oae2 v0.1.0 h1:mGkGIHErlnykRZZ1dvHd73/gVjPudIEoXxdJ133GKeM=
roseh.moe/pkg/oae2 v0.1.0/go.mod h1:SZ5K2nvKreVdhHVNxujxcZLOnjhVi+qPi2XkB18dR8g=
roseh.moe/pkg/wordlist v1.0.2 h1:riB2RqCU5zXfCQjaPHYTXV/688FV9/Bp6Hnb0IAkP9c=
diff --git a/internal/config/config.go b/internal/config/config.go
deleted file mode 100644
index d404e12..0000000
--- a/internal/config/config.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package config
-
-type SecretsConfig struct {
- NotepadPassword []byte
- SecretKey []byte
- AuthKey []byte
-}
diff --git a/roseh.moe.go b/roseh.moe.go
index b134de0..a1a6d18 100644
--- a/roseh.moe.go
+++ b/roseh.moe.go
@@ -10,6 +10,7 @@ import (
"embed"
"encoding/base64"
"encoding/binary"
+ "encoding/xml"
"errors"
"flag"
"fmt"
@@ -28,9 +29,7 @@ import (
"time"
"github.com/skip2/go-qrcode"
- "roseh.moe/pkg/ccl"
"roseh.moe/pkg/oae2"
- "roseh.moe/pkg/roseh.moe/internal/config"
"roseh.moe/pkg/roseh.moe/internal/pwhash"
"roseh.moe/pkg/wordlist"
)
@@ -39,8 +38,8 @@ var (
port = flag.Int("port", 42069, "port to listen on")
selfURL = flag.String("self-url", "http://localhost:42069", "base URL of the server")
domain = flag.String("domain", "", "domain for auth cookie")
- secretsFile = flag.String("secrets", "secrets.ccl", "secrets file")
- configFile = flag.String("config", "config.ccl", "configuration file (ccl format https://pkg.go.dev/roseh.moe/pkg/ccl)")
+ secretsFile = flag.String("secrets", "secrets.xml", "secrets file")
+ configFile = flag.String("config", "config.xml", "configuration file (XML, baby!!)")
https = flag.String("https", "", "directory containing cert.pem and key.pem, or empty string to use unencrypted http")
holeTempDir = flag.String("hole-temp-dir", "hole", "directory to store temporary files for the wormhole")
@@ -54,22 +53,32 @@ func loadSecrets() error {
if err != nil {
return err
}
- var secretsConfig config.SecretsConfig
- if err := ccl.Unmarshal(fileBytes, &secretsConfig); err != nil {
+ var secretsConfig struct {
+ NotepadPassword string `xml:",attr"`
+ SecretKey string `xml:",attr"`
+ AuthKey string `xml:",attr"`
+ }
+ if err := xml.Unmarshal(fileBytes, &secretsConfig); err != nil {
return fmt.Errorf("%s: %s", *secretsFile, err)
}
- if len(secretsConfig.NotepadPassword) == 0 {
+ if secretsConfig.NotepadPassword == "" {
return fmt.Errorf("%s: missing NotepadPassword", *secretsFile)
}
- if len(secretsConfig.SecretKey) == 0 {
+ if secretsConfig.SecretKey == "" {
return fmt.Errorf("%s: missing SecretKey", *secretsFile)
}
- if len(secretsConfig.AuthKey) == 0 {
+ if secretsConfig.AuthKey == "" {
return fmt.Errorf("%s: missing AuthKey", *secretsFile)
}
- notepadPassword = secretsConfig.NotepadPassword
- secretKey = secretsConfig.SecretKey
- authenticatorKey = secretsConfig.AuthKey
+ if notepadPassword, err = base64.StdEncoding.DecodeString(secretsConfig.NotepadPassword); err != nil {
+ return fmt.Errorf("%s: bad NotepadPassword (try base64)", *secretsFile)
+ }
+ if secretKey, err = base64.StdEncoding.DecodeString(secretsConfig.SecretKey); err != nil {
+ return fmt.Errorf("%s: bad SecretKey (try base64)", *secretsFile)
+ }
+ if authenticatorKey, err = base64.StdEncoding.DecodeString(secretsConfig.AuthKey); err != nil {
+ return fmt.Errorf("%s: bad AuthKey (try base64)", *secretsFile)
+ }
return nil
}
@@ -103,21 +112,27 @@ func loadConfig() (*serviceConfiguration, error) {
return nil, err
}
var fileConfig struct {
- Redirect []struct{ Package, Command, To string }
+ Package []struct {
+ Name string `xml:",attr"`
+ URL string `xml:",attr"`
+ } `xml:"Redirects>Package"`
+ Command []struct {
+ Name string `xml:",attr"`
+ URL string `xml:",attr"`
+ } `xml:"Redirects>Command"`
}
- if err := ccl.Unmarshal(fileBytes, &fileConfig); err != nil {
+ if err := xml.Unmarshal(fileBytes, &fileConfig); err != nil {
return nil, err
}
config := &serviceConfiguration{
packageRedirects: make(map[string]string),
commandRedirects: make(map[string]string),
}
- for _, redirect := range fileConfig.Redirect {
- if redirect.Package != "" {
- config.packageRedirects[redirect.Package] = redirect.To
- } else {
- config.commandRedirects[redirect.Command] = redirect.To
- }
+ for _, pkg := range fileConfig.Package {
+ config.packageRedirects[pkg.Name] = pkg.URL
+ }
+ for _, cmd := range fileConfig.Command {
+ config.commandRedirects[cmd.Name] = cmd.URL
}
serviceConfigMu.Lock()
serviceConfig = config
diff --git a/tools/auth/auth.go b/tools/auth/auth.go
index 3c4f063..9b80389 100644
--- a/tools/auth/auth.go
+++ b/tools/auth/auth.go
@@ -2,13 +2,13 @@ package main
import (
"encoding/base32"
+ "encoding/base64"
+ "encoding/xml"
"flag"
"fmt"
"os"
"github.com/skip2/go-qrcode"
- "roseh.moe/pkg/ccl"
- "roseh.moe/pkg/roseh.moe/internal/config"
)
func run() error {
@@ -20,14 +20,20 @@ func run() error {
if err != nil {
return err
}
- var config config.SecretsConfig
- if err := ccl.Unmarshal(fileBytes, &config); err != nil {
+ var config struct {
+ AuthKey string `xml:",attr"`
+ }
+ if err := xml.Unmarshal(fileBytes, &config); err != nil {
return err
}
- if len(config.AuthKey) == 0 {
+ if config.AuthKey == "" {
return fmt.Errorf("%s: missing AuthKey", args[0])
}
- qrCode, err := qrcode.New(fmt.Sprintf("otpauth://totp/roseh.moe:rose?secret=%s&issuer=roseh.moe", base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(config.AuthKey)), qrcode.Medium)
+ authKey, err := base64.StdEncoding.DecodeString(config.AuthKey)
+ if err != nil {
+ return err
+ }
+ qrCode, err := qrcode.New(fmt.Sprintf("otpauth://totp/roseh.moe:rose?secret=%s&issuer=roseh.moe", base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(authKey)), qrcode.Medium)
if err != nil {
return err
}