aboutsummaryrefslogtreecommitdiff
path: root/clientapi/auth/password.go
diff options
context:
space:
mode:
Diffstat (limited to 'clientapi/auth/password.go')
-rw-r--r--clientapi/auth/password.go21
1 files changed, 16 insertions, 5 deletions
diff --git a/clientapi/auth/password.go b/clientapi/auth/password.go
index 700a72f5..4de2b443 100644
--- a/clientapi/auth/password.go
+++ b/clientapi/auth/password.go
@@ -61,7 +61,7 @@ func (t *LoginTypePassword) LoginFromJSON(ctx context.Context, reqBytes []byte)
func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login, *util.JSONResponse) {
r := req.(*PasswordRequest)
- username := strings.ToLower(r.Username())
+ username := r.Username()
if username == "" {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
@@ -74,32 +74,43 @@ func (t *LoginTypePassword) Login(ctx context.Context, req interface{}) (*Login,
JSON: jsonerror.BadJSON("A password must be supplied."),
}
}
- localpart, _, err := userutil.ParseUsernameParam(username, t.Config.Matrix)
+ localpart, domain, err := userutil.ParseUsernameParam(username, t.Config.Matrix)
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusUnauthorized,
JSON: jsonerror.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."),
+ }
+ }
// Squash username to all lowercase letters
res := &api.QueryAccountByPasswordResponse{}
- err = t.GetAccountByPassword(ctx, &api.QueryAccountByPasswordRequest{Localpart: strings.ToLower(localpart), PlaintextPassword: r.Password}, res)
+ err = t.GetAccountByPassword(ctx, &api.QueryAccountByPasswordRequest{
+ Localpart: strings.ToLower(localpart),
+ ServerName: domain,
+ PlaintextPassword: r.Password,
+ }, res)
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("unable to fetch account by password"),
+ JSON: jsonerror.Unknown("Unable to fetch account by password."),
}
}
if !res.Exists {
err = t.GetAccountByPassword(ctx, &api.QueryAccountByPasswordRequest{
Localpart: localpart,
+ ServerName: domain,
PlaintextPassword: r.Password,
}, res)
if err != nil {
return nil, &util.JSONResponse{
Code: http.StatusInternalServerError,
- JSON: jsonerror.Unknown("unable to fetch account by password"),
+ JSON: jsonerror.Unknown("Unable to fetch account by password."),
}
}
// Technically we could tell them if the user does not exist by checking if err == sql.ErrNoRows