aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-01 02:02:35 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-01 02:02:35 +0800
commit09ceac3a3684d20610c0466b5fe3223ca77d766f (patch)
tree167188efaf2d229075e3f79da82e958a32debb82 /main.go
parentUpdate URL (diff)
downloadforge-09ceac3a3684d20610c0466b5fe3223ca77d766f.tar.gz
forge-09ceac3a3684d20610c0466b5fe3223ca77d766f.tar.zst
forge-09ceac3a3684d20610c0466b5fe3223ca77d766f.zip
Stub LMTP listener
Diffstat (limited to 'main.go')
-rw-r--r--main.go130
1 files changed, 78 insertions, 52 deletions
diff --git a/main.go b/main.go
index 90a0bac..75e187f 100644
--- a/main.go
+++ b/main.go
@@ -33,72 +33,98 @@ func main() {
}
// UNIX socket listener for hooks
- var hooksListener net.Listener
- var err error
- hooksListener, err = net.Listen("unix", config.Hooks.Socket)
- if errors.Is(err, syscall.EADDRINUSE) {
- clog.Warn("Removing existing socket " + config.Hooks.Socket)
- if err = syscall.Unlink(config.Hooks.Socket); err != nil {
- clog.Fatal(1, "Removing existing socket: "+err.Error())
- }
- if hooksListener, err = net.Listen("unix", config.Hooks.Socket); err != nil {
+ {
+ hooksListener, err := net.Listen("unix", config.Hooks.Socket)
+ if errors.Is(err, syscall.EADDRINUSE) {
+ clog.Warn("Removing existing socket " + config.Hooks.Socket)
+ if err = syscall.Unlink(config.Hooks.Socket); err != nil {
+ clog.Fatal(1, "Removing existing socket: "+err.Error())
+ }
+ if hooksListener, err = net.Listen("unix", config.Hooks.Socket); err != nil {
+ clog.Fatal(1, "Listening hooks: "+err.Error())
+ }
+ } else if err != nil {
clog.Fatal(1, "Listening hooks: "+err.Error())
}
- } else if err != nil {
- clog.Fatal(1, "Listening hooks: "+err.Error())
+ clog.Info("Listening hooks on unix " + config.Hooks.Socket)
+ go func() {
+ if err = serveGitHooks(hooksListener); err != nil {
+ clog.Fatal(1, "Serving hooks: "+err.Error())
+ }
+ }()
}
- clog.Info("Listening hooks on unix " + config.Hooks.Socket)
- go func() {
- if err = serveGitHooks(hooksListener); err != nil {
- clog.Fatal(1, "Serving hooks: "+err.Error())
+
+ // UNIX socket listener for LMTP
+ {
+ lmtpListener, err := net.Listen("unix", config.LMTP.Socket)
+ if errors.Is(err, syscall.EADDRINUSE) {
+ clog.Warn("Removing existing socket " + config.LMTP.Socket)
+ if err = syscall.Unlink(config.LMTP.Socket); err != nil {
+ clog.Fatal(1, "Removing existing socket: "+err.Error())
+ }
+ if lmtpListener, err = net.Listen("unix", config.LMTP.Socket); err != nil {
+ clog.Fatal(1, "Listening LMTP: "+err.Error())
+ }
+ } else if err != nil {
+ clog.Fatal(1, "Listening LMTP: "+err.Error())
}
- }()
+ clog.Info("Listening LMTP on unix " + config.LMTP.Socket)
+ go func() {
+ if err = serveLMTP(lmtpListener); err != nil {
+ clog.Fatal(1, "Serving LMTP: "+err.Error())
+ }
+ }()
+ }
// SSH listener
- sshListener, err := net.Listen(config.SSH.Net, config.SSH.Addr)
- if errors.Is(err, syscall.EADDRINUSE) && config.SSH.Net == "unix" {
- clog.Warn("Removing existing socket " + config.SSH.Addr)
- if err = syscall.Unlink(config.SSH.Addr); err != nil {
- clog.Fatal(1, "Removing existing socket: "+err.Error())
- }
- if sshListener, err = net.Listen(config.SSH.Net, config.SSH.Addr); err != nil {
+ {
+ sshListener, err := net.Listen(config.SSH.Net, config.SSH.Addr)
+ if errors.Is(err, syscall.EADDRINUSE) && config.SSH.Net == "unix" {
+ clog.Warn("Removing existing socket " + config.SSH.Addr)
+ if err = syscall.Unlink(config.SSH.Addr); err != nil {
+ clog.Fatal(1, "Removing existing socket: "+err.Error())
+ }
+ if sshListener, err = net.Listen(config.SSH.Net, config.SSH.Addr); err != nil {
+ clog.Fatal(1, "Listening SSH: "+err.Error())
+ }
+ } else if err != nil {
clog.Fatal(1, "Listening SSH: "+err.Error())
}
- } else if err != nil {
- clog.Fatal(1, "Listening SSH: "+err.Error())
+ clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr)
+ go func() {
+ if err = serveSSH(sshListener); err != nil {
+ clog.Fatal(1, "Serving SSH: "+err.Error())
+ }
+ }()
}
- clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr)
- go func() {
- if err = serveSSH(sshListener); err != nil {
- clog.Fatal(1, "Serving SSH: "+err.Error())
- }
- }()
// HTTP listener
- httpListener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr)
- if errors.Is(err, syscall.EADDRINUSE) && config.HTTP.Net == "unix" {
- clog.Warn("Removing existing socket " + config.HTTP.Addr)
- if err = syscall.Unlink(config.HTTP.Addr); err != nil {
- clog.Fatal(1, "Removing existing socket: "+err.Error())
- }
- if httpListener, err = net.Listen(config.HTTP.Net, config.HTTP.Addr); err != nil {
+ {
+ httpListener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr)
+ if errors.Is(err, syscall.EADDRINUSE) && config.HTTP.Net == "unix" {
+ clog.Warn("Removing existing socket " + config.HTTP.Addr)
+ if err = syscall.Unlink(config.HTTP.Addr); err != nil {
+ clog.Fatal(1, "Removing existing socket: "+err.Error())
+ }
+ if httpListener, err = net.Listen(config.HTTP.Net, config.HTTP.Addr); err != nil {
+ clog.Fatal(1, "Listening HTTP: "+err.Error())
+ }
+ } else if err != nil {
clog.Fatal(1, "Listening HTTP: "+err.Error())
}
- } else if err != nil {
- clog.Fatal(1, "Listening HTTP: "+err.Error())
+ server := http.Server{
+ Handler: &forgeHTTPRouter{},
+ ReadTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
+ WriteTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
+ IdleTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
+ } //exhaustruct:ignore
+ clog.Info("Listening HTTP on " + config.HTTP.Net + " " + config.HTTP.Addr)
+ go func() {
+ if err = server.Serve(httpListener); err != nil && !errors.Is(err, http.ErrServerClosed) {
+ clog.Fatal(1, "Serving HTTP: "+err.Error())
+ }
+ }()
}
- server := http.Server{
- Handler: &forgeHTTPRouter{},
- ReadTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
- WriteTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
- IdleTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second,
- } //exhaustruct:ignore
- clog.Info("Listening HTTP on " + config.HTTP.Net + " " + config.HTTP.Addr)
- go func() {
- if err = server.Serve(httpListener); err != nil && !errors.Is(err, http.ErrServerClosed) {
- clog.Fatal(1, "Serving HTTP: "+err.Error())
- }
- }()
// IRC bot
go ircBotLoop()