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"` Users []map[string]interface{} `json:"users,omitempty"`
} }
const (
DisinviteReasonDisinvited = "disinvited"
DisinviteReasonDeleted = "deleted"
)
type RoomDisinviteEventServerMessage struct {
RoomEventServerMessage
Reason string `json:"reason"`
}
type RoomEventMessage struct { type RoomEventMessage struct {
RoomId string `json:"roomid"` RoomId string `json:"roomid"`
Data *json.RawMessage `json:"data,omitempty"` Data *json.RawMessage `json:"data,omitempty"`
@ -414,9 +425,9 @@ type EventServerMessage struct {
Change []*EventServerMessageSessionEntry `json:"change,omitempty"` Change []*EventServerMessageSessionEntry `json:"change,omitempty"`
// Used for target "roomlist" / "participants" // Used for target "roomlist" / "participants"
Invite *RoomEventServerMessage `json:"invite,omitempty"` Invite *RoomEventServerMessage `json:"invite,omitempty"`
Disinvite *RoomEventServerMessage `json:"disinvite,omitempty"` Disinvite *RoomDisinviteEventServerMessage `json:"disinvite,omitempty"`
Update *RoomEventServerMessage `json:"update,omitempty"` Update *RoomEventServerMessage `json:"update,omitempty"`
// Used for target "message" // Used for target "message"
Message *RoomEventMessage `json:"message,omitempty"` 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{ msg := &ServerMessage{
Type: "event", Type: "event",
Event: &EventServerMessage{ Event: &EventServerMessage{
Target: "roomlist", Target: "roomlist",
Type: "disinvite", Type: "disinvite",
Disinvite: &RoomEventServerMessage{ Disinvite: &RoomDisinviteEventServerMessage{
RoomId: roomid, 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.sendRoomInvite(roomid, request.Invite.UserIds, request.Invite.Properties)
b.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties) b.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties)
case "disinvite": 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) b.sendRoomUpdate(roomid, request.Disinvite.UserIds, request.Disinvite.AllUserIds, request.Disinvite.Properties)
case "update": case "update":
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request) err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties) b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties)
case "delete": case "delete":
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request) 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": case "incall":
err = b.sendRoomIncall(roomid, &request) err = b.sendRoomIncall(roomid, &request)
case "participants": case "participants":

View file

@ -402,6 +402,8 @@ func TestBackendServer_RoomDisinvite(t *testing.T) {
t.Errorf("Expected room %s, got %+v", roomId, event) t.Errorf("Expected room %s, got %+v", roomId, event)
} else if event.Disinvite.Properties != nil { } else if event.Disinvite.Properties != nil {
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties)) 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 { 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) t.Errorf("Expected room %s, got %+v", roomId, event)
} else if event.Disinvite.Properties != nil { } else if event.Disinvite.Properties != nil {
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties)) 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. // 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 { if err := checkMessageType(message, "event"); err != nil {
return nil, err return nil, err
} else if message.Event.Target != "roomlist" { } else if message.Event.Target != "roomlist" {
@ -610,7 +610,7 @@ func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMess
return message.Event.Disinvite, nil 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 { if message, err := c.RunUntilMessage(ctx); err != nil {
return nil, err return nil, err
} else { } else {