aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-08-13 11:22:58 +0800
committerRunxi Yu <me@runxiyu.org>2025-08-13 19:48:32 +0800
commit6cda7644e983c5c2735bb73a5594a2659e87659a (patch)
treee6a0c815d0dd5014e628738f431123039db5d882
parentRemove the mess (diff)
downloadforge-6cda7644e983c5c2735bb73a5594a2659e87659a.tar.gz
forge-6cda7644e983c5c2735bb73a5594a2659e87659a.tar.zst
forge-6cda7644e983c5c2735bb73a5594a2659e87659a.zip
Config placement adjustments
-rw-r--r--forged/internal/config/config.go50
-rw-r--r--forged/internal/database/database.go5
-rw-r--r--forged/internal/hooki/hooki.go21
-rw-r--r--forged/internal/server/server.go32
-rw-r--r--forged/internal/store/store.go3
5 files changed, 111 insertions, 0 deletions
diff --git a/forged/internal/config/config.go b/forged/internal/config/config.go
new file mode 100644
index 0000000..d3eb8e1
--- /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 b995adc..6674fe6 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 0000000..ae26846
--- /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 0000000..ec875f1
--- /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 0000000..0e882ce
--- /dev/null
+++ b/forged/internal/store/store.go
@@ -0,0 +1,3 @@
+package store
+
+type Set struct{} // TODO