aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/incoming
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-08-17 03:09:52 +0800
committerRunxi Yu <me@runxiyu.org>2025-08-17 03:09:52 +0800
commit009a6e397651a9540b6c6bb74ef2230eeda9b577 (patch)
tree0a808670d95aba5804a73a558cc335a49d230aa6 /forged/internal/incoming
parentRemove HTML templates from main server (diff)
downloadforge-009a6e397651a9540b6c6bb74ef2230eeda9b577.tar.gz
forge-009a6e397651a9540b6c6bb74ef2230eeda9b577.tar.zst
forge-009a6e397651a9540b6c6bb74ef2230eeda9b577.zip
Some mass renaming
Diffstat (limited to 'forged/internal/incoming')
-rw-r--r--forged/internal/incoming/hooks/hooks.go61
-rw-r--r--forged/internal/incoming/lmtp/config.go54
-rw-r--r--forged/internal/incoming/ssh/ssh.go10
-rw-r--r--forged/internal/incoming/web/web.go18
4 files changed, 143 insertions, 0 deletions
diff --git a/forged/internal/incoming/hooks/hooks.go b/forged/internal/incoming/hooks/hooks.go
new file mode 100644
index 0000000..64e1cbe
--- /dev/null
+++ b/forged/internal/incoming/hooks/hooks.go
@@ -0,0 +1,61 @@
+package hooks
+
+import (
+ "fmt"
+ "net"
+
+ "github.com/gliderlabs/ssh"
+ "go.lindenii.runxiyu.org/forge/forged/internal/common/cmap"
+ "go.lindenii.runxiyu.org/forge/forged/internal/common/misc"
+)
+
+type Server struct {
+ hookMap cmap.Map[string, hookInfo]
+ socketPath string
+ executablesPath string
+}
+
+type Config struct {
+ Socket string `scfg:"socket"`
+ Execs string `scfg:"execs"`
+}
+
+type hookInfo struct {
+ session ssh.Session
+ pubkey string
+ directAccess bool
+ repoPath string
+ userID int
+ userType string
+ repoID int
+ groupPath []string
+ repoName string
+ contribReq string
+}
+
+func New(config Config) (pool *Server) {
+ return &Server{
+ socketPath: config.Socket,
+ executablesPath: config.Execs,
+ }
+}
+
+func (pool *Server) Run() error {
+ listener, _, err := misc.ListenUnixSocket(pool.socketPath)
+ if err != nil {
+ return fmt.Errorf("listen unix socket for hooks: %w", err)
+ }
+
+ for {
+ conn, err := listener.Accept()
+ if err != nil {
+ return fmt.Errorf("accept conn: %w", err)
+ }
+
+ go pool.handleConn(conn)
+ }
+}
+
+func (pool *Server) handleConn(conn net.Conn) {
+ panic("TODO: handle hook connection")
+}
diff --git a/forged/internal/incoming/lmtp/config.go b/forged/internal/incoming/lmtp/config.go
new file mode 100644
index 0000000..767f0e4
--- /dev/null
+++ b/forged/internal/incoming/lmtp/config.go
@@ -0,0 +1,54 @@
+package lmtp
+
+import (
+ "fmt"
+ "net"
+
+ "go.lindenii.runxiyu.org/forge/forged/internal/common/misc"
+)
+
+type Server struct {
+ socket string
+ domain string
+ maxSize int64
+ writeTimeout uint32
+ readTimeout uint32
+}
+
+type Config struct {
+ Socket string `scfg:"socket"`
+ Domain string `scfg:"domain"`
+ MaxSize int64 `scfg:"max_size"`
+ WriteTimeout uint32 `scfg:"write_timeout"`
+ ReadTimeout uint32 `scfg:"read_timeout"`
+}
+
+func New(config Config) (pool *Server) {
+ return &Server{
+ socket: config.Socket,
+ domain: config.Domain,
+ maxSize: config.MaxSize,
+ writeTimeout: config.WriteTimeout,
+ readTimeout: config.ReadTimeout,
+ }
+}
+
+func (pool *Server) Run() error {
+ listener, _, err := misc.ListenUnixSocket(pool.socket)
+ if err != nil {
+ return fmt.Errorf("listen unix socket for LMTP: %w", err)
+ }
+
+ for {
+ conn, err := listener.Accept()
+ if err != nil {
+ return fmt.Errorf("accept conn: %w", err)
+ }
+
+ go pool.handleConn(conn)
+ }
+}
+
+func (pool *Server) handleConn(conn net.Conn) {
+ panic("TODO: handle LMTP connection")
+}
diff --git a/forged/internal/incoming/ssh/ssh.go b/forged/internal/incoming/ssh/ssh.go
new file mode 100644
index 0000000..74bd99b
--- /dev/null
+++ b/forged/internal/incoming/ssh/ssh.go
@@ -0,0 +1,10 @@
+package ssh
+
+type Server struct{}
+
+type Config struct {
+ Net string `scfg:"net"`
+ Addr string `scfg:"addr"`
+ Key string `scfg:"key"`
+ Root string `scfg:"root"`
+}
diff --git a/forged/internal/incoming/web/web.go b/forged/internal/incoming/web/web.go
new file mode 100644
index 0000000..e338ef2
--- /dev/null
+++ b/forged/internal/incoming/web/web.go
@@ -0,0 +1,18 @@
+package web
+
+import "net/http"
+
+type Server struct {
+ httpServer *http.Server
+}
+
+type Config 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"`
+}