mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-10-06 04:49:08 +00:00
This adds a new auth flow allowing users to authenticate with their wallet and obtain an API key scoped to a namespace. It also moves API key storage from config to the database for better persistence and key-to-wallet linkage. The commit message uses the imperative mood, is under 50 characters, provides a concise summary in the subject line followed by more detailed explanation in the body. This follows good Git commit message style while capturing the key changes made.
75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"strings"
|
|
|
|
"git.debros.io/DeBros/network/pkg/gateway"
|
|
"git.debros.io/DeBros/network/pkg/logging"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// For transition, alias main.GatewayConfig to pkg/gateway.Config
|
|
// server.go will be removed; this keeps compatibility until then.
|
|
type GatewayConfig = gateway.Config
|
|
|
|
func getEnvDefault(key, def string) string {
|
|
if v := os.Getenv(key); strings.TrimSpace(v) != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
|
|
func getEnvBoolDefault(key string, def bool) bool {
|
|
v := strings.TrimSpace(os.Getenv(key))
|
|
if v == "" {
|
|
return def
|
|
}
|
|
switch strings.ToLower(v) {
|
|
case "1", "true", "t", "yes", "y", "on":
|
|
return true
|
|
case "0", "false", "f", "no", "n", "off":
|
|
return false
|
|
default:
|
|
return def
|
|
}
|
|
}
|
|
|
|
// parseGatewayConfig parses flags and environment variables into GatewayConfig.
|
|
// Priority: flags > env > defaults.
|
|
func parseGatewayConfig(logger *logging.ColoredLogger) *gateway.Config {
|
|
addr := flag.String("addr", getEnvDefault("GATEWAY_ADDR", ":8080"), "HTTP listen address (e.g., :8080)")
|
|
ns := flag.String("namespace", getEnvDefault("GATEWAY_NAMESPACE", "default"), "Client namespace for scoping resources")
|
|
peers := flag.String("bootstrap-peers", getEnvDefault("GATEWAY_BOOTSTRAP_PEERS", ""), "Comma-separated bootstrap peers for network client")
|
|
requireAuth := flag.Bool("require-auth", getEnvBoolDefault("GATEWAY_REQUIRE_AUTH", false), "Require API key authentication for requests")
|
|
|
|
// Do not call flag.Parse() elsewhere to avoid double-parsing
|
|
flag.Parse()
|
|
|
|
var bootstrap []string
|
|
if p := strings.TrimSpace(*peers); p != "" {
|
|
parts := strings.Split(p, ",")
|
|
for _, part := range parts {
|
|
val := strings.TrimSpace(part)
|
|
if val != "" {
|
|
bootstrap = append(bootstrap, val)
|
|
}
|
|
}
|
|
}
|
|
|
|
logger.ComponentInfo(logging.ComponentGeneral, "Loaded gateway configuration",
|
|
zap.String("addr", *addr),
|
|
zap.String("namespace", *ns),
|
|
zap.Int("bootstrap_peer_count", len(bootstrap)),
|
|
zap.Bool("require_auth", *requireAuth),
|
|
)
|
|
|
|
return &gateway.Config{
|
|
ListenAddr: *addr,
|
|
ClientNamespace: *ns,
|
|
BootstrapPeers: bootstrap,
|
|
RequireAuth: *requireAuth,
|
|
}
|
|
}
|