aboutsummaryrefslogtreecommitdiff
path: root/clientapi
diff options
context:
space:
mode:
authordevonh <devon.dmytro@gmail.com>2023-05-09 22:46:49 +0000
committerGitHub <noreply@github.com>2023-05-09 22:46:49 +0000
commit0489d16f95a3d9f1f5bc532e2060bd2482d7b156 (patch)
treea0573b5a0c21ca563e97abae81e36d66ad14e7d8 /clientapi
parenta49c9f01e227aeb12aa2f27d5bf1915453c23a3b (diff)
Move json errors over to gmsl (#3080)
Diffstat (limited to 'clientapi')
-rw-r--r--clientapi/auth/auth.go10
-rw-r--r--clientapi/auth/login.go8
-rw-r--r--clientapi/auth/login_test.go6
-rw-r--r--clientapi/auth/login_token.go6
-rw-r--r--clientapi/auth/password.go16
-rw-r--r--clientapi/auth/user_interactive.go12
-rw-r--r--clientapi/httputil/httputil.go8
-rw-r--r--clientapi/jsonerror/jsonerror.go246
-rw-r--r--clientapi/jsonerror/jsonerror_test.go44
-rw-r--r--clientapi/routing/account_data.go18
-rw-r--r--clientapi/routing/admin.go29
-rw-r--r--clientapi/routing/admin_whois.go6
-rw-r--r--clientapi/routing/aliases.go6
-rw-r--r--clientapi/routing/createroom.go55
-rw-r--r--clientapi/routing/deactivate.go8
-rw-r--r--clientapi/routing/device.go30
-rw-r--r--clientapi/routing/directory.go41
-rw-r--r--clientapi/routing/directory_public.go11
-rw-r--r--clientapi/routing/joined_rooms.go4
-rw-r--r--clientapi/routing/joinroom.go15
-rw-r--r--clientapi/routing/key_backup.go20
-rw-r--r--clientapi/routing/key_crosssigning.go26
-rw-r--r--clientapi/routing/keys.go18
-rw-r--r--clientapi/routing/leaveroom.go6
-rw-r--r--clientapi/routing/login.go10
-rw-r--r--clientapi/routing/logout.go6
-rw-r--r--clientapi/routing/membership.go57
-rw-r--r--clientapi/routing/notification.go8
-rw-r--r--clientapi/routing/openid.go6
-rw-r--r--clientapi/routing/password.go12
-rw-r--r--clientapi/routing/peekroom.go11
-rw-r--r--clientapi/routing/presence.go11
-rw-r--r--clientapi/routing/profile.go40
-rw-r--r--clientapi/routing/pusher.go12
-rw-r--r--clientapi/routing/pushrules.go60
-rw-r--r--clientapi/routing/receipt.go3
-rw-r--r--clientapi/routing/redaction.go19
-rw-r--r--clientapi/routing/register.go65
-rw-r--r--clientapi/routing/register_test.go24
-rw-r--r--clientapi/routing/room_tagging.go18
-rw-r--r--clientapi/routing/routing.go23
-rw-r--r--clientapi/routing/sendevent.go33
-rw-r--r--clientapi/routing/sendtodevice.go4
-rw-r--r--clientapi/routing/sendtyping.go6
-rw-r--r--clientapi/routing/server_notices.go12
-rw-r--r--clientapi/routing/state.go25
-rw-r--r--clientapi/routing/thirdparty.go14
-rw-r--r--clientapi/routing/threepid.go28
-rw-r--r--clientapi/routing/upgrade_room.go10
-rw-r--r--clientapi/routing/voip.go4
50 files changed, 427 insertions, 743 deletions
diff --git a/clientapi/auth/auth.go b/clientapi/auth/auth.go
index 93345f4b..479b9ac7 100644
--- a/clientapi/auth/auth.go
+++ b/clientapi/auth/auth.go
@@ -23,8 +23,8 @@ import (
"net/http"
"strings"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -58,7 +58,7 @@ func VerifyUserFromRequest(
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.MissingToken(err.Error()),
+ JSON: spec.MissingToken(err.Error()),
}
}
var res api.QueryAccessTokenResponse
@@ -68,21 +68,21 @@ func VerifyUserFromRequest(
}, &res)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("userAPI.QueryAccessToken failed")
- jsonErr := jsonerror.InternalServerError()
+ jsonErr := spec.InternalServerError()
return nil, &jsonErr
}
if res.Err != "" {
if strings.HasPrefix(strings.ToLower(res.Err), "forbidden:") { // TODO: use actual error and no string comparison
return nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(res.Err),
+ JSON: spec.Forbidden(res.Err),
}
}
}
if res.Device == nil {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.UnknownToken("Unknown token"),
+ JSON: spec.UnknownToken("Unknown token"),
}
}
return res.Device, nil
diff --git a/clientapi/auth/login.go b/clientapi/auth/login.go
index 5467e814..77835614 100644
--- a/clientapi/auth/login.go
+++ b/clientapi/auth/login.go
@@ -21,9 +21,9 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
uapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -37,7 +37,7 @@ func LoginFromJSONReader(ctx context.Context, r io.Reader, useraccountAPI uapi.U
if err != nil {
err := &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Reading request body failed: " + err.Error()),
+ JSON: spec.BadJSON("Reading request body failed: " + err.Error()),
}
return nil, nil, err
}
@@ -48,7 +48,7 @@ func LoginFromJSONReader(ctx context.Context, r io.Reader, useraccountAPI uapi.U
if err := json.Unmarshal(reqBytes, &header); err != nil {
err := &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Reading request body failed: " + err.Error()),
+ JSON: spec.BadJSON("Reading request body failed: " + err.Error()),
}
return nil, nil, err
}
@@ -68,7 +68,7 @@ func LoginFromJSONReader(ctx context.Context, r io.Reader, useraccountAPI uapi.U
default:
err := util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("unhandled login type: " + header.Type),
+ JSON: spec.InvalidParam("unhandled login type: " + header.Type),
}
return nil, nil, &err
}
diff --git a/clientapi/auth/login_test.go b/clientapi/auth/login_test.go
index c91cba24..eb87d5e8 100644
--- a/clientapi/auth/login_test.go
+++ b/clientapi/auth/login_test.go
@@ -21,11 +21,11 @@ import (
"strings"
"testing"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/userutil"
"github.com/matrix-org/dendrite/setup/config"
uapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib/fclient"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -140,7 +140,7 @@ func TestBadLoginFromJSONReader(t *testing.T) {
"type": "m.login.invalid",
"device_id": "adevice"
}`,
- WantErrCode: "M_INVALID_ARGUMENT_VALUE",
+ WantErrCode: "M_INVALID_PARAM",
},
}
for _, tst := range tsts {
@@ -157,7 +157,7 @@ func TestBadLoginFromJSONReader(t *testing.T) {
if errRes == nil {
cleanup(ctx, nil)
t.Fatalf("LoginFromJSONReader err: got %+v, want code %q", errRes, tst.WantErrCode)
- } else if merr, ok := errRes.JSON.(*jsonerror.MatrixError); ok && merr.ErrCode != tst.WantErrCode {
+ } else if merr, ok := errRes.JSON.(*spec.MatrixError); ok && merr.ErrCode != tst.WantErrCode {
t.Fatalf("LoginFromJSONReader err: got %+v, want code %q", errRes, tst.WantErrCode)
}
})
diff --git a/clientapi/auth/login_token.go b/clientapi/auth/login_token.go
index 845eb5de..073f728d 100644
--- a/clientapi/auth/login_token.go
+++ b/clientapi/auth/login_token.go
@@ -20,9 +20,9 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
uapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -48,13 +48,13 @@ func (t *LoginTypeToken) LoginFromJSON(ctx context.Context, reqBytes []byte) (*L
var res uapi.QueryLoginTokenResponse
if err := t.UserAPI.QueryLoginToken(ctx, &uapi.QueryLoginTokenRequest{Token: r.Token}, &res); err != nil {
util.GetLogger(ctx).WithError(err).Error("UserAPI.QueryLoginToken failed")
- jsonErr := jsonerror.InternalServerError()
+ jsonErr := spec.InternalServerError()
return nil, nil, &jsonErr
}
if res.Data == nil {
return nil, nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("invalid login token"),
+ JSON: spec.Forbidden("invalid login token"),
}
}
diff --git a/clientapi/auth/password.go b/clientapi/auth/password.go
index f2b0383a..fb7def02 100644
--- a/clientapi/auth/password.go
+++ b/clientapi/auth/password.go
@@ -21,10 +21,10 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/userutil"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -65,26 +65,26 @@ func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login,
if username == "" {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.BadJSON("A username must be supplied."),
+ JSON: spec.BadJSON("A username must be supplied."),
}
}
if len(r.Password) == 0 {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.BadJSON("A password must be supplied."),
+ JSON: spec.BadJSON("A password must be supplied."),
}
}
localpart, domain, err := userutil.ParseUsernameParam(username, t.Config.Matrix)
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.InvalidUsername(err.Error()),
+ JSON: spec.InvalidUsername(err.Error()),
}
}
if !t.Config.Matrix.IsLocalServerName(domain) {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.InvalidUsername("The server name is not known."),
+ JSON: spec.InvalidUsername("The server name is not known."),
}
}
// Squash username to all lowercase letters
@@ -97,7 +97,7 @@ func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login,
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("Unable to fetch account by password."),
+ JSON: spec.Unknown("Unable to fetch account by password."),
}
}
@@ -112,7 +112,7 @@ func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login,
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("Unable to fetch account by password."),
+ JSON: spec.Unknown("Unable to fetch account by password."),
}
}
// Technically we could tell them if the user does not exist by checking if err == sql.ErrNoRows
@@ -120,7 +120,7 @@ func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login,
if !res.Exists {
return nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("The username or password was incorrect or the account does not exist."),
+ JSON: spec.Forbidden("The username or password was incorrect or the account does not exist."),
}
}
}
diff --git a/clientapi/auth/user_interactive.go b/clientapi/auth/user_interactive.go
index 9971bf8a..58d34865 100644
--- a/clientapi/auth/user_interactive.go
+++ b/clientapi/auth/user_interactive.go
@@ -20,9 +20,9 @@ import (
"net/http"
"sync"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
"github.com/sirupsen/logrus"
"github.com/tidwall/gjson"
@@ -178,7 +178,7 @@ func (u *UserInteractive) NewSession() *util.JSONResponse {
sessionID, err := GenerateAccessToken()
if err != nil {
logrus.WithError(err).Error("failed to generate session ID")
- res := jsonerror.InternalServerError()
+ res := spec.InternalServerError()
return &res
}
u.Lock()
@@ -193,14 +193,14 @@ func (u *UserInteractive) ResponseWithChallenge(sessionID string, response inter
mixedObjects := make(map[string]interface{})
b, err := json.Marshal(response)
if err != nil {
- ise := jsonerror.InternalServerError()
+ ise := spec.InternalServerError()
return &ise
}
_ = json.Unmarshal(b, &mixedObjects)
challenge := u.challenge(sessionID)
b, err = json.Marshal(challenge.JSON)
if err != nil {
- ise := jsonerror.InternalServerError()
+ ise := spec.InternalServerError()
return &ise
}
_ = json.Unmarshal(b, &mixedObjects)
@@ -234,7 +234,7 @@ func (u *UserInteractive) Verify(ctx context.Context, bodyBytes []byte, device *
if !ok {
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Unknown auth.type: " + authType),
+ JSON: spec.BadJSON("Unknown auth.type: " + authType),
}
}
@@ -250,7 +250,7 @@ func (u *UserInteractive) Verify(ctx context.Context, bodyBytes []byte, device *
if !u.IsSingleStageFlow(authType) {
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown("The auth.session is missing or unknown."),
+ JSON: spec.Unknown("The auth.session is missing or unknown."),
}
}
}
diff --git a/clientapi/httputil/httputil.go b/clientapi/httputil/httputil.go
index 74f84f1e..aea0c3db 100644
--- a/clientapi/httputil/httputil.go
+++ b/clientapi/httputil/httputil.go
@@ -20,7 +20,7 @@ import (
"net/http"
"unicode/utf8"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -32,7 +32,7 @@ func UnmarshalJSONRequest(req *http.Request, iface interface{}) *util.JSONRespon
body, err := io.ReadAll(req.Body)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("io.ReadAll failed")
- resp := jsonerror.InternalServerError()
+ resp := spec.InternalServerError()
return &resp
}
@@ -43,7 +43,7 @@ func UnmarshalJSON(body []byte, iface interface{}) *util.JSONResponse {
if !utf8.Valid(body) {
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotJSON("Body contains invalid UTF-8"),
+ JSON: spec.NotJSON("Body contains invalid UTF-8"),
}
}
@@ -53,7 +53,7 @@ func UnmarshalJSON(body []byte, iface interface{}) *util.JSONResponse {
// valid JSON with incorrect types for values.
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("The request body could not be decoded into valid JSON. " + err.Error()),
+ JSON: spec.BadJSON("The request body could not be decoded into valid JSON. " + err.Error()),
}
}
return nil
diff --git a/clientapi/jsonerror/jsonerror.go b/clientapi/jsonerror/jsonerror.go
deleted file mode 100644
index 436e168a..00000000
--- a/clientapi/jsonerror/jsonerror.go
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright 2017 Vector Creations Ltd
-//
-// 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 jsonerror
-
-import (
- "context"
- "fmt"
- "net/http"
-
- "github.com/matrix-org/gomatrixserverlib"
- "github.com/matrix-org/util"
- "github.com/sirupsen/logrus"
-)
-
-// MatrixError represents the "standard error response" in Matrix.
-// http://matrix.org/docs/spec/client_server/r0.2.0.html#api-standards
-type MatrixError struct {
- ErrCode string `json:"errcode"`
- Err string `json:"error"`
-}
-
-func (e MatrixError) Error() string {
- return fmt.Sprintf("%s: %s", e.ErrCode, e.Err)
-}
-
-// InternalServerError returns a 500 Internal Server Error in a matrix-compliant
-// format.
-func InternalServerError() util.JSONResponse {
- return util.JSONResponse{
- Code: http.StatusInternalServerError,
- JSON: Unknown("Internal Server Error"),
- }
-}
-
-// Unknown is an unexpected error
-func Unknown(msg string) *MatrixError {
- return &MatrixError{"M_UNKNOWN", msg}
-}
-
-// Forbidden is an error when the client tries to access a resource
-// they are not allowed to access.
-func Forbidden(msg string) *MatrixError {
- return &MatrixError{"M_FORBIDDEN", msg}
-}
-
-// BadJSON is an error when the client supplies malformed JSON.
-func BadJSON(msg string) *MatrixError {
- return &MatrixError{"M_BAD_JSON", msg}
-}
-
-// BadAlias is an error when the client supplies a bad alias.
-func BadAlias(msg string) *MatrixError {
- return &MatrixError{"M_BAD_ALIAS", msg}
-}
-
-// NotJSON is an error when the client supplies something that is not JSON
-// to a JSON endpoint.
-func NotJSON(msg string) *MatrixError {
- return &MatrixError{"M_NOT_JSON", msg}
-}
-
-// NotFound is an error when the client tries to access an unknown resource.
-func NotFound(msg string) *MatrixError {
- return &MatrixError{"M_NOT_FOUND", msg}
-}
-
-// MissingArgument is an error when the client tries to access a resource
-// without providing an argument that is required.
-func MissingArgument(msg string) *MatrixError {
- return &MatrixError{"M_MISSING_ARGUMENT", msg}
-}
-
-// InvalidArgumentValue is an error when the client tries to provide an
-// invalid value for a valid argument
-func InvalidArgumentValue(msg string) *MatrixError {
- return &MatrixError{"M_INVALID_ARGUMENT_VALUE", msg}
-}
-
-// MissingToken is an error when the client tries to access a resource which
-// requires authentication without supplying credentials.
-func MissingToken(msg string) *MatrixError {
- return &MatrixError{"M_MISSING_TOKEN", msg}
-}
-
-// UnknownToken is an error when the client tries to access a resource which
-// requires authentication and supplies an unrecognised token
-func UnknownToken(msg string) *MatrixError {
- return &MatrixError{"M_UNKNOWN_TOKEN", msg}
-}
-
-// WeakPassword is an error which is returned when the client tries to register
-// using a weak password. http://matrix.org/docs/spec/client_server/r0.2.0.html#password-based
-func WeakPassword(msg string) *MatrixError {
- return &MatrixError{"M_WEAK_PASSWORD", msg}
-}
-
-// InvalidUsername is an error returned when the client tries to register an
-// invalid username
-func InvalidUsername(msg string) *MatrixError {
- return &MatrixError{"M_INVALID_USERNAME", msg}
-}
-
-// UserInUse is an error returned when the client tries to register an
-// username that already exists
-func UserInUse(msg string) *MatrixError {
- return &MatrixError{"M_USER_IN_USE", msg}
-}
-
-// RoomInUse is an error returned when the client tries to make a room
-// that already exists
-func RoomInUse(msg string) *MatrixError {
- return &MatrixError{"M_ROOM_IN_USE", msg}
-}
-
-// ASExclusive is an error returned when an application service tries to
-// register an username that is outside of its registered namespace, or if a
-// user attempts to register a username or room alias within an exclusive
-// namespace.
-func ASExclusive(msg string) *MatrixError {
- return &MatrixError{"M_EXCLUSIVE", msg}
-}
-
-// GuestAccessForbidden is an error which is returned when the client is
-// forbidden from accessing a resource as a guest.
-func GuestAccessForbidden(msg string) *MatrixError {
- return &MatrixError{"M_GUEST_ACCESS_FORBIDDEN", msg}
-}
-
-// InvalidSignature is an error which is returned when the client tries
-// to upload invalid signatures.
-func InvalidSignature(msg string) *MatrixError {
- return &MatrixError{"M_INVALID_SIGNATURE", msg}
-}
-
-// InvalidParam is an error that is returned when a parameter was invalid,
-// traditionally with cross-signing.
-func InvalidParam(msg string) *MatrixError {
- return &MatrixError{"M_INVALID_PARAM", msg}
-}
-
-// MissingParam is an error that is returned when a parameter was incorrect,
-// traditionally with cross-signing.
-func MissingParam(msg string) *MatrixError {
- return &MatrixError{"M_MISSING_PARAM", msg}
-}
-
-// UnableToAuthoriseJoin is an error that is returned when a server can't
-// determine whether to allow a restricted join or not.
-func UnableToAuthoriseJoin(msg string) *MatrixError {
- return &MatrixError{"M_UNABLE_TO_AUTHORISE_JOIN", msg}
-}
-
-// LeaveServerNoticeError is an error returned when trying to reject an invite
-// for a server notice room.
-func LeaveServerNoticeError() *MatrixError {
- return &MatrixError{
- ErrCode: "M_CANNOT_LEAVE_SERVER_NOTICE_ROOM",
- Err: "You cannot reject this invite",
- }
-}
-
-// ErrRoomKeysVersion is an error returned by `PUT /room_keys/keys`
-type ErrRoomKeysVersion struct {
- MatrixError
- CurrentVersion string `json:"current_version"`
-}
-
-// WrongBackupVersionError is an error returned by `PUT /room_keys/keys`
-func WrongBackupVersionError(currentVersion string) *ErrRoomKeysVersion {
- return &ErrRoomKeysVersion{
- MatrixError: MatrixError{
- ErrCode: "M_WRONG_ROOM_KEYS_VERSION",
- Err: "Wrong backup version.",
- },
- CurrentVersion: currentVersion,
- }
-}
-
-type IncompatibleRoomVersionError struct {
- RoomVersion string `json:"room_version"`
- Error string `json:"error"`
- Code string `json:"errcode"`
-}
-
-// IncompatibleRoomVersion is an error which is returned when the client
-// requests a room with a version that is unsupported.
-func IncompatibleRoomVersion(roomVersion gomatrixserverlib.RoomVersion) *IncompatibleRoomVersionError {
- return &IncompatibleRoomVersionError{
- Code: "M_INCOMPATIBLE_ROOM_VERSION",
- RoomVersion: string(roomVersion),
- Error: "Your homeserver does not support the features required to join this room",
- }
-}
-
-// UnsupportedRoomVersion is an error which is returned when the client
-// requests a room with a version that is unsupported.
-func UnsupportedRoomVersion(msg string) *MatrixError {
- return &MatrixError{"M_UNSUPPORTED_ROOM_VERSION", msg}
-}
-
-// LimitExceededError is a rate-limiting error.
-type LimitExceededError struct {
- MatrixError
- RetryAfterMS int64 `json:"retry_after_ms,omitempty"`
-}
-
-// LimitExceeded is an error when the client tries to send events too quickly.
-func LimitExceeded(msg string, retryAfterMS int64) *LimitExceededError {
- return &LimitExceededError{
- MatrixError: MatrixError{"M_LIMIT_EXCEEDED", msg},
- RetryAfterMS: retryAfterMS,
- }
-}
-
-// NotTrusted is an error which is returned when the client asks the server to
-// proxy a request (e.g. 3PID association) to a server that isn't trusted
-func NotTrusted(serverName string) *MatrixError {
- return &MatrixError{
- ErrCode: "M_SERVER_NOT_TRUSTED",
- Err: fmt.Sprintf("Untrusted server '%s'", serverName),
- }
-}
-
-// InternalAPIError is returned when Dendrite failed to reach an internal API.
-func InternalAPIError(ctx context.Context, err error) util.JSONResponse {
- logrus.WithContext(ctx).WithError(err).Error("Error reaching an internal API")
- return util.JSONResponse{
- Code: http.StatusInternalServerError,
- JSON: &MatrixError{
- ErrCode: "M_INTERNAL_SERVER_ERROR",
- Err: "Dendrite encountered an error reaching an internal API.",
- },
- }
-}
diff --git a/clientapi/jsonerror/jsonerror_test.go b/clientapi/jsonerror/jsonerror_test.go
deleted file mode 100644
index 9f3754cb..00000000
--- a/clientapi/jsonerror/jsonerror_test.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2017 Vector Creations Ltd
-//
-// 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 jsonerror
-
-import (
- "encoding/json"
- "testing"
-)
-
-func TestLimitExceeded(t *testing.T) {
- e := LimitExceeded("too fast", 5000)
- jsonBytes, err := json.Marshal(&e)
- if err != nil {
- t.Fatalf("TestLimitExceeded: Failed to marshal LimitExceeded error. %s", err.Error())
- }
- want := `{"errcode":"M_LIMIT_EXCEEDED","error":"too fast","retry_after_ms":5000}`
- if string(jsonBytes) != want {
- t.Errorf("TestLimitExceeded: want %s, got %s", want, string(jsonBytes))
- }
-}
-
-func TestForbidden(t *testing.T) {
- e := Forbidden("you shall not pass")
- jsonBytes, err := json.Marshal(&e)
- if err != nil {
- t.Fatalf("TestForbidden: Failed to marshal Forbidden error. %s", err.Error())
- }
- want := `{"errcode":"M_FORBIDDEN","error":"you shall not pass"}`
- if string(jsonBytes) != want {
- t.Errorf("TestForbidden: want %s, got %s", want, string(jsonBytes))
- }
-}
diff --git a/clientapi/routing/account_data.go b/clientapi/routing/account_data.go
index 4742b124..572b28ef 100644
--- a/clientapi/routing/account_data.go
+++ b/clientapi/routing/account_data.go
@@ -21,11 +21,11 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/dendrite/internal/eventutil"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -38,7 +38,7 @@ func GetAccountData(
if userID != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not match the current user"),
+ JSON: spec.Forbidden("userID does not match the current user"),
}
}
@@ -69,7 +69,7 @@ func GetAccountData(
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("data not found"),
+ JSON: spec.NotFound("data not found"),
}
}
@@ -81,7 +81,7 @@ func SaveAccountData(
if userID != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not match the current user"),
+ JSON: spec.Forbidden("userID does not match the current user"),
}
}
@@ -90,27 +90,27 @@ func SaveAccountData(
if req.Body == http.NoBody {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotJSON("Content not JSON"),
+ JSON: spec.NotJSON("Content not JSON"),
}
}
if dataType == "m.fully_read" || dataType == "m.push_rules" {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(fmt.Sprintf("Unable to modify %q using this API", dataType)),
+ JSON: spec.Forbidden(fmt.Sprintf("Unable to modify %q using this API", dataType)),
}
}
body, err := io.ReadAll(req.Body)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("io.ReadAll failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !json.Valid(body) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Bad JSON content"),
+ JSON: spec.BadJSON("Bad JSON content"),
}
}
@@ -157,7 +157,7 @@ func SaveReadMarker(
if r.FullyRead != "" {
data, err := json.Marshal(fullyReadEvent{EventID: r.FullyRead})
if err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
dataReq := api.InputAccountDataRequest{
diff --git a/clientapi/routing/admin.go b/clientapi/routing/admin.go
index a5fc4ec4..4d2cea68 100644
--- a/clientapi/routing/admin.go
+++ b/clientapi/routing/admin.go
@@ -17,7 +17,6 @@ import (
"github.com/nats-io/nats.go"
"github.com/sirupsen/logrus"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/httputil"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/setup/config"
@@ -37,7 +36,7 @@ func AdminEvacuateRoom(req *http.Request, rsAPI roomserverAPI.ClientRoomserverAP
case eventutil.ErrRoomNoExists:
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(err.Error()),
+ JSON: spec.NotFound(err.Error()),
}
default:
logrus.WithError(err).WithField("roomID", vars["roomID"]).Error("Failed to evacuate room")
@@ -91,7 +90,7 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *api.De
if req.Body == nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown("Missing request body"),
+ JSON: spec.Unknown("Missing request body"),
}
}
vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
@@ -104,7 +103,7 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *api.De
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
}
accAvailableResp := &api.QueryAccountAvailabilityResponse{}
@@ -114,13 +113,13 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *api.De
}, accAvailableResp); err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalAPIError(req.Context(), err),
+ JSON: spec.InternalServerError(),
}
}
if accAvailableResp.Available {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.Unknown("User does not exist"),
+ JSON: spec.Unknown("User does not exist"),
}
}
request := struct {
@@ -129,13 +128,13 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *api.De
if err = json.NewDecoder(req.Body).Decode(&request); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown("Failed to decode request body: " + err.Error()),
+ JSON: spec.Unknown("Failed to decode request body: " + err.Error()),
}
}
if request.Password == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Expecting non-empty password."),
+ JSON: spec.MissingParam("Expecting non-empty password."),
}
}
@@ -153,7 +152,7 @@ func AdminResetPassword(req *http.Request, cfg *config.ClientAPI, device *api.De
if err := userAPI.PerformPasswordUpdate(req.Context(), updateReq, updateRes); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown("Failed to perform password update: " + err.Error()),
+ JSON: spec.Unknown("Failed to perform password update: " + err.Error()),
}
}
return util.JSONResponse{
@@ -170,7 +169,7 @@ func AdminReindex(req *http.Request, cfg *config.ClientAPI, device *api.Device,
_, err := natsClient.RequestMsg(nats.NewMsg(cfg.Matrix.JetStream.Prefixed(jetstream.InputFulltextReindex)), time.Second*10)
if err != nil {
logrus.WithError(err).Error("failed to publish nats message")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -192,7 +191,7 @@ func AdminMarkAsStale(req *http.Request, cfg *config.ClientAPI, keyAPI api.Clien
if cfg.Matrix.IsLocalServerName(domain) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam("Can not mark local device list as stale"),
+ JSON: spec.InvalidParam("Can not mark local device list as stale"),
}
}
@@ -203,7 +202,7 @@ func AdminMarkAsStale(req *http.Request, cfg *config.ClientAPI, keyAPI api.Clien
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown(fmt.Sprintf("Failed to mark device list as stale: %s", err)),
+ JSON: spec.Unknown(fmt.Sprintf("Failed to mark device list as stale: %s", err)),
}
}
return util.JSONResponse{
@@ -221,21 +220,21 @@ func AdminDownloadState(req *http.Request, device *api.Device, rsAPI roomserverA
if !ok {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Expecting room ID."),
+ JSON: spec.MissingParam("Expecting room ID."),
}
}
serverName, ok := vars["serverName"]
if !ok {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Expecting remote server name."),
+ JSON: spec.MissingParam("Expecting remote server name."),
}
}
if err = rsAPI.PerformAdminDownloadState(req.Context(), roomID, device.UserID, spec.ServerName(serverName)); err != nil {
if errors.Is(err, eventutil.ErrRoomNoExists) {
return util.JSONResponse{
Code: 200,
- JSON: jsonerror.NotFound(eventutil.ErrRoomNoExists.Error()),
+ JSON: spec.NotFound(eventutil.ErrRoomNoExists.Error()),
}
}
logrus.WithError(err).WithFields(logrus.Fields{
diff --git a/clientapi/routing/admin_whois.go b/clientapi/routing/admin_whois.go
index f1cbd346..cb2b8a26 100644
--- a/clientapi/routing/admin_whois.go
+++ b/clientapi/routing/admin_whois.go
@@ -17,8 +17,8 @@ package routing
import (
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -51,7 +51,7 @@ func GetAdminWhois(
if !allowed {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not match the current user"),
+ JSON: spec.Forbidden("userID does not match the current user"),
}
}
@@ -61,7 +61,7 @@ func GetAdminWhois(
}, &queryRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("GetAdminWhois failed to query user devices")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
devices := make(map[string]deviceInfo)
diff --git a/clientapi/routing/aliases.go b/clientapi/routing/aliases.go
index 5c2df79d..87c1f9ff 100644
--- a/clientapi/routing/aliases.go
+++ b/clientapi/routing/aliases.go
@@ -19,12 +19,10 @@ import (
"fmt"
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/roomserver/api"
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
-
"github.com/matrix-org/util"
)
@@ -64,12 +62,12 @@ func GetAliases(
var queryRes api.QueryMembershipForUserResponse
if err := rsAPI.QueryMembershipForUser(req.Context(), &queryReq, &queryRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("rsAPI.QueryMembershipsForRoom failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !queryRes.IsInRoom {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You aren't a member of this room."),
+ JSON: spec.Forbidden("You aren't a member of this room."),
}
}
}
diff --git a/clientapi/routing/createroom.go b/clientapi/routing/createroom.go
index abf5b4f4..f0cdd6f5 100644
--- a/clientapi/routing/createroom.go
+++ b/clientapi/routing/createroom.go
@@ -32,7 +32,6 @@ import (
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/gomatrixserverlib"
@@ -75,7 +74,7 @@ func (r createRoomRequest) Validate() *util.JSONResponse {
if strings.ContainsAny(r.RoomAliasName, whitespace+":") {
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("room_alias_name cannot contain whitespace or ':'"),
+ JSON: spec.BadJSON("room_alias_name cannot contain whitespace or ':'"),
}
}
for _, userID := range r.Invite {
@@ -87,7 +86,7 @@ func (r createRoomRequest) Validate() *util.JSONResponse {
if _, _, err := gomatrixserverlib.SplitID('@', userID); err != nil {
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("user id must be in the form @localpart:domain"),
+ JSON: spec.BadJSON("user id must be in the form @localpart:domain"),
}
}
}
@@ -96,7 +95,7 @@ func (r createRoomRequest) Validate() *util.JSONResponse {
default:
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("preset must be any of 'private_chat', 'trusted_private_chat', 'public_chat'"),
+ JSON: spec.BadJSON("preset must be any of 'private_chat', 'trusted_private_chat', 'public_chat'"),
}
}
@@ -108,7 +107,7 @@ func (r createRoomRequest) Validate() *util.JSONResponse {
if err != nil {
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("malformed creation_content"),
+ JSON: spec.BadJSON("malformed creation_content"),
}
}
@@ -117,7 +116,7 @@ func (r createRoomRequest) Validate() *util.JSONResponse {
if err != nil {
return &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("malformed creation_content"),
+ JSON: spec.BadJSON("malformed creation_content"),
}
}
@@ -156,7 +155,7 @@ func CreateRoom(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
}
return createRoom(req.Context(), r, device, cfg, profileAPI, rsAPI, asAPI, evTime)
@@ -175,12 +174,12 @@ func createRoom(
_, userDomain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !cfg.Matrix.IsLocalServerName(userDomain) {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(fmt.Sprintf("User domain %q not configured locally", userDomain)),
+ JSON: spec.Forbidden(fmt.Sprintf("User domain %q not configured locally", userDomain)),
}
}
@@ -200,7 +199,7 @@ func createRoom(
if roomVersionError != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UnsupportedRoomVersion(roomVersionError.Error()),
+ JSON: spec.UnsupportedRoomVersion(roomVersionError.Error()),
}
}
roomVersion = candidateVersion
@@ -219,7 +218,7 @@ func createRoom(
profile, err := appserviceAPI.RetrieveUserProfile(ctx, userID, asAPI, profileAPI)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("appserviceAPI.RetrieveUserProfile failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
createContent := map[string]interface{}{}
@@ -228,7 +227,7 @@ func createRoom(
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for creation_content failed")
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("invalid create content"),
+ JSON: spec.BadJSON("invalid create content"),
}
}
}
@@ -249,7 +248,7 @@ func createRoom(
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for power_level_content_override failed")
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("malformed power_level_content_override"),
+ JSON: spec.BadJSON("malformed power_level_content_override"),
}
}
}
@@ -343,12 +342,12 @@ func createRoom(
err = rsAPI.GetRoomIDForAlias(ctx, &hasAliasReq, &aliasResp)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("aliasAPI.GetRoomIDForAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if aliasResp.RoomID != "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.RoomInUse("Room ID already exists."),
+ JSON: spec.RoomInUse("Room ID already exists."),
}
}
@@ -437,7 +436,7 @@ func createRoom(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("unknown room version"),
+ JSON: spec.BadJSON("unknown room version"),
}
}
@@ -456,7 +455,7 @@ func createRoom(
err = builder.SetContent(e.Content)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("builder.SetContent failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if i > 0 {
builder.PrevEvents = []gomatrixserverlib.EventReference{builtEvents[i-1].EventReference()}
@@ -464,17 +463,17 @@ func createRoom(
var ev gomatrixserverlib.PDU
if err = builder.AddAuthEvents(&authEvents); err != nil {
util.GetLogger(ctx).WithError(err).Error("AddAuthEvents failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
ev, err = builder.Build(evTime, userDomain, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("buildEvent failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if err = gomatrixserverlib.Allowed(ev, &authEvents); err != nil {
util.GetLogger(ctx).WithError(err).Error("gomatrixserverlib.Allowed failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// Add the event to the list of auth events
@@ -482,7 +481,7 @@ func createRoom(
err = authEvents.AddEvent(ev)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("authEvents.AddEvent failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
@@ -497,7 +496,7 @@ func createRoom(
}
if err = roomserverAPI.SendInputRoomEvents(ctx, rsAPI, device.UserDomain(), inputs, false); err != nil {
util.GetLogger(ctx).WithError(err).Error("roomserverAPI.SendInputRoomEvents failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// TODO(#269): Reserve room alias while we create the room. This stops us
@@ -514,13 +513,13 @@ func createRoom(
err = rsAPI.SetRoomAlias(ctx, &aliasReq, &aliasResp)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("aliasAPI.SetRoomAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if aliasResp.AliasExists {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.RoomInUse("Room alias already exists."),
+ JSON: spec.RoomInUse("Room alias already exists."),
}
}
}
@@ -584,12 +583,12 @@ func createRoom(
case roomserverAPI.ErrInvalidID:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(e.Error()),
+ JSON: spec.Unknown(e.Error()),
}
case roomserverAPI.ErrNotAllowed:
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(e.Error()),
+ JSON: spec.Forbidden(e.Error()),
}
case nil:
default:
@@ -597,7 +596,7 @@ func createRoom(
sentry.CaptureException(err)
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}
}
}
@@ -610,7 +609,7 @@ func createRoom(
Visibility: spec.Public,
}); err != nil {
util.GetLogger(ctx).WithError(err).Error("failed to publish room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
diff --git a/clientapi/routing/deactivate.go b/clientapi/routing/deactivate.go
index 3f4f539f..78cf9fe3 100644
--- a/clientapi/routing/deactivate.go
+++ b/clientapi/routing/deactivate.go
@@ -5,9 +5,9 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/auth"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -24,7 +24,7 @@ func Deactivate(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("The request body could not be read: " + err.Error()),
+ JSON: spec.BadJSON("The request body could not be read: " + err.Error()),
}
}
@@ -36,7 +36,7 @@ func Deactivate(
localpart, serverName, err := gomatrixserverlib.SplitID('@', login.Username())
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var res api.PerformAccountDeactivationResponse
@@ -46,7 +46,7 @@ func Deactivate(
}, &res)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("userAPI.PerformAccountDeactivation failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/device.go b/clientapi/routing/device.go
index 331bacc3..6209d8e9 100644
--- a/clientapi/routing/device.go
+++ b/clientapi/routing/device.go
@@ -22,9 +22,9 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
"github.com/tidwall/gjson"
)
@@ -60,7 +60,7 @@ func GetDeviceByID(
}, &queryRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryDevices failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var targetDevice *api.Device
for _, device := range queryRes.Devices {
@@ -72,7 +72,7 @@ func GetDeviceByID(
if targetDevice == nil {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("Unknown device"),
+ JSON: spec.NotFound("Unknown device"),
}
}
@@ -97,7 +97,7 @@ func GetDevicesByLocalpart(
}, &queryRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryDevices failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res := devicesJSON{}
@@ -139,12 +139,12 @@ func UpdateDeviceByID(
}, &performRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformDeviceUpdate failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !performRes.DeviceExists {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.Forbidden("device does not exist"),
+ JSON: spec.Forbidden("device does not exist"),
}
}
@@ -174,7 +174,7 @@ func DeleteDeviceById(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("The request body could not be read: " + err.Error()),
+ JSON: spec.BadJSON("The request body could not be read: " + err.Error()),
}
}
@@ -184,7 +184,7 @@ func DeleteDeviceById(
if dev != deviceID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("session and device mismatch"),
+ JSON: spec.Forbidden("session and device mismatch"),
}
}
}
@@ -206,7 +206,7 @@ func DeleteDeviceById(
localpart, _, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// make sure that the access token being used matches the login creds used for user interactive auth, else
@@ -214,7 +214,7 @@ func DeleteDeviceById(
if login.Username() != localpart && login.Username() != device.UserID {
return util.JSONResponse{
Code: 403,
- JSON: jsonerror.Forbidden("Cannot delete another user's device"),
+ JSON: spec.Forbidden("Cannot delete another user's device"),
}
}
@@ -224,7 +224,7 @@ func DeleteDeviceById(
DeviceIDs: []string{deviceID},
}, &res); err != nil {
util.GetLogger(ctx).WithError(err).Error("userAPI.PerformDeviceDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
deleteOK = true
@@ -245,7 +245,7 @@ func DeleteDevices(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("The request body could not be read: " + err.Error()),
+ JSON: spec.BadJSON("The request body could not be read: " + err.Error()),
}
}
defer req.Body.Close() // nolint:errcheck
@@ -259,14 +259,14 @@ func DeleteDevices(
if login.Username() != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("unable to delete devices for other user"),
+ JSON: spec.Forbidden("unable to delete devices for other user"),
}
}
payload := devicesDeleteJSON{}
if err = json.Unmarshal(bodyBytes, &payload); err != nil {
util.GetLogger(ctx).WithError(err).Error("unable to unmarshal device deletion request")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var res api.PerformDeviceDeletionResponse
@@ -275,7 +275,7 @@ func DeleteDevices(
DeviceIDs: payload.Devices,
}, &res); err != nil {
util.GetLogger(ctx).WithError(err).Error("userAPI.PerformDeviceDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/directory.go b/clientapi/routing/directory.go
index 11ae5739..0ca9475d 100644
--- a/clientapi/routing/directory.go
+++ b/clientapi/routing/directory.go
@@ -24,7 +24,6 @@ import (
"github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
federationAPI "github.com/matrix-org/dendrite/federationapi/api"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/setup/config"
@@ -56,7 +55,7 @@ func DirectoryRoom(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Room alias must be in the form '#localpart:domain'"),
+ JSON: spec.BadJSON("Room alias must be in the form '#localpart:domain'"),
}
}
@@ -70,7 +69,7 @@ func DirectoryRoom(
queryRes := &roomserverAPI.GetRoomIDForAliasResponse{}
if err = rsAPI.GetRoomIDForAlias(req.Context(), queryReq, queryRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("rsAPI.GetRoomIDForAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res.RoomID = queryRes.RoomID
@@ -84,7 +83,7 @@ func DirectoryRoom(
// TODO: Return 502 if the remote server errored.
// TODO: Return 504 if the remote server timed out.
util.GetLogger(req.Context()).WithError(fedErr).Error("federation.LookupRoomAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res.RoomID = fedRes.RoomID
res.fillServers(fedRes.Servers)
@@ -93,7 +92,7 @@ func DirectoryRoom(
if res.RoomID == "" {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(
+ JSON: spec.NotFound(
fmt.Sprintf("Room alias %s not found", roomAlias),
),
}
@@ -103,7 +102,7 @@ func DirectoryRoom(
var joinedHostsRes federationAPI.QueryJoinedHostServerNamesInRoomResponse
if err = fedSenderAPI.QueryJoinedHostServerNamesInRoom(req.Context(), &joinedHostsReq, &joinedHostsRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("fedSenderAPI.QueryJoinedHostServerNamesInRoom failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res.fillServers(joinedHostsRes.ServerNames)
}
@@ -126,14 +125,14 @@ func SetLocalAlias(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Room alias must be in the form '#localpart:domain'"),
+ JSON: spec.BadJSON("Room alias must be in the form '#localpart:domain'"),
}
}
if !cfg.Matrix.IsLocalServerName(domain) {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Alias must be on local homeserver"),
+ JSON: spec.Forbidden("Alias must be on local homeserver"),
}
}
@@ -146,7 +145,7 @@ func SetLocalAlias(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("User ID must be in the form '@localpart:domain'"),
+ JSON: spec.BadJSON("User ID must be in the form '@localpart:domain'"),
}
}
for _, appservice := range cfg.Derived.ApplicationServices {
@@ -158,7 +157,7 @@ func SetLocalAlias(
if namespace.Exclusive && namespace.RegexpObject.MatchString(alias) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.ASExclusive("Alias is reserved by an application service"),
+ JSON: spec.ASExclusive("Alias is reserved by an application service"),
}
}
}
@@ -181,13 +180,13 @@ func SetLocalAlias(
var queryRes roomserverAPI.SetRoomAliasResponse
if err := rsAPI.SetRoomAlias(req.Context(), &queryReq, &queryRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("aliasAPI.SetRoomAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if queryRes.AliasExists {
return util.JSONResponse{
Code: http.StatusConflict,
- JSON: jsonerror.Unknown("The alias " + alias + " already exists."),
+ JSON: spec.Unknown("The alias " + alias + " already exists."),
}
}
@@ -211,20 +210,20 @@ func RemoveLocalAlias(
var queryRes roomserverAPI.RemoveRoomAliasResponse
if err := rsAPI.RemoveRoomAlias(req.Context(), &queryReq, &queryRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("aliasAPI.RemoveRoomAlias failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !queryRes.Found {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("The alias does not exist."),
+ JSON: spec.NotFound("The alias does not exist."),
}
}
if !queryRes.Removed {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You do not have permission to remove this alias."),
+ JSON: spec.Forbidden("You do not have permission to remove this alias."),
}
}
@@ -249,7 +248,7 @@ func GetVisibility(
}, &res)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryPublishedRooms failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var v roomVisibility
@@ -287,7 +286,7 @@ func SetVisibility(
err := rsAPI.QueryLatestEventsAndState(req.Context(), &queryEventsReq, &queryEventsRes)
if err != nil || len(queryEventsRes.StateEvents) == 0 {
util.GetLogger(req.Context()).WithError(err).Error("could not query events from room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// NOTSPEC: Check if the user's power is greater than power required to change m.room.canonical_alias event
@@ -295,7 +294,7 @@ func SetVisibility(
if power.UserLevel(dev.UserID) < power.EventLevel(spec.MRoomCanonicalAlias, true) {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID doesn't have power level to change visibility"),
+ JSON: spec.Forbidden("userID doesn't have power level to change visibility"),
}
}
@@ -309,7 +308,7 @@ func SetVisibility(
Visibility: v.Visibility,
}); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("failed to publish room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -325,7 +324,7 @@ func SetVisibilityAS(
if dev.AccountType != userapi.AccountTypeAppService {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Only appservice may use this endpoint"),
+ JSON: spec.Forbidden("Only appservice may use this endpoint"),
}
}
var v roomVisibility
@@ -345,7 +344,7 @@ func SetVisibilityAS(
AppserviceID: dev.AppserviceID,
}); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("failed to publish room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/directory_public.go b/clientapi/routing/directory_public.go
index c150d908..9718ccab 100644
--- a/clientapi/routing/directory_public.go
+++ b/clientapi/routing/directory_public.go
@@ -29,7 +29,6 @@ import (
"github.com/matrix-org/dendrite/clientapi/api"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/setup/config"
)
@@ -68,7 +67,7 @@ func GetPostPublicRooms(
if request.IncludeAllNetworks && request.NetworkID != "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam("include_all_networks and third_party_instance_id can not be used together"),
+ JSON: spec.InvalidParam("include_all_networks and third_party_instance_id can not be used together"),
}
}
@@ -82,7 +81,7 @@ func GetPostPublicRooms(
)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("failed to get public rooms")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -93,7 +92,7 @@ func GetPostPublicRooms(
response, err := publicRooms(req.Context(), request, rsAPI, extRoomsProvider)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Errorf("failed to work out public rooms")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -173,7 +172,7 @@ func fillPublicRoomsReq(httpReq *http.Request, request *PublicRoomReq) *util.JSO
if httpReq.Method != "GET" && httpReq.Method != "POST" {
return &util.JSONResponse{
Code: http.StatusMethodNotAllowed,
- JSON: jsonerror.NotFound("Bad method"),
+ JSON: spec.NotFound("Bad method"),
}
}
if httpReq.Method == "GET" {
@@ -184,7 +183,7 @@ func fillPublicRoomsReq(httpReq *http.Request, request *PublicRoomReq) *util.JSO
util.GetLogger(httpReq.Context()).WithError(err).Error("strconv.Atoi failed")
return &util.JSONResponse{
Code: 400,
- JSON: jsonerror.BadJSON("limit param is not a number"),
+ JSON: spec.BadJSON("limit param is not a number"),
}
}
request.Limit = int64(limit)
diff --git a/clientapi/routing/joined_rooms.go b/clientapi/routing/joined_rooms.go
index 4bb353ea..51a96e4d 100644
--- a/clientapi/routing/joined_rooms.go
+++ b/clientapi/routing/joined_rooms.go
@@ -19,9 +19,9 @@ import (
"github.com/matrix-org/util"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/roomserver/api"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
type getJoinedRoomsResponse struct {
@@ -40,7 +40,7 @@ func GetJoinedRooms(
}, &res)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryRoomsForUser failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if res.RoomIDs == nil {
res.RoomIDs = []string{}
diff --git a/clientapi/routing/joinroom.go b/clientapi/routing/joinroom.go
index 54a9aaa4..a67d5132 100644
--- a/clientapi/routing/joinroom.go
+++ b/clientapi/routing/joinroom.go
@@ -22,7 +22,6 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/userapi/api"
@@ -75,7 +74,7 @@ func JoinRoomByIDOrAlias(
util.GetLogger(req.Context()).Error("Unable to query user profile, no profile found.")
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("Unable to query user profile, no profile found."),
+ JSON: spec.Unknown("Unable to query user profile, no profile found."),
}
default:
}
@@ -99,12 +98,12 @@ func JoinRoomByIDOrAlias(
case roomserverAPI.ErrInvalidID:
response = util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(e.Error()),
+ JSON: spec.Unknown(e.Error()),
}
case roomserverAPI.ErrNotAllowed:
- jsonErr := jsonerror.Forbidden(e.Error())
+ jsonErr := spec.Forbidden(e.Error())
if device.AccountType == api.AccountTypeGuest {
- jsonErr = jsonerror.GuestAccessForbidden(e.Error())
+ jsonErr = spec.GuestAccessForbidden(e.Error())
}
response = util.JSONResponse{
Code: http.StatusForbidden,
@@ -118,12 +117,12 @@ func JoinRoomByIDOrAlias(
default:
response = util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}
if errors.Is(err, eventutil.ErrRoomNoExists) {
response = util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(e.Error()),
+ JSON: spec.NotFound(e.Error()),
}
}
}
@@ -137,7 +136,7 @@ func JoinRoomByIDOrAlias(
case <-timer.C:
return util.JSONResponse{
Code: http.StatusAccepted,
- JSON: jsonerror.Unknown("The room join will continue in the background."),
+ JSON: spec.Unknown("The room join will continue in the background."),
}
case result := <-done:
// Stop and drain the timer
diff --git a/clientapi/routing/key_backup.go b/clientapi/routing/key_backup.go
index 56b05db1..b7b1cadd 100644
--- a/clientapi/routing/key_backup.go
+++ b/clientapi/routing/key_backup.go
@@ -20,8 +20,8 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -64,7 +64,7 @@ func CreateKeyBackupVersion(req *http.Request, userAPI userapi.ClientUserAPI, de
if len(kb.AuthData) == 0 {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("missing auth_data"),
+ JSON: spec.BadJSON("missing auth_data"),
}
}
version, err := userAPI.PerformKeyBackup(req.Context(), &userapi.PerformKeyBackupRequest{
@@ -98,7 +98,7 @@ func KeyBackupVersion(req *http.Request, userAPI userapi.ClientUserAPI, device *
if !queryResp.Exists {
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("version not found"),
+ JSON: spec.NotFound("version not found"),
}
}
return util.JSONResponse{
@@ -128,7 +128,7 @@ func ModifyKeyBackupVersionAuthData(req *http.Request, userAPI userapi.ClientUse
Algorithm: kb.Algorithm,
})
switch e := err.(type) {
- case *jsonerror.ErrRoomKeysVersion:
+ case *spec.ErrRoomKeysVersion:
return util.JSONResponse{
Code: http.StatusForbidden,
JSON: e,
@@ -141,7 +141,7 @@ func ModifyKeyBackupVersionAuthData(req *http.Request, userAPI userapi.ClientUse
if !performKeyBackupResp.Exists {
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("backup version not found"),
+ JSON: spec.NotFound("backup version not found"),
}
}
return util.JSONResponse{
@@ -162,7 +162,7 @@ func DeleteKeyBackupVersion(req *http.Request, userAPI userapi.ClientUserAPI, de
if !exists {
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("backup version not found"),
+ JSON: spec.NotFound("backup version not found"),
}
}
return util.JSONResponse{
@@ -182,7 +182,7 @@ func UploadBackupKeys(
})
switch e := err.(type) {
- case *jsonerror.ErrRoomKeysVersion:
+ case *spec.ErrRoomKeysVersion:
return util.JSONResponse{
Code: http.StatusForbidden,
JSON: e,
@@ -194,7 +194,7 @@ func UploadBackupKeys(
if !performKeyBackupResp.Exists {
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("backup version not found"),
+ JSON: spec.NotFound("backup version not found"),
}
}
return util.JSONResponse{
@@ -223,7 +223,7 @@ func GetBackupKeys(
if !queryResp.Exists {
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("version not found"),
+ JSON: spec.NotFound("version not found"),
}
}
if sessionID != "" {
@@ -274,6 +274,6 @@ func GetBackupKeys(
}
return util.JSONResponse{
Code: 404,
- JSON: jsonerror.NotFound("keys not found"),
+ JSON: spec.NotFound("keys not found"),
}
}
diff --git a/clientapi/routing/key_crosssigning.go b/clientapi/routing/key_crosssigning.go
index 267ba1dc..6bf7c58e 100644
--- a/clientapi/routing/key_crosssigning.go
+++ b/clientapi/routing/key_crosssigning.go
@@ -20,9 +20,9 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -71,31 +71,29 @@ func UploadCrossSigningDeviceKeys(
sessions.addCompletedSessionStage(sessionID, authtypes.LoginTypePassword)
uploadReq.UserID = device.UserID
- if err := keyserverAPI.PerformUploadDeviceKeys(req.Context(), &uploadReq.PerformUploadDeviceKeysRequest, uploadRes); err != nil {
- return jsonerror.InternalAPIError(req.Context(), err)
- }
+ keyserverAPI.PerformUploadDeviceKeys(req.Context(), &uploadReq.PerformUploadDeviceKeysRequest, uploadRes)
if err := uploadRes.Error; err != nil {
switch {
case err.IsInvalidSignature:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidSignature(err.Error()),
+ JSON: spec.InvalidSignature(err.Error()),
}
case err.IsMissingParam:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingParam(err.Error()),
+ JSON: spec.MissingParam(err.Error()),
}
case err.IsInvalidParam:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
default:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(err.Error()),
+ JSON: spec.Unknown(err.Error()),
}
}
}
@@ -115,31 +113,29 @@ func UploadCrossSigningDeviceSignatures(req *http.Request, keyserverAPI api.Clie
}
uploadReq.UserID = device.UserID
- if err := keyserverAPI.PerformUploadDeviceSignatures(req.Context(), uploadReq, uploadRes); err != nil {
- return jsonerror.InternalAPIError(req.Context(), err)
- }
+ keyserverAPI.PerformUploadDeviceSignatures(req.Context(), uploadReq, uploadRes)
if err := uploadRes.Error; err != nil {
switch {
case err.IsInvalidSignature:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidSignature(err.Error()),
+ JSON: spec.InvalidSignature(err.Error()),
}
case err.IsMissingParam:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingParam(err.Error()),
+ JSON: spec.MissingParam(err.Error()),
}
case err.IsInvalidParam:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
default:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(err.Error()),
+ JSON: spec.Unknown(err.Error()),
}
}
}
diff --git a/clientapi/routing/keys.go b/clientapi/routing/keys.go
index 3d60fcc3..363ae3dc 100644
--- a/clientapi/routing/keys.go
+++ b/clientapi/routing/keys.go
@@ -22,8 +22,8 @@ import (
"github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
type uploadKeysRequest struct {
@@ -67,7 +67,7 @@ func UploadKeys(req *http.Request, keyAPI api.ClientKeyAPI, device *api.Device)
}
if uploadRes.Error != nil {
util.GetLogger(req.Context()).WithError(uploadRes.Error).Error("Failed to PerformUploadKeys")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if len(uploadRes.KeyErrors) > 0 {
util.GetLogger(req.Context()).WithField("key_errors", uploadRes.KeyErrors).Error("Failed to upload one or more keys")
@@ -112,14 +112,12 @@ func QueryKeys(req *http.Request, keyAPI api.ClientKeyAPI, device *api.Device) u
return *resErr
}
queryRes := api.QueryKeysResponse{}
- if err := keyAPI.QueryKeys(req.Context(), &api.QueryKeysRequest{
+ keyAPI.QueryKeys(req.Context(), &api.QueryKeysRequest{
UserID: device.UserID,
UserToDevices: r.DeviceKeys,
Timeout: r.GetTimeout(),
// TODO: Token?
- }, &queryRes); err != nil {
- return util.ErrorResponse(err)
- }
+ }, &queryRes)
return util.JSONResponse{
Code: 200,
JSON: map[string]interface{}{
@@ -152,15 +150,13 @@ func ClaimKeys(req *http.Request, keyAPI api.ClientKeyAPI) util.JSONResponse {
return *resErr
}
claimRes := api.PerformClaimKeysResponse{}
- if err := keyAPI.PerformClaimKeys(req.Context(), &api.PerformClaimKeysRequest{
+ keyAPI.PerformClaimKeys(req.Context(), &api.PerformClaimKeysRequest{
OneTimeKeys: r.OneTimeKeys,
Timeout: r.GetTimeout(),
- }, &claimRes); err != nil {
- return jsonerror.InternalAPIError(req.Context(), err)
- }
+ }, &claimRes)
if claimRes.Error != nil {
util.GetLogger(req.Context()).WithError(claimRes.Error).Error("failed to PerformClaimKeys")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
Code: 200,
diff --git a/clientapi/routing/leaveroom.go b/clientapi/routing/leaveroom.go
index a7166185..fbf14826 100644
--- a/clientapi/routing/leaveroom.go
+++ b/clientapi/routing/leaveroom.go
@@ -17,9 +17,9 @@ package routing
import (
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -41,12 +41,12 @@ func LeaveRoomByID(
if leaveRes.Code != 0 {
return util.JSONResponse{
Code: leaveRes.Code,
- JSON: jsonerror.LeaveServerNoticeError(),
+ JSON: spec.LeaveServerNoticeError(),
}
}
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(err.Error()),
+ JSON: spec.Unknown(err.Error()),
}
}
diff --git a/clientapi/routing/login.go b/clientapi/routing/login.go
index 778c8c0c..d326bff7 100644
--- a/clientapi/routing/login.go
+++ b/clientapi/routing/login.go
@@ -19,10 +19,10 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/auth"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/userutil"
"github.com/matrix-org/dendrite/setup/config"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -72,7 +72,7 @@ func Login(
}
return util.JSONResponse{
Code: http.StatusMethodNotAllowed,
- JSON: jsonerror.NotFound("Bad method"),
+ JSON: spec.NotFound("Bad method"),
}
}
@@ -83,13 +83,13 @@ func completeAuth(
token, err := auth.GenerateAccessToken()
if err != nil {
util.GetLogger(ctx).WithError(err).Error("auth.GenerateAccessToken failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
localpart, serverName, err := userutil.ParseUsernameParam(login.Username(), cfg)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("auth.ParseUsernameParam failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var performRes userapi.PerformDeviceCreationResponse
@@ -105,7 +105,7 @@ func completeAuth(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to create device: " + err.Error()),
+ JSON: spec.Unknown("failed to create device: " + err.Error()),
}
}
diff --git a/clientapi/routing/logout.go b/clientapi/routing/logout.go
index 73bae7af..049c88d5 100644
--- a/clientapi/routing/logout.go
+++ b/clientapi/routing/logout.go
@@ -17,8 +17,8 @@ package routing
import (
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -33,7 +33,7 @@ func Logout(
}, &performRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformDeviceDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -53,7 +53,7 @@ func LogoutAll(
}, &performRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformDeviceDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/membership.go b/clientapi/routing/membership.go
index d696f2b1..9b95ba5d 100644
--- a/clientapi/routing/membership.go
+++ b/clientapi/routing/membership.go
@@ -27,7 +27,6 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/threepid"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/roomserver/api"
@@ -52,7 +51,7 @@ func SendBan(
if body.UserID == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("missing user_id"),
+ JSON: spec.BadJSON("missing user_id"),
}
}
@@ -69,7 +68,7 @@ func SendBan(
if !allowedToBan {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You don't have permission to ban this user, power level too low."),
+ JSON: spec.Forbidden("You don't have permission to ban this user, power level too low."),
}
}
@@ -86,7 +85,7 @@ func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, devic
)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("buildMembershipEvent failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
serverName := device.UserDomain()
@@ -101,7 +100,7 @@ func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, devic
false,
); err != nil {
util.GetLogger(ctx).WithError(err).Error("SendEvents failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -122,7 +121,7 @@ func SendKick(
if body.UserID == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("missing user_id"),
+ JSON: spec.BadJSON("missing user_id"),
}
}
@@ -139,7 +138,7 @@ func SendKick(
if !allowedToKick {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You don't have permission to kick this user, power level too low."),
+ JSON: spec.Forbidden("You don't have permission to kick this user, power level too low."),
}
}
@@ -155,7 +154,7 @@ func SendKick(
if queryRes.Membership != spec.Join && queryRes.Membership != spec.Invite {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Unknown("cannot /kick banned or left users"),
+ JSON: spec.Unknown("cannot /kick banned or left users"),
}
}
// TODO: should we be using SendLeave instead?
@@ -174,7 +173,7 @@ func SendUnban(
if body.UserID == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("missing user_id"),
+ JSON: spec.BadJSON("missing user_id"),
}
}
@@ -196,7 +195,7 @@ func SendUnban(
if queryRes.Membership != spec.Ban {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown("can only /unban users that are banned"),
+ JSON: spec.Unknown("can only /unban users that are banned"),
}
}
// TODO: should we be using SendLeave instead?
@@ -233,7 +232,7 @@ func SendInvite(
if body.UserID == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("missing user_id"),
+ JSON: spec.BadJSON("missing user_id"),
}
}
@@ -263,7 +262,7 @@ func sendInvite(
)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("buildMembershipEvent failed")
- return jsonerror.InternalServerError(), err
+ return spec.InternalServerError(), err
}
err = rsAPI.PerformInvite(ctx, &api.PerformInviteRequest{
@@ -277,12 +276,12 @@ func sendInvite(
case roomserverAPI.ErrInvalidID:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(e.Error()),
+ JSON: spec.Unknown(e.Error()),
}, e
case roomserverAPI.ErrNotAllowed:
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(e.Error()),
+ JSON: spec.Forbidden(e.Error()),
}, e
case nil:
default:
@@ -290,7 +289,7 @@ func sendInvite(
sentry.CaptureException(err)
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}, err
}
@@ -377,7 +376,7 @@ func extractRequestData(req *http.Request) (body *threepid.MembershipRequest, ev
if err != nil {
resErr = &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
return
}
@@ -402,27 +401,27 @@ func checkAndProcessThreepid(
if err == threepid.ErrMissingParameter {
return inviteStored, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(err.Error()),
+ JSON: spec.BadJSON(err.Error()),
}
} else if err == threepid.ErrNotTrusted {
return inviteStored, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotTrusted(body.IDServer),
+ JSON: spec.NotTrusted(body.IDServer),
}
} else if err == eventutil.ErrRoomNoExists {
return inviteStored, &util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(err.Error()),
+ JSON: spec.NotFound(err.Error()),
}
} else if e, ok := err.(gomatrixserverlib.BadJSONError); ok {
return inviteStored, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(e.Error()),
+ JSON: spec.BadJSON(e.Error()),
}
}
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepid.CheckAndProcessInvite failed")
- er := jsonerror.InternalServerError()
+ er := spec.InternalServerError()
return inviteStored, &er
}
return
@@ -436,13 +435,13 @@ func checkMemberInRoom(ctx context.Context, rsAPI roomserverAPI.ClientRoomserver
}, &membershipRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("QueryMembershipForUser: could not query membership for user")
- e := jsonerror.InternalServerError()
+ e := spec.InternalServerError()
return &e
}
if !membershipRes.IsInRoom {
return &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("user does not belong to room"),
+ JSON: spec.Forbidden("user does not belong to room"),
}
}
return nil
@@ -462,18 +461,18 @@ func SendForget(
err := rsAPI.QueryMembershipForUser(ctx, &membershipReq, &membershipRes)
if err != nil {
logger.WithError(err).Error("QueryMembershipForUser: could not query membership for user")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !membershipRes.RoomExists {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("room does not exist"),
+ JSON: spec.Forbidden("room does not exist"),
}
}
if membershipRes.IsInRoom {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(fmt.Sprintf("User %s is in room %s", device.UserID, roomID)),
+ JSON: spec.Unknown(fmt.Sprintf("User %s is in room %s", device.UserID, roomID)),
}
}
@@ -484,7 +483,7 @@ func SendForget(
response := roomserverAPI.PerformForgetResponse{}
if err := rsAPI.PerformForget(ctx, &request, &response); err != nil {
logger.WithError(err).Error("PerformForget: unable to forget room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -500,14 +499,14 @@ func getPowerlevels(req *http.Request, rsAPI roomserverAPI.ClientRoomserverAPI,
if plEvent == nil {
return nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You don't have permission to perform this action, no power_levels event in this room."),
+ JSON: spec.Forbidden("You don't have permission to perform this action, no power_levels event in this room."),
}
}
pl, err := plEvent.PowerLevels()
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("You don't have permission to perform this action, the power_levels event for this room is malformed so auth checks cannot be performed."),
+ JSON: spec.Forbidden("You don't have permission to perform this action, the power_levels event for this room is malformed so auth checks cannot be performed."),
}
}
return pl, nil
diff --git a/clientapi/routing/notification.go b/clientapi/routing/notification.go
index f593e27d..8ac12ce5 100644
--- a/clientapi/routing/notification.go
+++ b/clientapi/routing/notification.go
@@ -18,9 +18,9 @@ import (
"net/http"
"strconv"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -35,7 +35,7 @@ func GetNotifications(
limit, err = strconv.ParseInt(limitStr, 10, 64)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("ParseInt(limit) failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
@@ -43,7 +43,7 @@ func GetNotifications(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
err = userAPI.QueryNotifications(req.Context(), &userapi.QueryNotificationsRequest{
Localpart: localpart,
@@ -54,7 +54,7 @@ func GetNotifications(
}, &queryRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryNotifications failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
util.GetLogger(req.Context()).WithField("from", req.URL.Query().Get("from")).WithField("limit", limit).WithField("only", req.URL.Query().Get("only")).WithField("next", queryRes.NextToken).Infof("QueryNotifications: len %d", len(queryRes.Notifications))
return util.JSONResponse{
diff --git a/clientapi/routing/openid.go b/clientapi/routing/openid.go
index 8e9be788..1ead00eb 100644
--- a/clientapi/routing/openid.go
+++ b/clientapi/routing/openid.go
@@ -17,9 +17,9 @@ package routing
import (
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -43,7 +43,7 @@ func CreateOpenIDToken(
if userID != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Cannot request tokens for other users"),
+ JSON: spec.Forbidden("Cannot request tokens for other users"),
}
}
@@ -55,7 +55,7 @@ func CreateOpenIDToken(
err := userAPI.PerformOpenIDTokenCreation(req.Context(), &request, &response)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("userAPI.CreateOpenIDToken failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/password.go b/clientapi/routing/password.go
index f7f9da62..68466a77 100644
--- a/clientapi/routing/password.go
+++ b/clientapi/routing/password.go
@@ -6,11 +6,11 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
"github.com/sirupsen/logrus"
)
@@ -90,7 +90,7 @@ func Password(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// Ask the user API to perform the password change.
@@ -102,11 +102,11 @@ func Password(
passwordRes := &api.PerformPasswordUpdateResponse{}
if err := userAPI.PerformPasswordUpdate(req.Context(), passwordReq, passwordRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformPasswordUpdate failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !passwordRes.PasswordUpdated {
util.GetLogger(req.Context()).Error("Expected password to have been updated but wasn't")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// If the request asks us to log out all other devices then
@@ -120,7 +120,7 @@ func Password(
logoutRes := &api.PerformDeviceDeletionResponse{}
if err := userAPI.PerformDeviceDeletion(req.Context(), logoutReq, logoutRes); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformDeviceDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
pushersReq := &api.PerformPusherDeletionRequest{
@@ -130,7 +130,7 @@ func Password(
}
if err := userAPI.PerformPusherDeletion(req.Context(), pushersReq, &struct{}{}); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformPusherDeletion failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
diff --git a/clientapi/routing/peekroom.go b/clientapi/routing/peekroom.go
index 3937b9ad..af486f6d 100644
--- a/clientapi/routing/peekroom.go
+++ b/clientapi/routing/peekroom.go
@@ -18,7 +18,6 @@ import (
"encoding/json"
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrix"
@@ -61,12 +60,12 @@ func PeekRoomByIDOrAlias(
case roomserverAPI.ErrInvalidID:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(e.Error()),
+ JSON: spec.Unknown(e.Error()),
}
case roomserverAPI.ErrNotAllowed:
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(e.Error()),
+ JSON: spec.Forbidden(e.Error()),
}
case *gomatrix.HTTPError:
return util.JSONResponse{
@@ -76,7 +75,7 @@ func PeekRoomByIDOrAlias(
case nil:
default:
logrus.WithError(err).WithField("roomID", roomIDOrAlias).Errorf("Failed to peek room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// if this user is already joined to the room, we let them peek anyway
@@ -107,12 +106,12 @@ func UnpeekRoomByID(
case roomserverAPI.ErrInvalidID:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(e.Error()),
+ JSON: spec.Unknown(e.Error()),
}
case nil:
default:
logrus.WithError(err).WithField("roomID", roomID).Errorf("Failed to un-peek room")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/presence.go b/clientapi/routing/presence.go
index c50b0943..d915f060 100644
--- a/clientapi/routing/presence.go
+++ b/clientapi/routing/presence.go
@@ -21,7 +21,6 @@ import (
"time"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/setup/jetstream"
@@ -54,7 +53,7 @@ func SetPresence(
if device.UserID != userID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Unable to set presence for other user."),
+ JSON: spec.Forbidden("Unable to set presence for other user."),
}
}
var presence presenceReq
@@ -67,7 +66,7 @@ func SetPresence(
if !ok {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.Unknown(fmt.Sprintf("Unknown presence '%s'.", presence.Presence)),
+ JSON: spec.Unknown(fmt.Sprintf("Unknown presence '%s'.", presence.Presence)),
}
}
err := producer.SendPresence(req.Context(), userID, presenceStatus, presence.StatusMsg)
@@ -75,7 +74,7 @@ func SetPresence(
log.WithError(err).Errorf("failed to update presence")
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}
}
@@ -100,7 +99,7 @@ func GetPresence(
log.WithError(err).Errorf("unable to get presence")
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}
}
@@ -119,7 +118,7 @@ func GetPresence(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.InternalServerError(),
+ JSON: spec.InternalServerError(),
}
}
diff --git a/clientapi/routing/profile.go b/clientapi/routing/profile.go
index 765ad7cb..8e88e7c8 100644
--- a/clientapi/routing/profile.go
+++ b/clientapi/routing/profile.go
@@ -26,13 +26,11 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/dendrite/setup/config"
userapi "github.com/matrix-org/dendrite/userapi/api"
-
"github.com/matrix-org/gomatrix"
"github.com/matrix-org/util"
)
@@ -49,12 +47,12 @@ func GetProfile(
if err == appserviceAPI.ErrProfileNotExists {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("The user does not exist or does not have a profile"),
+ JSON: spec.NotFound("The user does not exist or does not have a profile"),
}
}
util.GetLogger(req.Context()).WithError(err).Error("getProfile failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -95,7 +93,7 @@ func SetAvatarURL(
if userID != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not match the current user"),
+ JSON: spec.Forbidden("userID does not match the current user"),
}
}
@@ -106,20 +104,20 @@ func SetAvatarURL(
if r.AvatarURL == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("'avatar_url' must be supplied."),
+ JSON: spec.BadJSON("'avatar_url' must be supplied."),
}
}
localpart, domain, err := gomatrixserverlib.SplitID('@', userID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !cfg.Matrix.IsLocalServerName(domain) {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not belong to a locally configured domain"),
+ JSON: spec.Forbidden("userID does not belong to a locally configured domain"),
}
}
@@ -127,14 +125,14 @@ func SetAvatarURL(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
}
profile, changed, err := profileAPI.SetAvatarURL(req.Context(), localpart, domain, r.AvatarURL)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("profileAPI.SetAvatarURL failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// No need to build new membership events, since nothing changed
if !changed {
@@ -184,7 +182,7 @@ func SetDisplayName(
if userID != device.UserID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not match the current user"),
+ JSON: spec.Forbidden("userID does not match the current user"),
}
}
@@ -195,20 +193,20 @@ func SetDisplayName(
if r.DisplayName == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("'displayname' must be supplied."),
+ JSON: spec.BadJSON("'displayname' must be supplied."),
}
}
localpart, domain, err := gomatrixserverlib.SplitID('@', userID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !cfg.Matrix.IsLocalServerName(domain) {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("userID does not belong to a locally configured domain"),
+ JSON: spec.Forbidden("userID does not belong to a locally configured domain"),
}
}
@@ -216,14 +214,14 @@ func SetDisplayName(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
}
profile, changed, err := profileAPI.SetDisplayName(req.Context(), localpart, domain, r.DisplayName)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("profileAPI.SetDisplayName failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// No need to build new membership events, since nothing changed
if !changed {
@@ -256,13 +254,13 @@ func updateProfile(
}, &res)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("QueryRoomsForUser failed")
- return jsonerror.InternalServerError(), err
+ return spec.InternalServerError(), err
}
_, domain, err := gomatrixserverlib.SplitID('@', userID)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError(), err
+ return spec.InternalServerError(), err
}
events, err := buildMembershipEvents(
@@ -273,16 +271,16 @@ func updateProfile(
case gomatrixserverlib.BadJSONError:
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(e.Error()),
+ JSON: spec.BadJSON(e.Error()),
}, e
default:
util.GetLogger(ctx).WithError(err).Error("buildMembershipEvents failed")
- return jsonerror.InternalServerError(), e
+ return spec.InternalServerError(), e
}
if err := api.SendEvents(ctx, rsAPI, api.KindNew, events, device.UserDomain(), domain, domain, nil, true); err != nil {
util.GetLogger(ctx).WithError(err).Error("SendEvents failed")
- return jsonerror.InternalServerError(), err
+ return spec.InternalServerError(), err
}
return util.JSONResponse{}, nil
}
diff --git a/clientapi/routing/pusher.go b/clientapi/routing/pusher.go
index 89ec824b..2f51583f 100644
--- a/clientapi/routing/pusher.go
+++ b/clientapi/routing/pusher.go
@@ -19,9 +19,9 @@ import (
"net/url"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -34,7 +34,7 @@ func GetPushers(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
err = userAPI.QueryPushers(req.Context(), &userapi.QueryPushersRequest{
Localpart: localpart,
@@ -42,7 +42,7 @@ func GetPushers(
}, &queryRes)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("QueryPushers failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
for i := range queryRes.Pushers {
queryRes.Pushers[i].SessionID = 0
@@ -63,7 +63,7 @@ func SetPusher(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
body := userapi.PerformPusherSetRequest{}
if resErr := httputil.UnmarshalJSONRequest(req, &body); resErr != nil {
@@ -99,7 +99,7 @@ func SetPusher(
err = userAPI.PerformPusherSet(req.Context(), &body, &struct{}{})
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("PerformPusherSet failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -111,6 +111,6 @@ func SetPusher(
func invalidParam(msg string) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam(msg),
+ JSON: spec.InvalidParam(msg),
}
}
diff --git a/clientapi/routing/pushrules.go b/clientapi/routing/pushrules.go
index f1a539ad..7be6d2a7 100644
--- a/clientapi/routing/pushrules.go
+++ b/clientapi/routing/pushrules.go
@@ -7,17 +7,17 @@ import (
"net/http"
"reflect"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/pushrules"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
func errorResponse(ctx context.Context, err error, msg string, args ...interface{}) util.JSONResponse {
- if eerr, ok := err.(*jsonerror.MatrixError); ok {
+ if eerr, ok := err.(*spec.MatrixError); ok {
var status int
switch eerr.ErrCode {
- case "M_INVALID_ARGUMENT_VALUE":
+ case "M_INVALID_PARAM":
status = http.StatusBadRequest
case "M_NOT_FOUND":
status = http.StatusNotFound
@@ -27,7 +27,7 @@ func errorResponse(ctx context.Context, err error, msg string, args ...interface
return util.MatrixErrorResponse(status, eerr.ErrCode, eerr.Err)
}
util.GetLogger(ctx).WithError(err).Errorf(msg, args...)
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
func GetAllPushRules(ctx context.Context, device *userapi.Device, userAPI userapi.ClientUserAPI) util.JSONResponse {
@@ -48,7 +48,7 @@ func GetPushRulesByScope(ctx context.Context, scope string, device *userapi.Devi
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -63,12 +63,12 @@ func GetPushRulesByKind(ctx context.Context, scope, kind string, device *userapi
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
// Even if rulesPtr is not nil, there may not be any rules for this kind
if rulesPtr == nil || (rulesPtr != nil && len(*rulesPtr) == 0) {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -83,15 +83,15 @@ func GetPushRuleByRuleID(ctx context.Context, scope, kind, ruleID string, device
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
if rulesPtr == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
i := pushRuleIndexByID(*rulesPtr, ruleID)
if i < 0 {
- return errorResponse(ctx, jsonerror.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
+ return errorResponse(ctx, spec.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -104,14 +104,14 @@ func PutPushRuleByRuleID(ctx context.Context, scope, kind, ruleID, afterRuleID,
if err := json.NewDecoder(body).Decode(&newRule); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(err.Error()),
+ JSON: spec.BadJSON(err.Error()),
}
}
newRule.RuleID = ruleID
errs := pushrules.ValidateRule(pushrules.Kind(kind), &newRule)
if len(errs) > 0 {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue(errs[0].Error()), "rule sanity check failed: %v", errs)
+ return errorResponse(ctx, spec.InvalidParam(errs[0].Error()), "rule sanity check failed: %v", errs)
}
ruleSets, err := userAPI.QueryPushRules(ctx, device.UserID)
@@ -120,12 +120,12 @@ func PutPushRuleByRuleID(ctx context.Context, scope, kind, ruleID, afterRuleID,
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
if rulesPtr == nil {
// while this should be impossible (ValidateRule would already return an error), better keep it around
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
i := pushRuleIndexByID(*rulesPtr, ruleID)
if i >= 0 && afterRuleID == "" && beforeRuleID == "" {
@@ -172,15 +172,15 @@ func DeletePushRuleByRuleID(ctx context.Context, scope, kind, ruleID string, dev
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
if rulesPtr == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
i := pushRuleIndexByID(*rulesPtr, ruleID)
if i < 0 {
- return errorResponse(ctx, jsonerror.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
+ return errorResponse(ctx, spec.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
}
*rulesPtr = append((*rulesPtr)[:i], (*rulesPtr)[i+1:]...)
@@ -203,15 +203,15 @@ func GetPushRuleAttrByRuleID(ctx context.Context, scope, kind, ruleID, attr stri
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
if rulesPtr == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
i := pushRuleIndexByID(*rulesPtr, ruleID)
if i < 0 {
- return errorResponse(ctx, jsonerror.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
+ return errorResponse(ctx, spec.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
}
return util.JSONResponse{
Code: http.StatusOK,
@@ -226,7 +226,7 @@ func PutPushRuleAttrByRuleID(ctx context.Context, scope, kind, ruleID, attr stri
if err := json.NewDecoder(body).Decode(&newPartialRule); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(err.Error()),
+ JSON: spec.BadJSON(err.Error()),
}
}
if newPartialRule.Actions == nil {
@@ -249,15 +249,15 @@ func PutPushRuleAttrByRuleID(ctx context.Context, scope, kind, ruleID, attr stri
}
ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
if ruleSet == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rule set"), "pushRuleSetByScope failed")
}
rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
if rulesPtr == nil {
- return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
+ return errorResponse(ctx, spec.InvalidParam("invalid push rules kind"), "pushRuleSetKindPointer failed")
}
i := pushRuleIndexByID(*rulesPtr, ruleID)
if i < 0 {
- return errorResponse(ctx, jsonerror.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
+ return errorResponse(ctx, spec.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
}
if !reflect.DeepEqual(attrGet((*rulesPtr)[i]), attrGet(&newPartialRule)) {
@@ -313,7 +313,7 @@ func pushRuleAttrGetter(attr string) (func(*pushrules.Rule) interface{}, error)
case "enabled":
return func(rule *pushrules.Rule) interface{} { return rule.Enabled }, nil
default:
- return nil, jsonerror.InvalidArgumentValue("invalid push rule attribute")
+ return nil, spec.InvalidParam("invalid push rule attribute")
}
}
@@ -324,7 +324,7 @@ func pushRuleAttrSetter(attr string) (func(dest, src *pushrules.Rule), error) {
case "enabled":
return func(dest, src *pushrules.Rule) { dest.Enabled = src.Enabled }, nil
default:
- return nil, jsonerror.InvalidArgumentValue("invalid push rule attribute")
+ return nil, spec.InvalidParam("invalid push rule attribute")
}
}
@@ -338,10 +338,10 @@ func findPushRuleInsertionIndex(rules []*pushrules.Rule, afterID, beforeID strin
}
}
if i == len(rules) {
- return 0, jsonerror.NotFound("after: rule ID not found")
+ return 0, spec.NotFound("after: rule ID not found")
}
if rules[i].Default {
- return 0, jsonerror.NotFound("after: rule ID must not be a default rule")
+ return 0, spec.NotFound("after: rule ID must not be a default rule")
}
// We stopped on the "after" match to differentiate
// not-found from is-last-entry. Now we move to the earliest
@@ -356,10 +356,10 @@ func findPushRuleInsertionIndex(rules []*pushrules.Rule, afterID, beforeID strin
}
}
if i == len(rules) {
- return 0, jsonerror.NotFound("before: rule ID not found")
+ return 0, spec.NotFound("before: rule ID not found")
}
if rules[i].Default {
- return 0, jsonerror.NotFound("before: rule ID must not be a default rule")
+ return 0, spec.NotFound("before: rule ID must not be a default rule")
}
}
diff --git a/clientapi/routing/receipt.go b/clientapi/routing/receipt.go
index 634b60b7..0bbb20b9 100644
--- a/clientapi/routing/receipt.go
+++ b/clientapi/routing/receipt.go
@@ -20,7 +20,6 @@ import (
"net/http"
"time"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/gomatrixserverlib/spec"
@@ -49,7 +48,7 @@ func SetReceipt(req *http.Request, userAPI api.ClientUserAPI, syncProducer *prod
case "m.fully_read":
data, err := json.Marshal(fullyReadEvent{EventID: eventID})
if err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
dataReq := api.InputAccountDataRequest{
diff --git a/clientapi/routing/redaction.go b/clientapi/routing/redaction.go
index a65cf673..12391d26 100644
--- a/clientapi/routing/redaction.go
+++ b/clientapi/routing/redaction.go
@@ -24,7 +24,6 @@ import (
"github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/internal/transactions"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
@@ -63,13 +62,13 @@ func SendRedaction(
if ev == nil {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.NotFound("unknown event ID"), // TODO: is it ok to leak existence?
+ JSON: spec.NotFound("unknown event ID"), // TODO: is it ok to leak existence?
}
}
if ev.RoomID() != roomID {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.NotFound("cannot redact event in another room"),
+ JSON: spec.NotFound("cannot redact event in another room"),
}
}
@@ -85,14 +84,14 @@ func SendRedaction(
if plEvent == nil {
return util.JSONResponse{
Code: 403,
- JSON: jsonerror.Forbidden("You don't have permission to redact this event, no power_levels event in this room."),
+ JSON: spec.Forbidden("You don't have permission to redact this event, no power_levels event in this room."),
}
}
pl, err := plEvent.PowerLevels()
if err != nil {
return util.JSONResponse{
Code: 403,
- JSON: jsonerror.Forbidden(
+ JSON: spec.Forbidden(
"You don't have permission to redact this event, the power_levels event for this room is malformed so auth checks cannot be performed.",
),
}
@@ -102,7 +101,7 @@ func SendRedaction(
if !allowedToRedact {
return util.JSONResponse{
Code: 403,
- JSON: jsonerror.Forbidden("You don't have permission to redact this event, power level too low."),
+ JSON: spec.Forbidden("You don't have permission to redact this event, power level too low."),
}
}
@@ -122,12 +121,12 @@ func SendRedaction(
err := proto.SetContent(r)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("proto.SetContent failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
identity, err := cfg.Matrix.SigningIdentityFor(device.UserDomain())
if err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var queryRes roomserverAPI.QueryLatestEventsAndStateResponse
@@ -135,13 +134,13 @@ func SendRedaction(
if err == eventutil.ErrRoomNoExists {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("Room does not exist"),
+ JSON: spec.NotFound("Room does not exist"),
}
}
domain := device.UserDomain()
if err = roomserverAPI.SendEvents(context.Background(), rsAPI, roomserverAPI.KindNew, []*types.HeaderedEvent{e}, device.UserDomain(), domain, domain, nil, false); err != nil {
util.GetLogger(req.Context()).WithError(err).Errorf("failed to SendEvents")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res := util.JSONResponse{
diff --git a/clientapi/routing/register.go b/clientapi/routing/register.go
index 35dd4846..615ff201 100644
--- a/clientapi/routing/register.go
+++ b/clientapi/routing/register.go
@@ -46,7 +46,6 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/userutil"
userapi "github.com/matrix-org/dendrite/userapi/api"
)
@@ -428,7 +427,7 @@ func validateApplicationService(
if matchedApplicationService == nil {
return "", &util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.UnknownToken("Supplied access_token does not match any known application service"),
+ JSON: spec.UnknownToken("Supplied access_token does not match any known application service"),
}
}
@@ -439,7 +438,7 @@ func validateApplicationService(
// If we didn't find any matches, return M_EXCLUSIVE
return "", &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.ASExclusive(fmt.Sprintf(
+ JSON: spec.ASExclusive(fmt.Sprintf(
"Supplied username %s did not match any namespaces for application service ID: %s", username, matchedApplicationService.ID)),
}
}
@@ -448,7 +447,7 @@ func validateApplicationService(
if UsernameMatchesMultipleExclusiveNamespaces(cfg, userID) {
return "", &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.ASExclusive(fmt.Sprintf(
+ JSON: spec.ASExclusive(fmt.Sprintf(
"Supplied username %s matches multiple exclusive application service namespaces. Only 1 match allowed", username)),
}
}
@@ -474,7 +473,7 @@ func Register(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotJSON("Unable to read request body"),
+ JSON: spec.NotJSON("Unable to read request body"),
}
}
@@ -518,7 +517,7 @@ func Register(
if _, err = strconv.ParseInt(r.Username, 10, 64); err == nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidUsername("Numeric user IDs are reserved"),
+ JSON: spec.InvalidUsername("Numeric user IDs are reserved"),
}
}
// Auto generate a numeric username if r.Username is empty
@@ -529,7 +528,7 @@ func Register(
nres := &userapi.QueryNumericLocalpartResponse{}
if err = userAPI.QueryNumericLocalpart(req.Context(), nreq, nres); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("userAPI.QueryNumericLocalpart failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
r.Username = strconv.FormatInt(nres.ID, 10)
}
@@ -552,7 +551,7 @@ func Register(
// type is not known or specified)
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("A known registration type (e.g. m.login.application_service) must be specified if an access_token is provided"),
+ JSON: spec.MissingParam("A known registration type (e.g. m.login.application_service) must be specified if an access_token is provided"),
}
default:
// Spec-compliant case (neither the access_token nor the login type are
@@ -590,7 +589,7 @@ func handleGuestRegistration(
if !registrationEnabled || !guestsEnabled {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(
+ JSON: spec.Forbidden(
fmt.Sprintf("Guest registration is disabled on %q", r.ServerName),
),
}
@@ -604,7 +603,7 @@ func handleGuestRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to create account: " + err.Error()),
+ JSON: spec.Unknown("failed to create account: " + err.Error()),
}
}
token, err := tokens.GenerateLoginToken(tokens.TokenOptions{
@@ -616,7 +615,7 @@ func handleGuestRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("Failed to generate access token"),
+ JSON: spec.Unknown("Failed to generate access token"),
}
}
//we don't allow guests to specify their own device_id
@@ -632,7 +631,7 @@ func handleGuestRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to create device: " + err.Error()),
+ JSON: spec.Unknown("failed to create device: " + err.Error()),
}
}
return util.JSONResponse{
@@ -682,7 +681,7 @@ func handleRegistrationFlow(
if !registrationEnabled && r.Auth.Type != authtypes.LoginTypeSharedSecret {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(
+ JSON: spec.Forbidden(
fmt.Sprintf("Registration is disabled on %q", r.ServerName),
),
}
@@ -696,7 +695,7 @@ func handleRegistrationFlow(
UsernameMatchesExclusiveNamespaces(cfg, r.Username) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.ASExclusive("This username is reserved by an application service."),
+ JSON: spec.ASExclusive("This username is reserved by an application service."),
}
}
@@ -706,15 +705,15 @@ func handleRegistrationFlow(
err := validateRecaptcha(cfg, r.Auth.Response, req.RemoteAddr)
switch err {
case ErrCaptchaDisabled:
- return util.JSONResponse{Code: http.StatusForbidden, JSON: jsonerror.Unknown(err.Error())}
+ return util.JSONResponse{Code: http.StatusForbidden, JSON: spec.Unknown(err.Error())}
case ErrMissingResponse:
- return util.JSONResponse{Code: http.StatusBadRequest, JSON: jsonerror.BadJSON(err.Error())}
+ return util.JSONResponse{Code: http.StatusBadRequest, JSON: spec.BadJSON(err.Error())}
case ErrInvalidCaptcha:
- return util.JSONResponse{Code: http.StatusUnauthorized, JSON: jsonerror.BadJSON(err.Error())}
+ return util.JSONResponse{Code: http.StatusUnauthorized, JSON: spec.BadJSON(err.Error())}
case nil:
default:
util.GetLogger(req.Context()).WithError(err).Error("failed to validate recaptcha")
- return util.JSONResponse{Code: http.StatusInternalServerError, JSON: jsonerror.InternalServerError()}
+ return util.JSONResponse{Code: http.StatusInternalServerError, JSON: spec.InternalServerError()}
}
// Add Recaptcha to the list of completed registration stages
@@ -732,7 +731,7 @@ func handleRegistrationFlow(
default:
return util.JSONResponse{
Code: http.StatusNotImplemented,
- JSON: jsonerror.Unknown("unknown/unimplemented auth type"),
+ JSON: spec.Unknown("unknown/unimplemented auth type"),
}
}
@@ -764,7 +763,7 @@ func handleApplicationServiceRegistration(
if tokenErr != nil {
return util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.MissingToken(tokenErr.Error()),
+ JSON: spec.MissingToken(tokenErr.Error()),
}
}
@@ -834,14 +833,14 @@ func completeRegistration(
if username == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Missing username"),
+ JSON: spec.MissingParam("Missing username"),
}
}
// Blank passwords are only allowed by registered application services
if password == "" && appserviceID == "" {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MissingArgument("Missing password"),
+ JSON: spec.MissingParam("Missing password"),
}
}
var accRes userapi.PerformAccountCreationResponse
@@ -857,12 +856,12 @@ func completeRegistration(
if _, ok := err.(*userapi.ErrorConflict); ok { // user already exists
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UserInUse("Desired user ID is already taken."),
+ JSON: spec.UserInUse("Desired user ID is already taken."),
}
}
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to create account: " + err.Error()),
+ JSON: spec.Unknown("failed to create account: " + err.Error()),
}
}
@@ -884,7 +883,7 @@ func completeRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("Failed to generate access token"),
+ JSON: spec.Unknown("Failed to generate access token"),
}
}
@@ -893,7 +892,7 @@ func completeRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to set display name: " + err.Error()),
+ JSON: spec.Unknown("failed to set display name: " + err.Error()),
}
}
}
@@ -911,7 +910,7 @@ func completeRegistration(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to create device: " + err.Error()),
+ JSON: spec.Unknown("failed to create device: " + err.Error()),
}
}
@@ -1006,7 +1005,7 @@ func RegisterAvailable(
if v.ServerName == domain && !v.AllowRegistration {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(
+ JSON: spec.Forbidden(
fmt.Sprintf("Registration is not allowed on %q", string(v.ServerName)),
),
}
@@ -1023,7 +1022,7 @@ func RegisterAvailable(
if appservice.OwnsNamespaceCoveringUserId(userID) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UserInUse("Desired user ID is reserved by an application service."),
+ JSON: spec.UserInUse("Desired user ID is reserved by an application service."),
}
}
}
@@ -1036,14 +1035,14 @@ func RegisterAvailable(
if err != nil {
return util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("failed to check availability:" + err.Error()),
+ JSON: spec.Unknown("failed to check availability:" + err.Error()),
}
}
if !res.Available {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UserInUse("Desired User ID is already taken."),
+ JSON: spec.UserInUse("Desired User ID is already taken."),
}
}
@@ -1060,7 +1059,7 @@ func handleSharedSecretRegistration(cfg *config.ClientAPI, userAPI userapi.Clien
if err != nil {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.BadJSON(fmt.Sprintf("malformed json: %s", err)),
+ JSON: spec.BadJSON(fmt.Sprintf("malformed json: %s", err)),
}
}
valid, err := sr.IsValidMacLogin(ssrr.Nonce, ssrr.User, ssrr.Password, ssrr.Admin, ssrr.MacBytes)
@@ -1070,7 +1069,7 @@ func handleSharedSecretRegistration(cfg *config.ClientAPI, userAPI userapi.Clien
if !valid {
return util.JSONResponse{
Code: 403,
- JSON: jsonerror.Forbidden("bad mac"),
+ JSON: spec.Forbidden("bad mac"),
}
}
// downcase capitals
diff --git a/clientapi/routing/register_test.go b/clientapi/routing/register_test.go
index b07f636d..9a60f531 100644
--- a/clientapi/routing/register_test.go
+++ b/clientapi/routing/register_test.go
@@ -28,7 +28,6 @@ import (
"time"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/internal/caching"
"github.com/matrix-org/dendrite/internal/sqlutil"
@@ -39,6 +38,7 @@ import (
"github.com/matrix-org/dendrite/test/testrig"
"github.com/matrix-org/dendrite/userapi"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
"github.com/patrickmn/go-cache"
"github.com/stretchr/testify/assert"
@@ -306,7 +306,7 @@ func Test_register(t *testing.T) {
guestsDisabled: true,
wantResponse: util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(`Guest registration is disabled on "test"`),
+ JSON: spec.Forbidden(`Guest registration is disabled on "test"`),
},
},
{
@@ -318,7 +318,7 @@ func Test_register(t *testing.T) {
loginType: "im.not.known",
wantResponse: util.JSONResponse{
Code: http.StatusNotImplemented,
- JSON: jsonerror.Unknown("unknown/unimplemented auth type"),
+ JSON: spec.Unknown("unknown/unimplemented auth type"),
},
},
{
@@ -326,7 +326,7 @@ func Test_register(t *testing.T) {
registrationDisabled: true,
wantResponse: util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(`Registration is disabled on "test"`),
+ JSON: spec.Forbidden(`Registration is disabled on "test"`),
},
},
{
@@ -344,7 +344,7 @@ func Test_register(t *testing.T) {
username: "success",
wantResponse: util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UserInUse("Desired user ID is already taken."),
+ JSON: spec.UserInUse("Desired user ID is already taken."),
},
},
{
@@ -361,7 +361,7 @@ func Test_register(t *testing.T) {
username: "1337",
wantResponse: util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidUsername("Numeric user IDs are reserved"),
+ JSON: spec.InvalidUsername("Numeric user IDs are reserved"),
},
},
{
@@ -369,7 +369,7 @@ func Test_register(t *testing.T) {
loginType: authtypes.LoginTypeRecaptcha,
wantResponse: util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Unknown(ErrCaptchaDisabled.Error()),
+ JSON: spec.Unknown(ErrCaptchaDisabled.Error()),
},
},
{
@@ -378,7 +378,7 @@ func Test_register(t *testing.T) {
loginType: authtypes.LoginTypeRecaptcha,
wantResponse: util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(ErrMissingResponse.Error()),
+ JSON: spec.BadJSON(ErrMissingResponse.Error()),
},
},
{
@@ -388,7 +388,7 @@ func Test_register(t *testing.T) {
captchaBody: `notvalid`,
wantResponse: util.JSONResponse{
Code: http.StatusUnauthorized,
- JSON: jsonerror.BadJSON(ErrInvalidCaptcha.Error()),
+ JSON: spec.BadJSON(ErrInvalidCaptcha.Error()),
},
},
{
@@ -402,7 +402,7 @@ func Test_register(t *testing.T) {
enableRecaptcha: true,
loginType: authtypes.LoginTypeRecaptcha,
captchaBody: `i should fail for other reasons`,
- wantResponse: util.JSONResponse{Code: http.StatusInternalServerError, JSON: jsonerror.InternalServerError()},
+ wantResponse: util.JSONResponse{Code: http.StatusInternalServerError, JSON: spec.InternalServerError()},
},
}
@@ -484,7 +484,7 @@ func Test_register(t *testing.T) {
if !reflect.DeepEqual(r.Flows, cfg.Derived.Registration.Flows) {
t.Fatalf("unexpected registration flows: %+v, want %+v", r.Flows, cfg.Derived.Registration.Flows)
}
- case *jsonerror.MatrixError:
+ case *spec.MatrixError:
if !reflect.DeepEqual(tc.wantResponse, resp) {
t.Fatalf("(%s), unexpected response: %+v, want: %+v", tc.name, resp, tc.wantResponse)
}
@@ -541,7 +541,7 @@ func Test_register(t *testing.T) {
resp = Register(req, userAPI, &cfg.ClientAPI)
switch resp.JSON.(type) {
- case *jsonerror.MatrixError:
+ case *spec.MatrixError:
if !reflect.DeepEqual(tc.wantResponse, resp) {
t.Fatalf("unexpected response: %+v, want: %+v", resp, tc.wantResponse)
}
diff --git a/clientapi/routing/room_tagging.go b/clientapi/routing/room_tagging.go
index 92b9e665..8802d22a 100644
--- a/clientapi/routing/room_tagging.go
+++ b/clientapi/routing/room_tagging.go
@@ -19,10 +19,10 @@ import (
"net/http"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrix"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -39,14 +39,14 @@ func GetTags(
if device.UserID != userID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Cannot retrieve another user's tags"),
+ JSON: spec.Forbidden("Cannot retrieve another user's tags"),
}
}
tagContent, err := obtainSavedTags(req, userID, roomID, userAPI)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("obtainSavedTags failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -71,7 +71,7 @@ func PutTag(
if device.UserID != userID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Cannot modify another user's tags"),
+ JSON: spec.Forbidden("Cannot modify another user's tags"),
}
}
@@ -83,7 +83,7 @@ func PutTag(
tagContent, err := obtainSavedTags(req, userID, roomID, userAPI)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("obtainSavedTags failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if tagContent.Tags == nil {
@@ -93,7 +93,7 @@ func PutTag(
if err = saveTagData(req, userID, roomID, userAPI, tagContent); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("saveTagData failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -118,14 +118,14 @@ func DeleteTag(
if device.UserID != userID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Cannot modify another user's tags"),
+ JSON: spec.Forbidden("Cannot modify another user's tags"),
}
}
tagContent, err := obtainSavedTags(req, userID, roomID, userAPI)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("obtainSavedTags failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// Check whether the tag to be deleted exists
@@ -141,7 +141,7 @@ func DeleteTag(
if err = saveTagData(req, userID, roomID, userAPI, tagContent); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("saveTagData failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go
index 70299e14..2a2fa665 100644
--- a/clientapi/routing/routing.go
+++ b/clientapi/routing/routing.go
@@ -33,7 +33,6 @@ import (
"github.com/matrix-org/dendrite/clientapi/api"
"github.com/matrix-org/dendrite/clientapi/auth"
clientutil "github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
federationAPI "github.com/matrix-org/dendrite/federationapi/api"
"github.com/matrix-org/dendrite/internal/httputil"
@@ -148,7 +147,7 @@ func Setup(
}
return util.JSONResponse{
Code: http.StatusMethodNotAllowed,
- JSON: jsonerror.NotFound("unknown method"),
+ JSON: spec.NotFound("unknown method"),
}
}),
).Methods(http.MethodGet, http.MethodPost, http.MethodOptions)
@@ -659,7 +658,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("missing trailing slash"),
+ JSON: spec.InvalidParam("missing trailing slash"),
}
}),
).Methods(http.MethodGet, http.MethodOptions)
@@ -674,7 +673,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("scope, kind and rule ID must be specified"),
+ JSON: spec.InvalidParam("scope, kind and rule ID must be specified"),
}
}),
).Methods(http.MethodPut)
@@ -693,7 +692,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("missing trailing slash after scope"),
+ JSON: spec.InvalidParam("missing trailing slash after scope"),
}
}),
).Methods(http.MethodGet, http.MethodOptions)
@@ -702,7 +701,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("kind and rule ID must be specified"),
+ JSON: spec.InvalidParam("kind and rule ID must be specified"),
}
}),
).Methods(http.MethodPut)
@@ -721,7 +720,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("missing trailing slash after kind"),
+ JSON: spec.InvalidParam("missing trailing slash after kind"),
}
}),
).Methods(http.MethodGet, http.MethodOptions)
@@ -730,7 +729,7 @@ func Setup(
httputil.MakeAuthAPI("push_rules", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue("rule ID must be specified"),
+ JSON: spec.InvalidParam("rule ID must be specified"),
}
}),
).Methods(http.MethodPut)
@@ -939,7 +938,7 @@ func Setup(
// TODO: Allow people to peek into rooms.
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.GuestAccessForbidden("Guest access not implemented"),
+ JSON: spec.GuestAccessForbidden("Guest access not implemented"),
}
}),
).Methods(http.MethodGet, http.MethodOptions)
@@ -1244,7 +1243,7 @@ func Setup(
if version == "" {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.InvalidArgumentValue("version must be specified"),
+ JSON: spec.InvalidParam("version must be specified"),
}
}
var reqBody keyBackupSessionRequest
@@ -1265,7 +1264,7 @@ func Setup(
if version == "" {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.InvalidArgumentValue("version must be specified"),
+ JSON: spec.InvalidParam("version must be specified"),
}
}
roomID := vars["roomID"]
@@ -1297,7 +1296,7 @@ func Setup(
if version == "" {
return util.JSONResponse{
Code: 400,
- JSON: jsonerror.InvalidArgumentValue("version must be specified"),
+ JSON: spec.InvalidParam("version must be specified"),
}
}
var reqBody userapi.KeyBackupSession
diff --git a/clientapi/routing/sendevent.go b/clientapi/routing/sendevent.go
index 7e5918f2..2e3cd411 100644
--- a/clientapi/routing/sendevent.go
+++ b/clientapi/routing/sendevent.go
@@ -30,7 +30,6 @@ import (
"github.com/sirupsen/logrus"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/internal/transactions"
"github.com/matrix-org/dendrite/roomserver/api"
@@ -81,7 +80,7 @@ func SendEvent(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UnsupportedRoomVersion(err.Error()),
+ JSON: spec.UnsupportedRoomVersion(err.Error()),
}
}
@@ -126,7 +125,7 @@ func SendEvent(
if err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidArgumentValue(err.Error()),
+ JSON: spec.InvalidParam(err.Error()),
}
}
@@ -145,12 +144,12 @@ func SendEvent(
if !aliasReq.Valid() {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam("Request contains invalid aliases."),
+ JSON: spec.InvalidParam("Request contains invalid aliases."),
}
}
aliasRes := &api.GetAliasesForRoomIDResponse{}
if err = rsAPI.GetAliasesForRoomID(req.Context(), &api.GetAliasesForRoomIDRequest{RoomID: roomID}, aliasRes); err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
var found int
requestAliases := append(aliasReq.AltAliases, aliasReq.Alias)
@@ -165,7 +164,7 @@ func SendEvent(
if aliasReq.Alias != "" && found < len(requestAliases) {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadAlias("No matching alias found."),
+ JSON: spec.BadAlias("No matching alias found."),
}
}
}
@@ -194,7 +193,7 @@ func SendEvent(
false,
); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("SendEvents failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
timeToSubmitEvent := time.Since(startedSubmittingEvent)
util.GetLogger(req.Context()).WithFields(logrus.Fields{
@@ -273,13 +272,13 @@ func generateSendEvent(
err := proto.SetContent(r)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("proto.SetContent failed")
- resErr := jsonerror.InternalServerError()
+ resErr := spec.InternalServerError()
return nil, &resErr
}
identity, err := cfg.Matrix.SigningIdentityFor(device.UserDomain())
if err != nil {
- resErr := jsonerror.InternalServerError()
+ resErr := spec.InternalServerError()
return nil, &resErr
}
@@ -288,27 +287,27 @@ func generateSendEvent(
if err == eventutil.ErrRoomNoExists {
return nil, &util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("Room does not exist"),
+ JSON: spec.NotFound("Room does not exist"),
}
} else if e, ok := err.(gomatrixserverlib.BadJSONError); ok {
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(e.Error()),
+ JSON: spec.BadJSON(e.Error()),
}
} else if e, ok := err.(gomatrixserverlib.EventValidationError); ok {
if e.Code == gomatrixserverlib.EventValidationTooLarge {
return nil, &util.JSONResponse{
Code: http.StatusRequestEntityTooLarge,
- JSON: jsonerror.BadJSON(e.Error()),
+ JSON: spec.BadJSON(e.Error()),
}
}
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(e.Error()),
+ JSON: spec.BadJSON(e.Error()),
}
} else if err != nil {
util.GetLogger(ctx).WithError(err).Error("eventutil.BuildEvent failed")
- resErr := jsonerror.InternalServerError()
+ resErr := spec.InternalServerError()
return nil, &resErr
}
@@ -321,7 +320,7 @@ func generateSendEvent(
if err = gomatrixserverlib.Allowed(e.PDU, &provider); err != nil {
return nil, &util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(err.Error()), // TODO: Is this error string comprehensible to the client?
+ JSON: spec.Forbidden(err.Error()), // TODO: Is this error string comprehensible to the client?
}
}
@@ -332,13 +331,13 @@ func generateSendEvent(
util.GetLogger(ctx).WithError(err).Error("Cannot unmarshal the event content.")
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Cannot unmarshal the event content."),
+ JSON: spec.BadJSON("Cannot unmarshal the event content."),
}
}
if content["replacement_room"] == e.RoomID() {
return nil, &util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidParam("Cannot send tombstone event that points to the same room."),
+ JSON: spec.InvalidParam("Cannot send tombstone event that points to the same room."),
}
}
}
diff --git a/clientapi/routing/sendtodevice.go b/clientapi/routing/sendtodevice.go
index 0c022793..6d4af072 100644
--- a/clientapi/routing/sendtodevice.go
+++ b/clientapi/routing/sendtodevice.go
@@ -19,10 +19,10 @@ import (
"github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
"github.com/matrix-org/dendrite/internal/transactions"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
// SendToDevice handles PUT /_matrix/client/r0/sendToDevice/{eventType}/{txnId}
@@ -53,7 +53,7 @@ func SendToDevice(
req.Context(), device.UserID, userID, deviceID, eventType, message,
); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("eduProducer.SendToDevice failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
}
diff --git a/clientapi/routing/sendtyping.go b/clientapi/routing/sendtyping.go
index 9dc884d6..17532a2d 100644
--- a/clientapi/routing/sendtyping.go
+++ b/clientapi/routing/sendtyping.go
@@ -18,10 +18,10 @@ import (
"github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/producers"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
type typingContentJSON struct {
@@ -39,7 +39,7 @@ func SendTyping(
if device.UserID != userID {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("Cannot set another user's typing state"),
+ JSON: spec.Forbidden("Cannot set another user's typing state"),
}
}
@@ -58,7 +58,7 @@ func SendTyping(
if err := syncProducer.SendTyping(req.Context(), userID, roomID, r.Typing, r.Timeout); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("eduProducer.Send failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/server_notices.go b/clientapi/routing/server_notices.go
index a9967adf..a418677e 100644
--- a/clientapi/routing/server_notices.go
+++ b/clientapi/routing/server_notices.go
@@ -32,12 +32,12 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
"github.com/matrix-org/dendrite/internal/transactions"
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/setup/config"
userapi "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
// Unspecced server notice request
@@ -68,7 +68,7 @@ func SendServerNotice(
if device.AccountType != userapi.AccountTypeAdmin {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("This API can only be used by admin users."),
+ JSON: spec.Forbidden("This API can only be used by admin users."),
}
}
@@ -90,7 +90,7 @@ func SendServerNotice(
if !r.valid() {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON("Invalid request"),
+ JSON: spec.BadJSON("Invalid request"),
}
}
@@ -175,7 +175,7 @@ func SendServerNotice(
}}
if err = saveTagData(req, r.UserID, roomID, userAPI, serverAlertTag); err != nil {
util.GetLogger(ctx).WithError(err).Error("saveTagData failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
default:
@@ -189,7 +189,7 @@ func SendServerNotice(
err := rsAPI.QueryMembershipForUser(ctx, &api.QueryMembershipForUserRequest{UserID: r.UserID, RoomID: roomID}, &membershipRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("unable to query membership for user")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !membershipRes.IsInRoom {
// re-invite the user
@@ -237,7 +237,7 @@ func SendServerNotice(
false,
); err != nil {
util.GetLogger(ctx).WithError(err).Error("SendEvents failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
util.GetLogger(ctx).WithFields(logrus.Fields{
"event_id": e.EventID(),
diff --git a/clientapi/routing/state.go b/clientapi/routing/state.go
index 705782e8..75abbda9 100644
--- a/clientapi/routing/state.go
+++ b/clientapi/routing/state.go
@@ -20,7 +20,6 @@ import (
"fmt"
"net/http"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/dendrite/syncapi/synctypes"
@@ -57,12 +56,12 @@ func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI a
StateToFetch: []gomatrixserverlib.StateKeyTuple{},
}, &stateRes); err != nil {
util.GetLogger(ctx).WithError(err).Error("queryAPI.QueryLatestEventsAndState failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !stateRes.RoomExists {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden("room does not exist"),
+ JSON: spec.Forbidden("room does not exist"),
}
}
@@ -74,7 +73,7 @@ func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI a
content := map[string]string{}
if err := json.Unmarshal(ev.Content(), &content); err != nil {
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if visibility, ok := content["history_visibility"]; ok {
worldReadable = visibility == "world_readable"
@@ -100,14 +99,14 @@ func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI a
}, &membershipRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("Failed to QueryMembershipForUser")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// If the user has never been in the room then stop at this point.
// We won't tell the user about a room they have never joined.
if !membershipRes.HasBeenInRoom {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)),
+ JSON: spec.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)),
}
}
// Otherwise, if the user has been in the room, whether or not we
@@ -148,7 +147,7 @@ func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI a
}, &stateAfterRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("Failed to QueryMembershipForUser")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
for _, ev := range stateAfterRes.StateEvents {
stateEvents = append(
@@ -203,7 +202,7 @@ func OnIncomingStateTypeRequest(
StateToFetch: stateToFetch,
}, &stateRes); err != nil {
util.GetLogger(ctx).WithError(err).Error("queryAPI.QueryLatestEventsAndState failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// Look at the room state and see if we have a history visibility event
@@ -214,7 +213,7 @@ func OnIncomingStateTypeRequest(
content := map[string]string{}
if err := json.Unmarshal(ev.Content(), &content); err != nil {
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if visibility, ok := content["history_visibility"]; ok {
worldReadable = visibility == "world_readable"
@@ -240,14 +239,14 @@ func OnIncomingStateTypeRequest(
}, &membershipRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("Failed to QueryMembershipForUser")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
// If the user has never been in the room then stop at this point.
// We won't tell the user about a room they have never joined.
if !membershipRes.HasBeenInRoom || membershipRes.Membership == spec.Ban {
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)),
+ JSON: spec.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)),
}
}
// Otherwise, if the user has been in the room, whether or not we
@@ -295,7 +294,7 @@ func OnIncomingStateTypeRequest(
}, &stateAfterRes)
if err != nil {
util.GetLogger(ctx).WithError(err).Error("Failed to QueryMembershipForUser")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if len(stateAfterRes.StateEvents) > 0 {
event = stateAfterRes.StateEvents[0]
@@ -307,7 +306,7 @@ func OnIncomingStateTypeRequest(
if event == nil {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(fmt.Sprintf("Cannot find state event for %q", evType)),
+ JSON: spec.NotFound(fmt.Sprintf("Cannot find state event for %q", evType)),
}
}
diff --git a/clientapi/routing/thirdparty.go b/clientapi/routing/thirdparty.go
index 7a62da44..0ee21855 100644
--- a/clientapi/routing/thirdparty.go
+++ b/clientapi/routing/thirdparty.go
@@ -21,8 +21,8 @@ import (
"github.com/matrix-org/util"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
// Protocols implements
@@ -33,13 +33,13 @@ func Protocols(req *http.Request, asAPI appserviceAPI.AppServiceInternalAPI, dev
resp := &appserviceAPI.ProtocolResponse{}
if err := asAPI.Protocols(req.Context(), &appserviceAPI.ProtocolRequest{Protocol: protocol}, resp); err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !resp.Exists {
if protocol != "" {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("The protocol is unknown."),
+ JSON: spec.NotFound("The protocol is unknown."),
}
}
return util.JSONResponse{
@@ -71,12 +71,12 @@ func User(req *http.Request, asAPI appserviceAPI.AppServiceInternalAPI, device *
Protocol: protocol,
Params: params.Encode(),
}, resp); err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !resp.Exists {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("The Matrix User ID was not found"),
+ JSON: spec.NotFound("The Matrix User ID was not found"),
}
}
return util.JSONResponse{
@@ -97,12 +97,12 @@ func Location(req *http.Request, asAPI appserviceAPI.AppServiceInternalAPI, devi
Protocol: protocol,
Params: params.Encode(),
}, resp); err != nil {
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !resp.Exists {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("No portal rooms were found."),
+ JSON: spec.NotFound("No portal rooms were found."),
}
}
return util.JSONResponse{
diff --git a/clientapi/routing/threepid.go b/clientapi/routing/threepid.go
index 102b1d1c..64fa59e4 100644
--- a/clientapi/routing/threepid.go
+++ b/clientapi/routing/threepid.go
@@ -19,12 +19,12 @@ import (
"github.com/matrix-org/dendrite/clientapi/auth/authtypes"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/clientapi/threepid"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
userdb "github.com/matrix-org/dendrite/userapi/storage"
"github.com/matrix-org/gomatrixserverlib/fclient"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
@@ -60,13 +60,13 @@ func RequestEmailToken(req *http.Request, threePIDAPI api.ClientUserAPI, cfg *co
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threePIDAPI.QueryLocalpartForThreePID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if len(res.Localpart) > 0 {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MatrixError{
+ JSON: spec.MatrixError{
ErrCode: "M_THREEPID_IN_USE",
Err: userdb.Err3PIDInUse.Error(),
},
@@ -77,11 +77,11 @@ func RequestEmailToken(req *http.Request, threePIDAPI api.ClientUserAPI, cfg *co
if err == threepid.ErrNotTrusted {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotTrusted(body.IDServer),
+ JSON: spec.NotTrusted(body.IDServer),
}
} else if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepid.CreateSession failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -105,17 +105,17 @@ func CheckAndSave3PIDAssociation(
if err == threepid.ErrNotTrusted {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.NotTrusted(body.Creds.IDServer),
+ JSON: spec.NotTrusted(body.Creds.IDServer),
}
} else if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepid.CheckAssociation failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if !verified {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.MatrixError{
+ JSON: spec.MatrixError{
ErrCode: "M_THREEPID_AUTH_FAILED",
Err: "Failed to auth 3pid",
},
@@ -127,7 +127,7 @@ func CheckAndSave3PIDAssociation(
err = threepid.PublishAssociation(req.Context(), body.Creds, device.UserID, cfg, client)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepid.PublishAssociation failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
}
@@ -135,7 +135,7 @@ func CheckAndSave3PIDAssociation(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
if err = threePIDAPI.PerformSaveThreePIDAssociation(req.Context(), &api.PerformSaveThreePIDAssociationRequest{
@@ -145,7 +145,7 @@ func CheckAndSave3PIDAssociation(
Medium: medium,
}, &struct{}{}); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threePIDAPI.PerformSaveThreePIDAssociation failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -161,7 +161,7 @@ func GetAssociated3PIDs(
localpart, domain, err := gomatrixserverlib.SplitID('@', device.UserID)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
res := &api.QueryThreePIDsForLocalpartResponse{}
@@ -171,7 +171,7 @@ func GetAssociated3PIDs(
}, res)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepidAPI.QueryThreePIDsForLocalpart failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
@@ -192,7 +192,7 @@ func Forget3PID(req *http.Request, threepidAPI api.ClientUserAPI) util.JSONRespo
Medium: body.Medium,
}, &struct{}{}); err != nil {
util.GetLogger(req.Context()).WithError(err).Error("threepidAPI.PerformForgetThreePID failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/upgrade_room.go b/clientapi/routing/upgrade_room.go
index f0936db1f..43f8d3e2 100644
--- a/clientapi/routing/upgrade_room.go
+++ b/clientapi/routing/upgrade_room.go
@@ -20,13 +20,13 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/httputil"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/internal/eventutil"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/version"
"github.com/matrix-org/dendrite/setup/config"
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util"
)
@@ -55,7 +55,7 @@ func UpgradeRoom(
if _, err := version.SupportedRoomVersion(gomatrixserverlib.RoomVersion(r.NewVersion)); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.UnsupportedRoomVersion("This server does not support that room version"),
+ JSON: spec.UnsupportedRoomVersion("This server does not support that room version"),
}
}
@@ -65,16 +65,16 @@ func UpgradeRoom(
case roomserverAPI.ErrNotAllowed:
return util.JSONResponse{
Code: http.StatusForbidden,
- JSON: jsonerror.Forbidden(e.Error()),
+ JSON: spec.Forbidden(e.Error()),
}
default:
if errors.Is(err, eventutil.ErrRoomNoExists) {
return util.JSONResponse{
Code: http.StatusNotFound,
- JSON: jsonerror.NotFound("Room does not exist"),
+ JSON: spec.NotFound("Room does not exist"),
}
}
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
return util.JSONResponse{
diff --git a/clientapi/routing/voip.go b/clientapi/routing/voip.go
index f0f69ce3..f3db0cbe 100644
--- a/clientapi/routing/voip.go
+++ b/clientapi/routing/voip.go
@@ -25,9 +25,9 @@ import (
"github.com/matrix-org/gomatrix"
"github.com/matrix-org/util"
- "github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib/spec"
)
// RequestTurnServer implements:
@@ -60,7 +60,7 @@ func RequestTurnServer(req *http.Request, device *api.Device, cfg *config.Client
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("mac.Write failed")
- return jsonerror.InternalServerError()
+ return spec.InternalServerError()
}
resp.Password = base64.StdEncoding.EncodeToString(mac.Sum(nil))