aboutsummaryrefslogtreecommitdiff
path: root/forged/internal
diff options
context:
space:
mode:
Diffstat (limited to 'forged/internal')
-rw-r--r--forged/internal/incoming/hooks/hooks.go5
-rw-r--r--forged/internal/incoming/lmtp/lmtp.go (renamed from forged/internal/incoming/lmtp/config.go)4
-rw-r--r--forged/internal/incoming/ssh/ssh.go18
-rw-r--r--forged/internal/incoming/web/web.go22
-rw-r--r--forged/internal/server/server.go12
5 files changed, 40 insertions, 21 deletions
diff --git a/forged/internal/incoming/hooks/hooks.go b/forged/internal/incoming/hooks/hooks.go
index 52ccb0f..65277d4 100644
--- a/forged/internal/incoming/hooks/hooks.go
+++ b/forged/internal/incoming/hooks/hooks.go
@@ -40,6 +40,7 @@ func New(config Config) (server *Server) {
return &Server{
socketPath: config.Socket,
executablesPath: config.Execs,
+ hookMap: cmap.Map[string, hookInfo]{},
}
}
@@ -71,7 +72,9 @@ func (server *Server) Run(ctx context.Context) error {
}
func (server *Server) handleConn(ctx context.Context, conn net.Conn) {
- defer conn.Close()
+ defer func() {
+ _ = conn.Close()
+ }()
unblock := context.AfterFunc(ctx, func() {
_ = conn.SetDeadline(time.Now())
_ = conn.Close()
diff --git a/forged/internal/incoming/lmtp/config.go b/forged/internal/incoming/lmtp/lmtp.go
index def3ce9..cf5618c 100644
--- a/forged/internal/incoming/lmtp/config.go
+++ b/forged/internal/incoming/lmtp/lmtp.go
@@ -64,7 +64,9 @@ func (server *Server) Run(ctx context.Context) error {
}
func (server *Server) handleConn(ctx context.Context, conn net.Conn) {
- defer conn.Close()
+ defer func() {
+ _ = conn.Close()
+ }()
unblock := context.AfterFunc(ctx, func() {
_ = conn.SetDeadline(time.Now())
_ = conn.Close()
diff --git a/forged/internal/incoming/ssh/ssh.go b/forged/internal/incoming/ssh/ssh.go
index 0c722c0..e551863 100644
--- a/forged/internal/incoming/ssh/ssh.go
+++ b/forged/internal/incoming/ssh/ssh.go
@@ -37,15 +37,20 @@ func New(config Config) (server *Server, err error) {
addr: config.Addr,
root: config.Root,
shutdownTimeout: config.ShutdownTimeout,
- }
+ } //exhaustruct:ignore
var privkeyBytes []byte
- if privkeyBytes, err = os.ReadFile(config.Key); err != nil {
+
+ privkeyBytes, err = os.ReadFile(config.Key)
+ if err != nil {
return server, fmt.Errorf("read SSH private key: %w", err)
}
- if server.privkey, err = gossh.ParsePrivateKey(privkeyBytes); err != nil {
+
+ server.privkey, err = gossh.ParsePrivateKey(privkeyBytes)
+ if err != nil {
return server, fmt.Errorf("parse SSH private key: %w", err)
}
+
server.pubkeyString = misc.BytesToString(gossh.MarshalAuthorizedKey(server.privkey.PublicKey()))
server.pubkeyFP = gossh.FingerprintSHA256(server.privkey.PublicKey())
@@ -53,10 +58,10 @@ func New(config Config) (server *Server, err error) {
Handler: handle,
PublicKeyHandler: func(ctx gliderssh.Context, key gliderssh.PublicKey) bool { return true },
KeyboardInteractiveHandler: func(ctx gliderssh.Context, challenge gossh.KeyboardInteractiveChallenge) bool { return true },
- }
+ } //exhaustruct:ignore
server.gliderServer.AddHostKey(server.privkey)
- return
+ return server, nil
}
func (server *Server) Run(ctx context.Context) (err error) {
@@ -76,7 +81,8 @@ func (server *Server) Run(ctx context.Context) (err error) {
})
defer stop()
- if err = server.gliderServer.Serve(listener); err != nil {
+ err = server.gliderServer.Serve(listener)
+ if err != nil {
if errors.Is(err, gliderssh.ErrServerClosed) || ctx.Err() != nil {
return nil
}
diff --git a/forged/internal/incoming/web/web.go b/forged/internal/incoming/web/web.go
index dc2d9b4..fb5bedc 100644
--- a/forged/internal/incoming/web/web.go
+++ b/forged/internal/incoming/web/web.go
@@ -2,6 +2,7 @@ package web
import (
"context"
+ "errors"
"fmt"
"net"
"net/http"
@@ -37,19 +38,19 @@ type Config struct {
}
func New(config Config) (server *Server) {
- handler := &handler{}
+ httpServer := &http.Server{
+ Handler: &handler{},
+ ReadTimeout: time.Duration(config.ReadTimeout) * time.Second,
+ WriteTimeout: time.Duration(config.WriteTimeout) * time.Second,
+ IdleTimeout: time.Duration(config.IdleTimeout) * time.Second,
+ MaxHeaderBytes: config.MaxHeaderBytes,
+ } //exhaustruct:ignore
return &Server{
net: config.Net,
addr: config.Addr,
root: config.Root,
shutdownTimeout: config.ShutdownTimeout,
- httpServer: &http.Server{
- Handler: handler,
- ReadTimeout: time.Duration(config.ReadTimeout) * time.Second,
- WriteTimeout: time.Duration(config.WriteTimeout) * time.Second,
- IdleTimeout: time.Duration(config.IdleTimeout) * time.Second,
- MaxHeaderBytes: config.MaxHeaderBytes,
- },
+ httpServer: httpServer,
}
}
@@ -72,8 +73,9 @@ func (server *Server) Run(ctx context.Context) (err error) {
})
defer stop()
- if err = server.httpServer.Serve(listener); err != nil {
- if err == http.ErrServerClosed || ctx.Err() != nil {
+ err = server.httpServer.Serve(listener)
+ if err != nil {
+ if errors.Is(err, http.ErrServerClosed) || ctx.Err() != nil {
return nil
}
return fmt.Errorf("serve web: %w", err)
diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go
index ab677e0..86332a7 100644
--- a/forged/internal/server/server.go
+++ b/forged/internal/server/server.go
@@ -30,7 +30,7 @@ type Server struct {
}
func New(configPath string) (server *Server, err error) {
- server = &Server{}
+ server = &Server{} //exhaustruct:ignore
server.config, err = config.Open(configPath)
if err != nil {
@@ -65,9 +65,15 @@ func (server *Server) Run(ctx context.Context) (err error) {
g.Go(func() error { return server.webServer.Run(gctx) })
g.Go(func() error { return server.sshServer.Run(gctx) })
- if err := g.Wait(); err != nil {
+ err = g.Wait()
+ if err != nil {
return fmt.Errorf("server error: %w", err)
}
- return ctx.Err()
+ err = ctx.Err()
+ if err != nil {
+ return fmt.Errorf("context exceeded: %w", err)
+ }
+
+ return nil
}