aboutsummaryrefslogtreecommitdiff
path: root/setup
diff options
context:
space:
mode:
authorBoris Rybalkin <ribalkin@gmail.com>2023-04-04 08:42:46 +0100
committerGitHub <noreply@github.com>2023-04-04 09:42:46 +0200
commit985298cfc46cb6b33ab44d32a63a933d03e16429 (patch)
tree90b89c2dff3f18bb8cb18f709d5549dccceb0234 /setup
parent682a7d0a66ce0dfd34cff2899daa6f16fdc7ebae (diff)
app service unix socket support (#3022)
This is the last part of unix socket support to talk to app servers, go based app services already support unix sockets: https://github.com/mautrix/go/commit/5a68173fe39345b8473e04bfa67cae5a13f6ca7f ``` appservice: # The address that the homeserver can use to connect to this appservice. address: unix:///var/snap/matrix/current/whatsapp.socket # The hostname and port where this appservice should listen. hostname: /var/snap/matrix/current/whatsapp.socket port: 0 ``` ### 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>`
Diffstat (limited to 'setup')
-rw-r--r--setup/config/config_appservice.go51
1 files changed, 46 insertions, 5 deletions
diff --git a/setup/config/config_appservice.go b/setup/config/config_appservice.go
index 37e20a97..ef10649d 100644
--- a/setup/config/config_appservice.go
+++ b/setup/config/config_appservice.go
@@ -15,16 +15,23 @@
package config
import (
+ "context"
+ "crypto/tls"
"fmt"
+ "net"
+ "net/http"
"os"
"path/filepath"
"regexp"
"strings"
+ "time"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
)
+const UnixSocketPrefix = "unix://"
+
type AppServiceAPI struct {
Matrix *Global `yaml:"-"`
Derived *Derived `yaml:"-"` // TODO: Nuke Derived from orbit
@@ -80,7 +87,41 @@ type ApplicationService struct {
// Whether rate limiting is applied to each application service user
RateLimited bool `yaml:"rate_limited"`
// Any custom protocols that this application service provides (e.g. IRC)
- Protocols []string `yaml:"protocols"`
+ Protocols []string `yaml:"protocols"`
+ HTTPClient *http.Client
+ isUnixSocket bool
+ unixSocket string
+}
+
+func (a *ApplicationService) CreateHTTPClient(insecureSkipVerify bool) {
+ client := &http.Client{
+ Timeout: time.Second * 30,
+ Transport: &http.Transport{
+ DisableKeepAlives: true,
+ TLSClientConfig: &tls.Config{
+ InsecureSkipVerify: insecureSkipVerify,
+ },
+ Proxy: http.ProxyFromEnvironment,
+ },
+ }
+ if strings.HasPrefix(a.URL, UnixSocketPrefix) {
+ a.isUnixSocket = true
+ a.unixSocket = "http://unix"
+ client.Transport = &http.Transport{
+ DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
+ return net.Dial("unix", strings.TrimPrefix(a.URL, UnixSocketPrefix))
+ },
+ }
+ }
+ a.HTTPClient = client
+}
+
+func (a *ApplicationService) RequestUrl() string {
+ if a.isUnixSocket {
+ return a.unixSocket
+ } else {
+ return a.URL
+ }
}
// IsInterestedInRoomID returns a bool on whether an application service's
@@ -152,7 +193,7 @@ func (a *ApplicationService) IsInterestedInRoomAlias(
func loadAppServices(config *AppServiceAPI, derived *Derived) error {
for _, configPath := range config.ConfigFiles {
// Create a new application service with default options
- appservice := ApplicationService{
+ appservice := &ApplicationService{
RateLimited: true,
}
@@ -169,13 +210,13 @@ func loadAppServices(config *AppServiceAPI, derived *Derived) error {
}
// Load the config data into our struct
- if err = yaml.Unmarshal(configData, &appservice); err != nil {
+ if err = yaml.Unmarshal(configData, appservice); err != nil {
return err
}
-
+ appservice.CreateHTTPClient(config.DisableTLSValidation)
// Append the parsed application service to the global config
derived.ApplicationServices = append(
- derived.ApplicationServices, appservice,
+ derived.ApplicationServices, *appservice,
)
}