mirror of
https://github.com/signaller-matrix/signaller.git
synced 2024-11-09 12:11:03 +00:00
Add user change password method
This commit is contained in:
parent
33bb853438
commit
8bc553aff4
@ -14,6 +14,7 @@ Implemented from [Client-Server API](https://matrix.org/docs/spec/client_server/
|
|||||||
- [x] [5.4.2 POST /_matrix/client/r0/login](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-login)
|
- [x] [5.4.2 POST /_matrix/client/r0/login](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-login)
|
||||||
- [x] [5.4.3 POST /_matrix/client/r0/logout](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout)
|
- [x] [5.4.3 POST /_matrix/client/r0/logout](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout)
|
||||||
- [x] [5.4.4 POST /_matrix/client/r0/logout/all](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout-all)
|
- [x] [5.4.4 POST /_matrix/client/r0/logout/all](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-logout-all)
|
||||||
|
- [x] [5.5.4 POST /_matrix/client/r0/account/password](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-account-password)
|
||||||
- [x] [5.7.1 GET /_matrix/client/r0/account/whoami](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-account-whoami)
|
- [x] [5.7.1 GET /_matrix/client/r0/account/whoami](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-account-whoami)
|
||||||
- [x] [6.1 GET /_matrix/client/r0/capabilities](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-capabilities)
|
- [x] [6.1 GET /_matrix/client/r0/capabilities](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-capabilities)
|
||||||
- [x] [10.4.1 GET /_matrix/client/r0/joined_rooms](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-joined-rooms)
|
- [x] [10.4.1 GET /_matrix/client/r0/joined_rooms](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-joined-rooms)
|
||||||
|
@ -33,6 +33,7 @@ type User interface {
|
|||||||
SetTopic(room Room, topic string) *models.ApiError
|
SetTopic(room Room, topic string) *models.ApiError
|
||||||
SendMessage(room Room, text string) *models.ApiError
|
SendMessage(room Room, text string) *models.ApiError
|
||||||
JoinedRooms() []Room
|
JoinedRooms() []Room
|
||||||
|
ChangePassword(newPassword string)
|
||||||
Logout(token string)
|
Logout(token string)
|
||||||
LogoutAll()
|
LogoutAll()
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package memory
|
package memory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/nxshock/signaller/internal"
|
"github.com/nxshock/signaller/internal"
|
||||||
@ -15,6 +16,8 @@ type User struct {
|
|||||||
Tokens map[string]Token
|
Tokens map[string]Token
|
||||||
|
|
||||||
backend *Backend
|
backend *Backend
|
||||||
|
|
||||||
|
mutex sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) ID() string {
|
func (user *User) ID() string {
|
||||||
@ -173,6 +176,13 @@ func (user *User) JoinedRooms() []internal.Room {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (user *User) ChangePassword(newPassword string) {
|
||||||
|
user.mutex.Lock()
|
||||||
|
defer user.mutex.Unlock()
|
||||||
|
|
||||||
|
user.password = newPassword
|
||||||
|
}
|
||||||
|
|
||||||
func (user *User) Logout(token string) {
|
func (user *User) Logout(token string) {
|
||||||
delete(user.Tokens, token)
|
delete(user.Tokens, token)
|
||||||
}
|
}
|
||||||
|
@ -118,3 +118,15 @@ func TestJoinedRooms(t *testing.T) {
|
|||||||
rooms := user.JoinedRooms()
|
rooms := user.JoinedRooms()
|
||||||
assert.Equal(t, []internal.Room{room}, rooms)
|
assert.Equal(t, []internal.Room{room}, rooms)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewPassword(t *testing.T) {
|
||||||
|
backend := NewBackend("localhost")
|
||||||
|
|
||||||
|
var newPassword = "new password"
|
||||||
|
|
||||||
|
user, _, err := backend.Register("user1", "old password", "")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
user.ChangePassword(newPassword)
|
||||||
|
assert.Equal(t, newPassword, user.Password())
|
||||||
|
}
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/nxshock/signaller/internal/models/capabilities"
|
"github.com/nxshock/signaller/internal/models/capabilities"
|
||||||
"github.com/nxshock/signaller/internal/models/joinedrooms"
|
"github.com/nxshock/signaller/internal/models/joinedrooms"
|
||||||
login "github.com/nxshock/signaller/internal/models/login"
|
login "github.com/nxshock/signaller/internal/models/login"
|
||||||
|
"github.com/nxshock/signaller/internal/models/password"
|
||||||
register "github.com/nxshock/signaller/internal/models/register"
|
register "github.com/nxshock/signaller/internal/models/register"
|
||||||
mSync "github.com/nxshock/signaller/internal/models/sync"
|
mSync "github.com/nxshock/signaller/internal/models/sync"
|
||||||
"github.com/nxshock/signaller/internal/models/versions"
|
"github.com/nxshock/signaller/internal/models/versions"
|
||||||
@ -198,6 +199,32 @@ func JoinedRoomsHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
sendJsonResponse(w, http.StatusOK, response)
|
sendJsonResponse(w, http.StatusOK, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-account-password
|
||||||
|
func PasswordHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Method != http.MethodPost {
|
||||||
|
errorResponse(w, models.M_UNKNOWN, http.StatusBadRequest, "wrong method: "+r.Method)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
token := getTokenFromResponse(r)
|
||||||
|
if token == "" {
|
||||||
|
errorResponse(w, models.M_FORBIDDEN, http.StatusForbidden, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
user := currServer.Backend.GetUserByToken(token)
|
||||||
|
if user == nil {
|
||||||
|
errorResponse(w, models.M_UNKNOWN_TOKEN, http.StatusBadRequest, "")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var request password.Request
|
||||||
|
getRequest(r, &request) // TODO: handle error
|
||||||
|
|
||||||
|
user.ChangePassword(request.NewPassword)
|
||||||
|
|
||||||
|
sendJsonResponse(w, http.StatusOK, struct{}{})
|
||||||
|
}
|
||||||
|
|
||||||
// https://models.org/docs/spec/client_server/latest#get-models-client-r0-sync
|
// https://models.org/docs/spec/client_server/latest#get-models-client-r0-sync
|
||||||
func SyncHandler(w http.ResponseWriter, r *http.Request) {
|
func SyncHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
var request mSync.SyncRequest
|
var request mSync.SyncRequest
|
||||||
|
12
internal/models/password/password.go
Normal file
12
internal/models/password/password.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package password
|
||||||
|
|
||||||
|
// https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-account-password
|
||||||
|
type Request struct {
|
||||||
|
NewPassword string `json:"new_password"` // Required. The new password for the account.
|
||||||
|
Auth AuthenticationData `json:"auth,omitempty"` // Additional authentication information for the user-interactive authentication API.
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuthenticationData struct {
|
||||||
|
Type string `json:"type"` // Required. The login type that the client is attempting to complete.
|
||||||
|
Session string `json:"session"` //The value of the session key given by the homeserver.
|
||||||
|
}
|
@ -29,6 +29,7 @@ func New() *Server {
|
|||||||
router.HandleFunc("/_matrix/client/r0/register", RegisterHandler)
|
router.HandleFunc("/_matrix/client/r0/register", RegisterHandler)
|
||||||
router.HandleFunc("/_matrix/client/r0/account/whoami", WhoAmIHandler)
|
router.HandleFunc("/_matrix/client/r0/account/whoami", WhoAmIHandler)
|
||||||
router.HandleFunc("/_matrix/client/r0/joined_rooms", JoinedRoomsHandler)
|
router.HandleFunc("/_matrix/client/r0/joined_rooms", JoinedRoomsHandler)
|
||||||
|
router.HandleFunc("/_matrix/client/r0/account/password", PasswordHandler)
|
||||||
router.HandleFunc("/_matrix/client/r0/sync", SyncHandler)
|
router.HandleFunc("/_matrix/client/r0/sync", SyncHandler)
|
||||||
router.HandleFunc("/_matrix/client/r0/capabilities", CapabilitiesHandler)
|
router.HandleFunc("/_matrix/client/r0/capabilities", CapabilitiesHandler)
|
||||||
router.HandleFunc("/", RootHandler)
|
router.HandleFunc("/", RootHandler)
|
||||||
|
Loading…
Reference in New Issue
Block a user