aboutsummaryrefslogtreecommitdiff
path: root/userapi/inthttp
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-15 09:54:11 +0100
committerGitHub <noreply@github.com>2020-06-15 09:54:11 +0100
commit6b5996db1736ee962bd081b67b7f38c1591737f8 (patch)
tree49cee6c3bfe4c906616d2cefee4b2a12bce238e6 /userapi/inthttp
parent0dc4ceaa2d8e46aa0134c1aabe96389ba4c1591d (diff)
Add bare bones user API (#1127)
* Add bare bones user API with tests! * linting
Diffstat (limited to 'userapi/inthttp')
-rw-r--r--userapi/inthttp/client.go62
-rw-r--r--userapi/inthttp/server.go41
2 files changed, 103 insertions, 0 deletions
diff --git a/userapi/inthttp/client.go b/userapi/inthttp/client.go
new file mode 100644
index 00000000..90cc54a4
--- /dev/null
+++ b/userapi/inthttp/client.go
@@ -0,0 +1,62 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package inthttp
+
+import (
+ "context"
+ "errors"
+ "net/http"
+
+ "github.com/matrix-org/dendrite/internal/httputil"
+ "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/opentracing/opentracing-go"
+)
+
+// HTTP paths for the internal HTTP APIs
+const (
+ QueryProfilePath = "/userapi/queryProfile"
+)
+
+// NewUserAPIClient creates a UserInternalAPI implemented by talking to a HTTP POST API.
+// If httpClient is nil an error is returned
+func NewUserAPIClient(
+ apiURL string,
+ httpClient *http.Client,
+) (api.UserInternalAPI, error) {
+ if httpClient == nil {
+ return nil, errors.New("NewUserAPIClient: httpClient is <nil>")
+ }
+ return &httpUserInternalAPI{
+ apiURL: apiURL,
+ httpClient: httpClient,
+ }, nil
+}
+
+type httpUserInternalAPI struct {
+ apiURL string
+ httpClient *http.Client
+}
+
+func (h *httpUserInternalAPI) QueryProfile(
+ ctx context.Context,
+ request *api.QueryProfileRequest,
+ response *api.QueryProfileResponse,
+) error {
+ span, ctx := opentracing.StartSpanFromContext(ctx, "QueryProfile")
+ defer span.Finish()
+
+ apiURL := h.apiURL + QueryProfilePath
+ return httputil.PostJSON(ctx, span, h.httpClient, apiURL, request, response)
+}
diff --git a/userapi/inthttp/server.go b/userapi/inthttp/server.go
new file mode 100644
index 00000000..f3c17ccd
--- /dev/null
+++ b/userapi/inthttp/server.go
@@ -0,0 +1,41 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package inthttp
+
+import (
+ "encoding/json"
+ "net/http"
+
+ "github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/internal/httputil"
+ "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/util"
+)
+
+func AddRoutes(internalAPIMux *mux.Router, s api.UserInternalAPI) {
+ internalAPIMux.Handle(QueryProfilePath,
+ httputil.MakeInternalAPI("queryProfile", func(req *http.Request) util.JSONResponse {
+ request := api.QueryProfileRequest{}
+ response := api.QueryProfileResponse{}
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.MessageResponse(http.StatusBadRequest, err.Error())
+ }
+ if err := s.QueryProfile(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+}