From 6cda7644e983c5c2735bb73a5594a2659e87659a Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 13 Aug 2025 11:22:58 +0800 Subject: [PATCH] Config placement adjustments --- forged/internal/config/config.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ forged/internal/database/database.go | 5 +++++ forged/internal/hooki/hooki.go | 21 +++++++++++++++++++++ forged/internal/server/server.go | 32 ++++++++++++++++++++++++++++++++ forged/internal/store/store.go | 3 +++ diff --git a/forged/internal/config/config.go b/forged/internal/config/config.go new file mode 100644 index 0000000000000000000000000000000000000000..d3eb8e1fd251915b042befc78907ce592c84ccfe --- /dev/null +++ b/forged/internal/config/config.go @@ -0,0 +1,50 @@ +package config + +import ( + "go.lindenii.runxiyu.org/forge/forged/internal/database" + "go.lindenii.runxiyu.org/forge/forged/internal/irc" +) + +type Config struct { + HTTP struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + CookieExpiry int `scfg:"cookie_expiry"` + Root string `scfg:"root"` + ReadTimeout uint32 `scfg:"read_timeout"` + WriteTimeout uint32 `scfg:"write_timeout"` + IdleTimeout uint32 `scfg:"idle_timeout"` + ReverseProxy bool `scfg:"reverse_proxy"` + } `scfg:"http"` + Hooks struct { + Socket string `scfg:"socket"` + Execs string `scfg:"execs"` + } `scfg:"hooks"` + LMTP struct { + Socket string `scfg:"socket"` + Domain string `scfg:"domain"` + MaxSize int64 `scfg:"max_size"` + WriteTimeout uint32 `scfg:"write_timeout"` + ReadTimeout uint32 `scfg:"read_timeout"` + } `scfg:"lmtp"` + Git struct { + RepoDir string `scfg:"repo_dir"` + Socket string `scfg:"socket"` + DaemonPath string `scfg:"daemon_path"` + } `scfg:"git"` + SSH struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + Key string `scfg:"key"` + Root string `scfg:"root"` + } `scfg:"ssh"` + IRC irc.Config `scfg:"irc"` + General struct { + Title string `scfg:"title"` + } `scfg:"general"` + DB database.Config `scfg:"db"` + Pprof struct { + Net string `scfg:"net"` + Addr string `scfg:"addr"` + } `scfg:"pprof"` +} diff --git a/forged/internal/database/database.go b/forged/internal/database/database.go index b995adc8cabbc4b6138468682c3c7022bda6631e..6674fe615b1acd574fd3ea5976c5f82c894ffa9e 100644 --- a/forged/internal/database/database.go +++ b/forged/internal/database/database.go @@ -23,3 +23,8 @@ func Open(connString string) (Database, error) { db, err := pgxpool.New(context.Background(), connString) return Database{db}, err } + +type Config struct { + Type string `scfg:"type"` + Conn string `scfg:"conn"` +} diff --git a/forged/internal/hooki/hooki.go b/forged/internal/hooki/hooki.go new file mode 100644 index 0000000000000000000000000000000000000000..ae2684603f16d231fa73d8d49c64622e4801aac7 --- /dev/null +++ b/forged/internal/hooki/hooki.go @@ -0,0 +1,21 @@ +package hooki + +import ( + "go.lindenii.runxiyu.org/forge/forged/internal/cmap" + "github.com/gliderlabs/ssh" +) + +type Pool cmap.Map[string, hookinfo] + +type hookinfo struct { + session ssh.Session + pubkey string + directAccess bool + repoPath string + userID int + userType string + repoID int + groupPath []string + repoName string + contribReq string +} diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go new file mode 100644 index 0000000000000000000000000000000000000000..ec875f1bf67d7a957faec45cb2f24c8848638754 --- /dev/null +++ b/forged/internal/server/server.go @@ -0,0 +1,32 @@ +package server + +import ( + "context" + "fmt" + "html/template" + + "go.lindenii.runxiyu.org/forge/forged/internal/config" + "go.lindenii.runxiyu.org/forge/forged/internal/database" + "go.lindenii.runxiyu.org/forge/forged/internal/hooki" + "go.lindenii.runxiyu.org/forge/forged/internal/store" +) + +type Server struct { + config config.Config + + database database.Database + stores *store.Set + hookis *hooki.Pool + templates *template.Template +} + +func New(ctx context.Context, config config.Config) (*Server, error) { + database, err := database.Open(ctx, config.DB) + if err != nil { + return nil, fmt.Errorf("open database: %w", err) + } + + return &Server{ + database: database, + }, nil +} diff --git a/forged/internal/store/store.go b/forged/internal/store/store.go new file mode 100644 index 0000000000000000000000000000000000000000..0e882ce0adfcc7fded1c0635b6ed1c9ecf5e0240 --- /dev/null +++ b/forged/internal/store/store.go @@ -0,0 +1,3 @@ +package store + +type Set struct{} // TODO -- 2.48.1