summaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--main.go55
1 files changed, 47 insertions, 8 deletions
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)