package main import ( "encoding/json" "fmt" "log" "os" "go.etcd.io/bbolt" ) func main() { if len(os.Args) < 2 { fmt.Fprintf(os.Stderr, "Usage: fix-zoraxy-sso \n") os.Exit(1) } dbPath := os.Args[1] bucket := "zorxauth" key := "options" db, err := bbolt.Open(dbPath, 0600, nil) if err != nil { log.Fatalf("Failed to open DB %s: %v", dbPath, err) } defer db.Close() err = db.Update(func(tx *bbolt.Tx) error { b := tx.Bucket([]byte(bucket)) if b == nil { return fmt.Errorf("bucket %q not found", bucket) } val := b.Get([]byte(key)) if val == nil { return fmt.Errorf("key %q not found in bucket %q", key, bucket) } var opts map[string]interface{} if err := json.Unmarshal(val, &opts); err != nil { return fmt.Errorf("failed to parse JSON: %v", err) } // Update the critical SSO fields opts["sso_redirect_url"] = fmt.Sprintf("https://app.%s/", getDomain()) opts["enable_auth_gateway"] = true updated, err := json.Marshal(opts) if err != nil { return fmt.Errorf("failed to marshal JSON: %v", err) } return b.Put([]byte(key), updated) }) if err != nil { log.Fatalf("Update failed: %v", err) } fmt.Println("[OK] ZorxAuth SSO config updated in BoltDB") } func getDomain() string { if d := os.Getenv("DOMAIN"); d != "" { return d } return "nextwks.eu" }