aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/hooki/hooki.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--forged/internal/hooki/hooki.go45
1 files changed, 42 insertions, 3 deletions
diff --git a/forged/internal/hooki/hooki.go b/forged/internal/hooki/hooki.go
index ae26846..8e75bae 100644
--- a/forged/internal/hooki/hooki.go
+++ b/forged/internal/hooki/hooki.go
@@ -1,13 +1,26 @@
package hooki
import (
- "go.lindenii.runxiyu.org/forge/forged/internal/cmap"
+ "fmt"
+ "net"
+
"github.com/gliderlabs/ssh"
+ "go.lindenii.runxiyu.org/forge/forged/internal/cmap"
+ "go.lindenii.runxiyu.org/forge/forged/internal/misc"
)
-type Pool cmap.Map[string, hookinfo]
+type Pool struct {
+ hookMap cmap.Map[string, hookInfo]
+ socketPath string
+ executablesPath string
+}
-type hookinfo struct {
+type Config struct {
+ Socket string `scfg:"socket"`
+ Execs string `scfg:"execs"`
+}
+
+type hookInfo struct {
session ssh.Session
pubkey string
directAccess bool
@@ -19,3 +32,29 @@ type hookinfo struct {
repoName string
contribReq string
}
+
+func New(config Config) (pool Pool) {
+ pool.socketPath = config.Socket
+ pool.executablesPath = config.Execs
+ return
+}
+
+func (pool *Pool) 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 *Pool) handleConn(conn net.Conn) {
+ panic("TODO: handle hook connection")
+}