From 009a6e397651a9540b6c6bb74ef2230eeda9b577 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 17 Aug 2025 03:09:52 +0800 Subject: Some mass renaming --- forged/internal/incoming/hooks/hooks.go | 61 +++++++++++++++++++++++++++++++++ forged/internal/incoming/lmtp/config.go | 54 +++++++++++++++++++++++++++++ forged/internal/incoming/ssh/ssh.go | 10 ++++++ forged/internal/incoming/web/web.go | 18 ++++++++++ 4 files changed, 143 insertions(+) create mode 100644 forged/internal/incoming/hooks/hooks.go create mode 100644 forged/internal/incoming/lmtp/config.go create mode 100644 forged/internal/incoming/ssh/ssh.go create mode 100644 forged/internal/incoming/web/web.go (limited to 'forged/internal/incoming') 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"` +} -- cgit v1.2.3