Remove OPTION method on "/register/available",

Add CheckAccountAvailability method

Signed-off-by: MTRNord <mtrnord1@gmail.com>
This commit is contained in:
MTRNord 2017-10-07 13:18:13 +02:00
parent aad3497f0e
commit 4240762331
No known key found for this signature in database
GPG key ID: E5B89311FAB91B9F
3 changed files with 19 additions and 2 deletions

View file

@ -314,3 +314,13 @@ func (d *Database) GetThreePIDsForLocalpart(
) (threepids []authtypes.ThreePID, err error) { ) (threepids []authtypes.ThreePID, err error) {
return d.threepids.selectThreePIDsForLocalpart(ctx, localpart) return d.threepids.selectThreePIDsForLocalpart(ctx, localpart)
} }
// CheckAccountAvailability checks if the username/localpart is already present in the database.
// If the DB returns sql.ErrNoRows the Localpart isn't taken.
func (d *Database) CheckAccountAvailability(ctx context.Context, localpart string) (bool, error) {
_, err := d.accounts.selectAccountByLocalpart(ctx, localpart)
if err == sql.ErrNoRows {
return true, nil
}
return false, err
}

View file

@ -50,7 +50,14 @@ func RegisterAvailable(
return *resErr return *resErr
} }
if _, resErr := accountDB.GetProfileByLocalpart(req.Context(), username); resErr == nil { availability, availabilityErr := accountDB.CheckAccountAvailability(req.Context(), username)
if availabilityErr != nil {
return util.JSONResponse{
Code: 500,
JSON: jsonerror.Unknown("failed to check availability: " + availabilityErr.Error()),
}
}
if !availability {
return util.JSONResponse{ return util.JSONResponse{
Code: 400, Code: 400,
JSON: jsonerror.InvalidUsername("A different user ID has already been registered for this session"), JSON: jsonerror.InvalidUsername("A different user ID has already been registered for this session"),

View file

@ -133,7 +133,7 @@ func Setup(
r0mux.Handle("/register/available", common.MakeExternalAPI("registerAvailable", func(req *http.Request) util.JSONResponse { r0mux.Handle("/register/available", common.MakeExternalAPI("registerAvailable", func(req *http.Request) util.JSONResponse {
return readers.RegisterAvailable(req, accountDB) return readers.RegisterAvailable(req, accountDB)
})).Methods("GET", "OPTIONS") })).Methods("GET")
r0mux.Handle("/directory/room/{roomAlias}", r0mux.Handle("/directory/room/{roomAlias}",
common.MakeAuthAPI("directory_room", deviceDB, func(req *http.Request, device *authtypes.Device) util.JSONResponse { common.MakeAuthAPI("directory_room", deviceDB, func(req *http.Request, device *authtypes.Device) util.JSONResponse {