summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config_example.yaml2
-rw-r--r--go.mod1
-rw-r--r--go.sum2
-rw-r--r--main.go62
-rw-r--r--systemd/fwdsms.service1
-rw-r--r--systemd/fwdsms.socket11
6 files changed, 57 insertions, 22 deletions
diff --git a/config_example.yaml b/config_example.yaml
index 8da39e3..180933d 100644
--- a/config_example.yaml
+++ b/config_example.yaml
@@ -15,6 +15,6 @@ smtp:
password: some password
twilio:
- address: /run/fwdsms/socket
+ address: 127.0.0.1:8080
authToken: some token
endpoint: /
diff --git a/go.mod b/go.mod
index 41e3533..83deb6b 100644
--- a/go.mod
+++ b/go.mod
@@ -6,6 +6,7 @@ require (
github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0
github.com/stretchr/testify v1.7.0
+ go.awhk.org/gosdd v0.2.0
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)
diff --git a/go.sum b/go.sum
index 5efac10..fd2148f 100644
--- a/go.sum
+++ b/go.sum
@@ -11,6 +11,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+go.awhk.org/gosdd v0.2.0 h1:fNqC+9LtwfwUxDDq0d8cIoFllbzZmi8+fUIlew5D7vc=
+go.awhk.org/gosdd v0.2.0/go.mod h1:9LeQ9cX4ZghIWv6kF9ljk83NzsZJqQR3/R61DbsU3YI=
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b h1:lAZ0/chPUDWwjqosYR0X4M490zQhMsiJ4K3DbA7o+3g=
golang.org/x/sys v0.0.0-20210218155724-8ebf48af031b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
diff --git a/main.go b/main.go
index 090331f..5a000b3 100644
--- a/main.go
+++ b/main.go
@@ -18,6 +18,7 @@ import (
"golang.org/x/sys/unix"
"go.awhk.org/fwdsms/pkg/twilio"
+ "go.awhk.org/gosdd"
)
var cfgFilename = flag.String("c", "/etc/fwdsms.yaml", "configuration file")
@@ -49,29 +50,18 @@ func main() {
Handler: twilio.EmptyResponseHandler,
},
}))
+
srv := http.Server{Handler: r}
go func() {
- var (
- l net.Listener
- err error
- )
- if cfg.Twilio.Address != "" && cfg.Twilio.Address[0] == '/' {
- if l, err = net.Listen("unix", cfg.Twilio.Address); err != nil {
- log.Fatalf("Could not set up UNIX listener: %v.", err)
- }
- if err = os.Chmod(cfg.Twilio.Address, 0666); err != nil {
- log.Fatalf("Could not set up permissions on UNIX socket: %v.", err)
- }
- } else {
- if cfg.Twilio.Address == "" {
- cfg.Twilio.Address = ":8080"
- }
- if l, err = net.Listen("tcp", cfg.Twilio.Address); err != nil {
- log.Fatalf("Could not set up TCP listener: %v.", err)
- }
+ ln, err := listenSD()
+ if err != nil {
+ log.Fatalf("Failed to listen on systemd socket: %s.", err)
+ }
+ if ln == nil {
+ ln = listenEnv(cfg)
}
- if err = srv.Serve(l); err != nil && err != http.ErrServerClosed {
- log.Fatalf("Failed to serve HTTP: %v.", err)
+ if err = srv.Serve(ln); err != nil && err != http.ErrServerClosed {
+ log.Fatalf("Failed to serve HTTP: %s.", err)
}
}()
@@ -87,3 +77,35 @@ func main() {
log.Fatalf("Failed to properly shut down the HTTP server: %v.", err)
}
}
+
+func listenEnv(cfg *Config) net.Listener {
+ if cfg.Twilio.Address != "" && cfg.Twilio.Address[0] == '/' {
+ ln, err := net.Listen("unix", cfg.Twilio.Address)
+ if err != nil {
+ log.Fatalf("Could not set up UNIX listener: %s.", err)
+ }
+ if err := os.Chmod(cfg.Twilio.Address, 0666); err != nil {
+ log.Fatalf("Could not set up permissions on UNIX socket: %s.", err)
+ }
+ return ln
+ }
+ ln, err := net.Listen("tcp", cfg.Twilio.Address)
+ if err != nil {
+ log.Fatalf("Could not set up TCP listener: %s.", err)
+ }
+ return ln
+}
+
+func listenSD() (net.Listener, error) {
+ fds, err := gosdd.SDListenFDs(true)
+ if err != nil {
+ if err == gosdd.ErrNoSDSupport {
+ return nil, nil
+ }
+ return nil, err
+ }
+ if len(fds) == 0 {
+ return nil, nil
+ }
+ return net.FileListener(fds[0])
+}
diff --git a/systemd/fwdsms.service b/systemd/fwdsms.service
index a095805..3f3af29 100644
--- a/systemd/fwdsms.service
+++ b/systemd/fwdsms.service
@@ -7,7 +7,6 @@ Description=SMS-to-email Forwarder
[Service]
ExecStart=fwdsms
DynamicUser=true
-RuntimeDirectory=fwdsms
[Install]
WantedBy=multi-user.target
diff --git a/systemd/fwdsms.socket b/systemd/fwdsms.socket
new file mode 100644
index 0000000..8914600
--- /dev/null
+++ b/systemd/fwdsms.socket
@@ -0,0 +1,11 @@
+# SPDX-FileCopyrightText: © 2021 Grégoire Duchêne <gduchene@awhk.org>
+# SPDX-License-Identifier: ISC
+
+[Unit]
+Description=fwdsms Socket
+
+[Socket]
+ListenStream=%t/fwdsms
+
+[Install]
+WantedBy=sockets.target