summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/gopkgserver/main.go6
-rw-r--r--go.mod6
-rw-r--r--go.sum6
-rw-r--r--main.go55
4 files changed, 61 insertions, 12 deletions
diff --git a/cmd/gopkgserver/main.go b/cmd/gopkgserver/main.go
index 7248136..a7da65c 100644
--- a/cmd/gopkgserver/main.go
+++ b/cmd/gopkgserver/main.go
@@ -6,5 +6,9 @@ import (
)
func main() {
- runner.Load(gopkgserver.Run)
+ runner.Run(runner.Command{
+ Name: "gopkgsever",
+ Description: "Go Package Vanity Service",
+ Run: gopkgserver.Run,
+ })
}
diff --git a/go.mod b/go.mod
index ac10f3e..1379571 100644
--- a/go.mod
+++ b/go.mod
@@ -1,10 +1,10 @@
module go.sudomsg.com/gopkgserver
-go 1.24.1
+go 1.25.0
require (
github.com/pelletier/go-toml/v2 v2.2.4
- go.sudomsg.com/kit v0.1.1
+ go.sudomsg.com/kit v0.3.0
)
-require golang.org/x/sync v0.16.0 // indirect
+require golang.org/x/sync v0.17.0 // indirect
diff --git a/go.sum b/go.sum
index e5f4434..ca96457 100644
--- a/go.sum
+++ b/go.sum
@@ -2,5 +2,11 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
go.sudomsg.com/kit v0.1.1 h1:mrwLCE+1jnjaA5aj0AE6cZ9YdRgg/GDsR/OX/5faJ14=
go.sudomsg.com/kit v0.1.1/go.mod h1:rFO8lXUV2Ij1deDS0OrfdZ4xpH5akf0jHtVwC0N8fBQ=
+go.sudomsg.com/kit v0.2.1 h1:Bw8l8CRHdvdAL1eaQOni11h6ebvC1KvqCF+/kGDxFfU=
+go.sudomsg.com/kit v0.2.1/go.mod h1:rFO8lXUV2Ij1deDS0OrfdZ4xpH5akf0jHtVwC0N8fBQ=
+go.sudomsg.com/kit v0.3.0 h1:qEpD/W5W6K2FEbmXymx9rqSZvVtzuy4BU4jhXHFRyb8=
+go.sudomsg.com/kit v0.3.0/go.mod h1:UyVq5+uDYshqFqY7zLkVORJj0Uewrujw2xaPjHGoCyM=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
+golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
diff --git a/main.go b/main.go
index 3fe9001..bc74af0 100644
--- a/main.go
+++ b/main.go
@@ -3,8 +3,9 @@ package gopkgserver
import (
"context"
_ "embed"
- "flag"
"fmt"
+ "io/fs"
+ "strconv"
"log/slog"
"net/http"
@@ -15,18 +16,48 @@ import (
httpServer "go.sudomsg.com/kit/http"
"go.sudomsg.com/kit/logging"
logHandler "go.sudomsg.com/kit/logging/http"
+ "go.sudomsg.com/kit/runner"
)
+type ServerConfig struct {
+ Network httpServer.NetType `toml:"network"`
+ Address string `toml:"address"`
+ Mode string `toml:"mode"`
+}
+
+func RawServerConfig(rawCfg []ServerConfig) ([]httpServer.ServerConfig, error) {
+ cfg := make([]httpServer.ServerConfig, 0, len(rawCfg))
+ for _, srv := range rawCfg {
+ var mode uint64
+ if srv.Mode != "" {
+ var err error
+ mode, err = strconv.ParseUint(srv.Mode, 8, 32)
+ if err != nil {
+ return nil, fmt.Errorf("failed to convert mode %s: %w", srv.Mode, err)
+ }
+ }
+ cfg = append(cfg, httpServer.ServerConfig{
+ Network: srv.Network,
+ Address: srv.Address,
+ Mode: fs.FileMode(mode),
+ })
+ }
+ return cfg, nil
+}
+
type Config struct {
- Server []httpServer.ServerConfig `toml:"server"`
- Logging logging.LogConfig `toml:"logging"`
- Repos map[string]repo.Repo `toml:"repo"`
+ Server []ServerConfig `toml:"server"`
+ Logging logging.LogConfig `toml:"logging"`
+ Repos map[string]repo.Repo `toml:"repo"`
}
-func Run(ctx context.Context, fs *flag.FlagSet, args []string) error {
+func Run(ctx context.Context, fs *runner.CommandSet, args []string) error {
var cfgFile string
fs.StringVar(&cfgFile, "config", "config.toml", "Path to config file")
- fs.Parse(args)
+
+ if err := fs.Parse(args); err != nil{
+ return err
+ }
cfg, err := LoadConfig(cfgFile)
if err != nil {
@@ -47,9 +78,17 @@ func Run(ctx context.Context, fs *flag.FlagSet, args []string) error {
mux.Handle("GET /robots.txt", Robot())
mux.Handle("GET /", h)
- handler := logHandler.New(mux, nil)
+ handler := logHandler.New(mux)
- lns, err := httpServer.OpenListeners(ctx, cfg.Server)
+ srvCfg, err := RawServerConfig(cfg.Server)
+ if err != nil {
+ return err
+ }
+
+ lns, err := httpServer.OpenListeners(ctx, srvCfg)
+ if err != nil {
+ return err
+ }
defer lns.CloseAll()
return httpServer.RunHTTPServers(ctx, lns, handler)