aboutsummaryrefslogtreecommitdiff
path: root/setup/config
diff options
context:
space:
mode:
authorBoris Rybalkin <ribalkin@gmail.com>2023-03-01 21:57:30 +0000
committerGitHub <noreply@github.com>2023-03-01 22:57:30 +0100
commit6b1c9eafa97cb02dd902ddbf2676c709c86f9625 (patch)
tree143506c78aa0ece86f1838de79ace4b060912606 /setup/config
parent6c20f8f742a7e03710fae81df6ef98bac31da2b1 (diff)
unix socket support (#2974)
### Pull Request Checklist <!-- Please read https://matrix-org.github.io/dendrite/development/contributing before submitting your pull request --> * [x] I have added Go unit tests or [Complement integration tests](https://github.com/matrix-org/complement) for this PR _or_ I have justified why this PR doesn't need tests * [x] Pull request includes a [sign off below using a legally identifiable name](https://matrix-org.github.io/dendrite/development/contributing#sign-off) _or_ I have already signed off privately Signed-off-by: `Boris Rybalkin <ribalkin@gmail.com>` I need this for Syncloud project (https://github.com/syncloud/platform) where I run multiple apps behind an nginx on the same RPi like device so unix socket is very convenient to not have port conflicts between apps. Also someone opened this Issue: https://github.com/matrix-org/dendrite/issues/2924 --------- Co-authored-by: kegsay <kegan@matrix.org> Co-authored-by: Till <2353100+S7evinK@users.noreply.github.com>
Diffstat (limited to 'setup/config')
-rw-r--r--setup/config/config.go15
-rw-r--r--setup/config/config_address.go45
-rw-r--r--setup/config/config_address_test.go25
3 files changed, 70 insertions, 15 deletions
diff --git a/setup/config/config.go b/setup/config/config.go
index 84876616..1a25f71e 100644
--- a/setup/config/config.go
+++ b/setup/config/config.go
@@ -19,7 +19,6 @@ import (
"encoding/pem"
"fmt"
"io"
- "net/url"
"os"
"path/filepath"
"regexp"
@@ -131,20 +130,6 @@ func (d DataSource) IsPostgres() bool {
// A Topic in kafka.
type Topic string
-// An Address to listen on.
-type Address string
-
-// An HTTPAddress to listen on, starting with either http:// or https://.
-type HTTPAddress string
-
-func (h HTTPAddress) Address() (Address, error) {
- url, err := url.Parse(string(h))
- if err != nil {
- return "", err
- }
- return Address(url.Host), nil
-}
-
// FileSizeBytes is a file size in bytes
type FileSizeBytes int64
diff --git a/setup/config/config_address.go b/setup/config/config_address.go
new file mode 100644
index 00000000..0e4f0296
--- /dev/null
+++ b/setup/config/config_address.go
@@ -0,0 +1,45 @@
+package config
+
+import (
+ "io/fs"
+ "net/url"
+)
+
+const (
+ NetworkTCP = "tcp"
+ NetworkUnix = "unix"
+)
+
+type ServerAddress struct {
+ Address string
+ Scheme string
+ UnixSocketPermission fs.FileMode
+}
+
+func (s ServerAddress) Enabled() bool {
+ return s.Address != ""
+}
+
+func (s ServerAddress) IsUnixSocket() bool {
+ return s.Scheme == NetworkUnix
+}
+
+func (s ServerAddress) Network() string {
+ if s.Scheme == NetworkUnix {
+ return NetworkUnix
+ } else {
+ return NetworkTCP
+ }
+}
+
+func UnixSocketAddress(path string, perm fs.FileMode) ServerAddress {
+ return ServerAddress{Address: path, Scheme: NetworkUnix, UnixSocketPermission: perm}
+}
+
+func HTTPAddress(urlAddress string) (ServerAddress, error) {
+ parsedUrl, err := url.Parse(urlAddress)
+ if err != nil {
+ return ServerAddress{}, err
+ }
+ return ServerAddress{parsedUrl.Host, parsedUrl.Scheme, 0}, nil
+}
diff --git a/setup/config/config_address_test.go b/setup/config/config_address_test.go
new file mode 100644
index 00000000..1be484fd
--- /dev/null
+++ b/setup/config/config_address_test.go
@@ -0,0 +1,25 @@
+package config
+
+import (
+ "io/fs"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestHttpAddress_ParseGood(t *testing.T) {
+ address, err := HTTPAddress("http://localhost:123")
+ assert.NoError(t, err)
+ assert.Equal(t, "localhost:123", address.Address)
+ assert.Equal(t, "tcp", address.Network())
+}
+
+func TestHttpAddress_ParseBad(t *testing.T) {
+ _, err := HTTPAddress(":")
+ assert.Error(t, err)
+}
+
+func TestUnixSocketAddress_Network(t *testing.T) {
+ address := UnixSocketAddress("/tmp", fs.FileMode(0755))
+ assert.Equal(t, "unix", address.Network())
+}