Include appservice namespace in username available check
MODIFY
src/github.com/matrix-org/dendrite/clientapi/routing/register.go
src/github.com/matrix-org/dendrite/clientapi/routing/register.go
@@ -866,6 +866,7 @@ type availableResponse struct {
// RegisterAvailable checks if the username is already taken or invalid.
func RegisterAvailable(
req *http.Request,
+ cfg config.Dendrite,
accountDB *accounts.Database,
) util.JSONResponse {
username := req.URL.Query().Get("username")
@@ -877,6 +878,17 @@ func RegisterAvailable(
return *err
}
+ // Check if this username is reserved by an application service
+ userID := userutil.MakeUserID(username, cfg.Matrix.ServerName)
+ for _, appservice := range cfg.Derived.ApplicationServices {
+ if appservice.IsInterestedInUserID(userID) {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.UserInUse("Desired user ID is reserved by an application service."),
+ }
+ }
+ }
+
availability, availabilityErr := accountDB.CheckAccountAvailability(req.Context(), username)
if availabilityErr != nil {
return util.JSONResponse{
@@ -887,7 +899,7 @@ func RegisterAvailable(
if !availability {
return util.JSONResponse{
Code: http.StatusBadRequest,
- JSON: jsonerror.InvalidUsername("A different user ID has already been registered for this session"),
+ JSON: jsonerror.UserInUse("Desired User ID is already taken."),
}
}

MODIFY
src/github.com/matrix-org/dendrite/clientapi/routing/routing.go
src/github.com/matrix-org/dendrite/clientapi/routing/routing.go
@@ -139,7 +139,7 @@ func Setup(
})).Methods(http.MethodPost, http.MethodOptions)
r0mux.Handle("/register/available", common.MakeExternalAPI("registerAvailable", func(req *http.Request) util.JSONResponse {
- return RegisterAvailable(req, accountDB)
+ return RegisterAvailable(req, cfg, accountDB)
})).Methods(http.MethodGet, http.MethodOptions)
r0mux.Handle("/directory/room/{roomAlias}",

Include appservice namespace in username available check (#504)

Signed-off-by: Andrew Morgan <andrewm@matrix.org>