mirror of
https://github.com/signaller-matrix/signaller.git
synced 2024-11-21 18:02:24 +00:00
Start implementation of Invite method
This commit is contained in:
parent
3185bda38e
commit
a513e35953
@ -97,7 +97,7 @@ Implemented from [Client-Server API](https://matrix.org/docs/spec/client_server/
|
||||
|
||||
- [x] [10.4.1 GET /_matrix/client/r0/joined_rooms](https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-joined-rooms)
|
||||
|
||||
- [ ] [10.4.2.1 POST /_matrix/client/r0/rooms/{roomId}/invite](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-invite)
|
||||
- [ ] **[10.4.2.1 POST /_matrix/client/r0/rooms/{roomId}/invite](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-invite)**
|
||||
- [ ] [10.4.2.2 POST /_matrix/client/r0/rooms/{roomId}/join](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-join)
|
||||
- [ ] [10.4.2.3 POST /_matrix/client/r0/join/{roomIdOrAlias}](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-join-roomidoralias)
|
||||
|
||||
|
@ -49,4 +49,5 @@ type User interface {
|
||||
Logout(token string)
|
||||
LogoutAll()
|
||||
JoinRoom(Room) models.ApiError
|
||||
Invite(Room, User) models.ApiError
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ type Room struct {
|
||||
|
||||
creator internal.User
|
||||
joined []internal.User
|
||||
invites []internal.User
|
||||
|
||||
events []RoomEvent
|
||||
|
||||
|
@ -122,6 +122,42 @@ func (user *User) SetTopic(room internal.Room, topic string) models.ApiError {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (user *User) Invite(room internal.Room, invitee internal.User) models.ApiError {
|
||||
memRoom := room.(*Room)
|
||||
|
||||
memRoom.mutex.Lock()
|
||||
defer memRoom.mutex.Unlock()
|
||||
|
||||
userInRoom := false
|
||||
|
||||
for _, roomUser := range memRoom.joined {
|
||||
if user.ID() == roomUser.ID() {
|
||||
userInRoom = true
|
||||
}
|
||||
}
|
||||
|
||||
if !userInRoom {
|
||||
return models.NewError(models.M_FORBIDDEN, "the inviter is not currently in the room") // TODO: check code
|
||||
}
|
||||
|
||||
// TODO: remove repeated cycle
|
||||
for _, roomUser := range memRoom.joined {
|
||||
if roomUser.ID() == invitee.ID() {
|
||||
return models.NewError(models.M_FORBIDDEN, "the invitee is already a member of the room.") // TODO: check code
|
||||
}
|
||||
}
|
||||
|
||||
for _, inviteeUser := range memRoom.invites {
|
||||
if inviteeUser.ID() == invitee.ID() {
|
||||
return models.NewError(models.M_FORBIDDEN, "user already has been invited") // TODO: check code
|
||||
}
|
||||
}
|
||||
|
||||
memRoom.invites = append(memRoom.invites, invitee) // TODO: add invite event + info about inviter
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (user *User) LeaveRoom(room internal.Room) models.ApiError {
|
||||
room.(*Room).mutex.Lock()
|
||||
defer room.(*Room).mutex.Unlock()
|
||||
|
@ -192,3 +192,25 @@ func TestLogoutAll(t *testing.T) {
|
||||
|
||||
assert.Len(t, user.Devices(), 0)
|
||||
}
|
||||
|
||||
func TestInviteUser(t *testing.T) {
|
||||
backend := NewBackend("localhost")
|
||||
|
||||
user1, _, err := backend.Register("username1", "", "")
|
||||
assert.NoError(t, err)
|
||||
|
||||
user2, _, err := backend.Register("username2", "", "")
|
||||
assert.NoError(t, err)
|
||||
|
||||
request := createroom.Request{
|
||||
RoomAliasName: "room1",
|
||||
Name: "room1"}
|
||||
|
||||
room, err := user1.CreateRoom(request)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, room.(*Room).invites, 0)
|
||||
|
||||
err = user1.Invite(room, user2)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, room.(*Room).invites, 1)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user