Add "reason" field to disinvite message.

This is required so clients can differentiate between no longer being
invited or the room being deleted. Fixes #25.
This commit is contained in:
Joachim Bauch 2020-07-07 09:54:26 +02:00
parent 3d73ab48db
commit 5bd525eae0
Failed to extract signature
4 changed files with 28 additions and 10 deletions

View file

@ -399,6 +399,17 @@ type RoomEventServerMessage struct {
Users []map[string]interface{} `json:"users,omitempty"`
}
const (
DisinviteReasonDisinvited = "disinvited"
DisinviteReasonDeleted = "deleted"
)
type RoomDisinviteEventServerMessage struct {
RoomEventServerMessage
Reason string `json:"reason"`
}
type RoomEventMessage struct {
RoomId string `json:"roomid"`
Data *json.RawMessage `json:"data,omitempty"`
@ -414,9 +425,9 @@ type EventServerMessage struct {
Change []*EventServerMessageSessionEntry `json:"change,omitempty"`
// Used for target "roomlist" / "participants"
Invite *RoomEventServerMessage `json:"invite,omitempty"`
Disinvite *RoomEventServerMessage `json:"disinvite,omitempty"`
Update *RoomEventServerMessage `json:"update,omitempty"`
Invite *RoomEventServerMessage `json:"invite,omitempty"`
Disinvite *RoomDisinviteEventServerMessage `json:"disinvite,omitempty"`
Update *RoomEventServerMessage `json:"update,omitempty"`
// Used for target "message"
Message *RoomEventMessage `json:"message,omitempty"`

View file

@ -291,14 +291,17 @@ func (b *BackendServer) sendRoomInvite(roomid string, userids []string, properti
}
}
func (b *BackendServer) sendRoomDisinvite(roomid string, userids []string, sessionids []string) {
func (b *BackendServer) sendRoomDisinvite(roomid string, reason string, userids []string, sessionids []string) {
msg := &ServerMessage{
Type: "event",
Event: &EventServerMessage{
Target: "roomlist",
Type: "disinvite",
Disinvite: &RoomEventServerMessage{
RoomId: roomid,
Disinvite: &RoomDisinviteEventServerMessage{
RoomEventServerMessage: RoomEventServerMessage{
RoomId: roomid,
},
Reason: reason,
},
},
}
@ -519,14 +522,14 @@ func (b *BackendServer) roomHandler(w http.ResponseWriter, r *http.Request, body
b.sendRoomInvite(roomid, request.Invite.UserIds, request.Invite.Properties)
b.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties)
case "disinvite":
b.sendRoomDisinvite(roomid, request.Disinvite.UserIds, request.Disinvite.SessionIds)
b.sendRoomDisinvite(roomid, DisinviteReasonDisinvited, request.Disinvite.UserIds, request.Disinvite.SessionIds)
b.sendRoomUpdate(roomid, request.Disinvite.UserIds, request.Disinvite.AllUserIds, request.Disinvite.Properties)
case "update":
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties)
case "delete":
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
b.sendRoomDisinvite(roomid, request.Delete.UserIds, nil)
b.sendRoomDisinvite(roomid, DisinviteReasonDeleted, request.Delete.UserIds, nil)
case "incall":
err = b.sendRoomIncall(roomid, &request)
case "participants":

View file

@ -402,6 +402,8 @@ func TestBackendServer_RoomDisinvite(t *testing.T) {
t.Errorf("Expected room %s, got %+v", roomId, event)
} else if event.Disinvite.Properties != nil {
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
} else if event.Disinvite.Reason != "disinvited" {
t.Errorf("Reason should be disinvited, got %s", event.Disinvite.Reason)
}
if message, err := client.RunUntilRoomlistDisinvite(ctx); err != nil {
@ -679,6 +681,8 @@ func TestBackendServer_RoomDelete(t *testing.T) {
t.Errorf("Expected room %s, got %+v", roomId, event)
} else if event.Disinvite.Properties != nil {
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
} else if event.Disinvite.Reason != "deleted" {
t.Errorf("Reason should be deleted, got %s", event.Disinvite.Reason)
}
// TODO: Use event to wait for NATS messages.

View file

@ -598,7 +598,7 @@ func (c *TestClient) RunUntilRoomlistUpdate(ctx context.Context) (*RoomEventServ
}
}
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMessage, error) {
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomDisinviteEventServerMessage, error) {
if err := checkMessageType(message, "event"); err != nil {
return nil, err
} else if message.Event.Target != "roomlist" {
@ -610,7 +610,7 @@ func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMess
return message.Event.Disinvite, nil
}
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomEventServerMessage, error) {
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomDisinviteEventServerMessage, error) {
if message, err := c.RunUntilMessage(ctx); err != nil {
return nil, err
} else {