aboutsummaryrefslogtreecommitdiff
path: root/appservice
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-04 15:43:07 +0100
committerGitHub <noreply@github.com>2020-06-04 15:43:07 +0100
commit9834ac97db042b0c78fbd72652aa534129ca3afe (patch)
tree4fd862ffba61e47f94b2fcc5685a0502e21b3c70 /appservice
parentd785ad82b996989381657292fbd2c28b9fbb7df6 (diff)
Convert everything but serverkeyapi to inthttp (#1096)
* Convert roomserver to new inthttp format * Convert eduserver to new inthttp format * Convert appservice to new inthttp format
Diffstat (limited to 'appservice')
-rw-r--r--appservice/api/query.go57
-rw-r--r--appservice/appservice.go7
-rw-r--r--appservice/inthttp/client.go63
-rw-r--r--appservice/inthttp/server.go43
-rw-r--r--appservice/query/query.go37
5 files changed, 111 insertions, 96 deletions
diff --git a/appservice/api/query.go b/appservice/api/query.go
index d36e138c..6fcb2089 100644
--- a/appservice/api/query.go
+++ b/appservice/api/query.go
@@ -20,16 +20,12 @@ package api
import (
"context"
"database/sql"
- "errors"
- "net/http"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/dendrite/internal"
- internalHTTP "github.com/matrix-org/dendrite/internal/http"
- opentracing "github.com/opentracing/opentracing-go"
)
// RoomAliasExistsRequest is a request to an application service
@@ -83,60 +79,9 @@ type AppServiceQueryAPI interface {
) error
}
-// AppServiceRoomAliasExistsPath is the HTTP path for the RoomAliasExists API
-const AppServiceRoomAliasExistsPath = "/appservice/RoomAliasExists"
-
-// AppServiceUserIDExistsPath is the HTTP path for the UserIDExists API
-const AppServiceUserIDExistsPath = "/appservice/UserIDExists"
-
-// httpAppServiceQueryAPI contains the URL to an appservice query API and a
-// reference to a httpClient used to reach it
-type httpAppServiceQueryAPI struct {
- appserviceURL string
- httpClient *http.Client
-}
-
-// NewAppServiceQueryAPIHTTP creates a AppServiceQueryAPI implemented by talking
-// to a HTTP POST API.
-// If httpClient is nil an error is returned
-func NewAppServiceQueryAPIHTTP(
- appserviceURL string,
- httpClient *http.Client,
-) (AppServiceQueryAPI, error) {
- if httpClient == nil {
- return nil, errors.New("NewRoomserverAliasAPIHTTP: httpClient is <nil>")
- }
- return &httpAppServiceQueryAPI{appserviceURL, httpClient}, nil
-}
-
-// RoomAliasExists implements AppServiceQueryAPI
-func (h *httpAppServiceQueryAPI) RoomAliasExists(
- ctx context.Context,
- request *RoomAliasExistsRequest,
- response *RoomAliasExistsResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "appserviceRoomAliasExists")
- defer span.Finish()
-
- apiURL := h.appserviceURL + AppServiceRoomAliasExistsPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
-// UserIDExists implements AppServiceQueryAPI
-func (h *httpAppServiceQueryAPI) UserIDExists(
- ctx context.Context,
- request *UserIDExistsRequest,
- response *UserIDExistsResponse,
-) error {
- span, ctx := opentracing.StartSpanFromContext(ctx, "appserviceUserIDExists")
- defer span.Finish()
-
- apiURL := h.appserviceURL + AppServiceUserIDExistsPath
- return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
-}
-
// RetrieveUserProfile is a wrapper that queries both the local database and
// application services for a given user's profile
+// TODO: Remove this, it's called from federationapi and clientapi but is a pure function
func RetrieveUserProfile(
ctx context.Context,
userID string,
diff --git a/appservice/appservice.go b/appservice/appservice.go
index 68cf52e7..b5ffba5e 100644
--- a/appservice/appservice.go
+++ b/appservice/appservice.go
@@ -23,6 +23,7 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/appservice/consumers"
+ "github.com/matrix-org/dendrite/appservice/inthttp"
"github.com/matrix-org/dendrite/appservice/query"
"github.com/matrix-org/dendrite/appservice/routing"
"github.com/matrix-org/dendrite/appservice/storage"
@@ -77,14 +78,14 @@ func SetupAppServiceAPIComponent(
// Create appserivce query API with an HTTP client that will be used for all
// outbound and inbound requests (inbound only for the internal API)
- appserviceQueryAPI := query.AppServiceQueryAPI{
+ appserviceQueryAPI := &query.AppServiceQueryAPI{
HTTPClient: &http.Client{
Timeout: time.Second * 30,
},
Cfg: base.Cfg,
}
- appserviceQueryAPI.SetupHTTP(base.InternalAPIMux)
+ inthttp.AddRoutes(appserviceQueryAPI, base.InternalAPIMux)
consumer := consumers.NewOutputRoomEventConsumer(
base.Cfg, base.KafkaConsumer, accountsDB, appserviceDB,
@@ -105,7 +106,7 @@ func SetupAppServiceAPIComponent(
accountsDB, federation, transactionsCache,
)
- return &appserviceQueryAPI
+ return appserviceQueryAPI
}
// generateAppServiceAccounts creates a dummy account based off the
diff --git a/appservice/inthttp/client.go b/appservice/inthttp/client.go
new file mode 100644
index 00000000..acbd1211
--- /dev/null
+++ b/appservice/inthttp/client.go
@@ -0,0 +1,63 @@
+package inthttp
+
+import (
+ "context"
+ "errors"
+ "net/http"
+
+ "github.com/matrix-org/dendrite/appservice/api"
+ internalHTTP "github.com/matrix-org/dendrite/internal/http"
+ "github.com/opentracing/opentracing-go"
+)
+
+// HTTP paths for the internal HTTP APIs
+const (
+ AppServiceRoomAliasExistsPath = "/appservice/RoomAliasExists"
+ AppServiceUserIDExistsPath = "/appservice/UserIDExists"
+)
+
+// httpAppServiceQueryAPI contains the URL to an appservice query API and a
+// reference to a httpClient used to reach it
+type httpAppServiceQueryAPI struct {
+ appserviceURL string
+ httpClient *http.Client
+}
+
+// NewAppserviceClient creates a AppServiceQueryAPI implemented by talking
+// to a HTTP POST API.
+// If httpClient is nil an error is returned
+func NewAppserviceClient(
+ appserviceURL string,
+ httpClient *http.Client,
+) (api.AppServiceQueryAPI, error) {
+ if httpClient == nil {
+ return nil, errors.New("NewRoomserverAliasAPIHTTP: httpClient is <nil>")
+ }
+ return &httpAppServiceQueryAPI{appserviceURL, httpClient}, nil
+}
+
+// RoomAliasExists implements AppServiceQueryAPI
+func (h *httpAppServiceQueryAPI) RoomAliasExists(
+ ctx context.Context,
+ request *api.RoomAliasExistsRequest,
+ response *api.RoomAliasExistsResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "appserviceRoomAliasExists")
+ defer span.Finish()
+
+ apiURL := h.appserviceURL + AppServiceRoomAliasExistsPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
+
+// UserIDExists implements AppServiceQueryAPI
+func (h *httpAppServiceQueryAPI) UserIDExists(
+ ctx context.Context,
+ request *api.UserIDExistsRequest,
+ response *api.UserIDExistsResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "appserviceUserIDExists")
+ defer span.Finish()
+
+ apiURL := h.appserviceURL + AppServiceUserIDExistsPath
+ return internalHTTP.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
diff --git a/appservice/inthttp/server.go b/appservice/inthttp/server.go
new file mode 100644
index 00000000..1900635a
--- /dev/null
+++ b/appservice/inthttp/server.go
@@ -0,0 +1,43 @@
+package inthttp
+
+import (
+ "encoding/json"
+ "net/http"
+
+ "github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/appservice/api"
+ "github.com/matrix-org/dendrite/internal"
+ "github.com/matrix-org/util"
+)
+
+// AddRoutes adds the AppServiceQueryAPI handlers to the http.ServeMux.
+func AddRoutes(a api.AppServiceQueryAPI, internalAPIMux *mux.Router) {
+ internalAPIMux.Handle(
+ AppServiceRoomAliasExistsPath,
+ internal.MakeInternalAPI("appserviceRoomAliasExists", func(req *http.Request) util.JSONResponse {
+ var request api.RoomAliasExistsRequest
+ var response api.RoomAliasExistsResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := a.RoomAliasExists(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ internalAPIMux.Handle(
+ AppServiceUserIDExistsPath,
+ internal.MakeInternalAPI("appserviceUserIDExists", func(req *http.Request) util.JSONResponse {
+ var request api.UserIDExistsRequest
+ var response api.UserIDExistsResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := a.UserIDExists(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+}
diff --git a/appservice/query/query.go b/appservice/query/query.go
index 812ca9f4..fa3844f6 100644
--- a/appservice/query/query.go
+++ b/appservice/query/query.go
@@ -18,16 +18,12 @@ package query
import (
"context"
- "encoding/json"
"net/http"
"net/url"
"time"
- "github.com/gorilla/mux"
"github.com/matrix-org/dendrite/appservice/api"
- "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/config"
- "github.com/matrix-org/util"
opentracing "github.com/opentracing/opentracing-go"
log "github.com/sirupsen/logrus"
)
@@ -180,36 +176,3 @@ func makeHTTPClient() *http.Client {
Timeout: time.Second * 30,
}
}
-
-// SetupHTTP adds the AppServiceQueryPAI handlers to the http.ServeMux. This
-// handles and muxes incoming api requests the to internal AppServiceQueryAPI.
-func (a *AppServiceQueryAPI) SetupHTTP(internalAPIMux *mux.Router) {
- internalAPIMux.Handle(
- api.AppServiceRoomAliasExistsPath,
- internal.MakeInternalAPI("appserviceRoomAliasExists", func(req *http.Request) util.JSONResponse {
- var request api.RoomAliasExistsRequest
- var response api.RoomAliasExistsResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := a.RoomAliasExists(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- internalAPIMux.Handle(
- api.AppServiceUserIDExistsPath,
- internal.MakeInternalAPI("appserviceUserIDExists", func(req *http.Request) util.JSONResponse {
- var request api.UserIDExistsRequest
- var response api.UserIDExistsResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := a.UserIDExists(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
-}