aboutsummaryrefslogtreecommitdiff
path: root/setup/config/config_appservice.go
diff options
context:
space:
mode:
Diffstat (limited to 'setup/config/config_appservice.go')
-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,
)
}