mirror of
https://github.com/strukturag/nextcloud-spreed-signaling
synced 2024-05-04 06:43:11 +02:00
Always use auth userid in ping requests.
Fixes issue introduced in 3a2adffab6
where some
ping requests were not evaluated correctly if a userid was given in the room
session data.
This commit is contained in:
parent
da5890a1c7
commit
52c1514978
|
@ -239,6 +239,10 @@ func (s *ClientSession) ParsedBackendUrl() *url.URL {
|
||||||
return s.parsedBackendUrl
|
return s.parsedBackendUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ClientSession) AuthUserId() string {
|
||||||
|
return s.userId
|
||||||
|
}
|
||||||
|
|
||||||
func (s *ClientSession) UserId() string {
|
func (s *ClientSession) UserId() string {
|
||||||
userId := s.userId
|
userId := s.userId
|
||||||
if userId == "" {
|
if userId == "" {
|
||||||
|
@ -449,7 +453,7 @@ func (s *ClientSession) doUnsubscribeRoomNats(notify bool) {
|
||||||
// Notify
|
// Notify
|
||||||
go func(sid string) {
|
go func(sid string) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
request := NewBackendClientRoomRequest(room.Id(), s.UserId(), sid)
|
request := NewBackendClientRoomRequest(room.Id(), s.userId, sid)
|
||||||
request.Room.Action = "leave"
|
request.Room.Action = "leave"
|
||||||
var response map[string]interface{}
|
var response map[string]interface{}
|
||||||
if err := s.hub.backend.PerformJSONRequest(ctx, s.ParsedBackendUrl(), request, &response); err != nil {
|
if err := s.hub.backend.PerformJSONRequest(ctx, s.ParsedBackendUrl(), request, &response); err != nil {
|
||||||
|
|
27
hub_test.go
27
hub_test.go
|
@ -299,6 +299,31 @@ func processSessionRequest(t *testing.T, w http.ResponseWriter, r *http.Request,
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func processPingRequest(t *testing.T, w http.ResponseWriter, r *http.Request, request *BackendClientRequest) *BackendClientResponse {
|
||||||
|
if request.Type != "ping" || request.Ping == nil {
|
||||||
|
t.Fatalf("Expected an ping backend request, got %+v", request)
|
||||||
|
}
|
||||||
|
|
||||||
|
if request.Ping.RoomId == "test-room-with-sessiondata" {
|
||||||
|
if entries := request.Ping.Entries; len(entries) != 1 {
|
||||||
|
t.Errorf("Expected one entry, got %+v", entries)
|
||||||
|
} else {
|
||||||
|
if entries[0].UserId != "" {
|
||||||
|
t.Errorf("Expected empty userid, got %+v", entries[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response := &BackendClientResponse{
|
||||||
|
Type: "ping",
|
||||||
|
Ping: &BackendClientRingResponse{
|
||||||
|
Version: BackendVersion,
|
||||||
|
RoomId: request.Ping.RoomId,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
func registerBackendHandler(t *testing.T, router *mux.Router) {
|
func registerBackendHandler(t *testing.T, router *mux.Router) {
|
||||||
registerBackendHandlerUrl(t, router, "/")
|
registerBackendHandlerUrl(t, router, "/")
|
||||||
}
|
}
|
||||||
|
@ -312,6 +337,8 @@ func registerBackendHandlerUrl(t *testing.T, router *mux.Router, url string) {
|
||||||
return processRoomRequest(t, w, r, request)
|
return processRoomRequest(t, w, r, request)
|
||||||
case "session":
|
case "session":
|
||||||
return processSessionRequest(t, w, r, request)
|
return processSessionRequest(t, w, r, request)
|
||||||
|
case "ping":
|
||||||
|
return processPingRequest(t, w, r, request)
|
||||||
default:
|
default:
|
||||||
t.Fatalf("Unsupported request received: %+v", request)
|
t.Fatalf("Unsupported request received: %+v", request)
|
||||||
return nil
|
return nil
|
||||||
|
|
15
room.go
15
room.go
|
@ -638,7 +638,7 @@ func (r *Room) publishSessionFlagsChanged(session *VirtualSession) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Room) publishActiveSessions() {
|
func (r *Room) publishActiveSessions() (int, *sync.WaitGroup) {
|
||||||
r.mu.RLock()
|
r.mu.RLock()
|
||||||
defer r.mu.RUnlock()
|
defer r.mu.RUnlock()
|
||||||
|
|
||||||
|
@ -651,13 +651,16 @@ func (r *Room) publishActiveSessions() {
|
||||||
}
|
}
|
||||||
|
|
||||||
var sid string
|
var sid string
|
||||||
|
var uid string
|
||||||
switch sess := session.(type) {
|
switch sess := session.(type) {
|
||||||
case *ClientSession:
|
case *ClientSession:
|
||||||
// Use Nextcloud session id
|
// Use Nextcloud session id and user id
|
||||||
sid = sess.RoomSessionId()
|
sid = sess.RoomSessionId()
|
||||||
|
uid = sess.AuthUserId()
|
||||||
case *VirtualSession:
|
case *VirtualSession:
|
||||||
// Use our internal generated session id (will be added to Nextcloud).
|
// Use our internal generated session id (will be added to Nextcloud).
|
||||||
sid = sess.PublicId()
|
sid = sess.PublicId()
|
||||||
|
uid = sess.UserId()
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -676,14 +679,17 @@ func (r *Room) publishActiveSessions() {
|
||||||
|
|
||||||
entries[u] = append(e, BackendPingEntry{
|
entries[u] = append(e, BackendPingEntry{
|
||||||
SessionId: sid,
|
SessionId: sid,
|
||||||
UserId: session.UserId(),
|
UserId: uid,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
var wg sync.WaitGroup
|
||||||
if len(urls) == 0 {
|
if len(urls) == 0 {
|
||||||
return
|
return 0, &wg
|
||||||
}
|
}
|
||||||
for u, e := range entries {
|
for u, e := range entries {
|
||||||
|
wg.Add(1)
|
||||||
go func(url *url.URL, entries []BackendPingEntry) {
|
go func(url *url.URL, entries []BackendPingEntry) {
|
||||||
|
defer wg.Done()
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), r.hub.backendTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), r.hub.backendTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
@ -694,6 +700,7 @@ func (r *Room) publishActiveSessions() {
|
||||||
}
|
}
|
||||||
}(urls[u], e)
|
}(urls[u], e)
|
||||||
}
|
}
|
||||||
|
return len(entries), &wg
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Room) publishRoomMessage(message *BackendRoomMessageRequest) {
|
func (r *Room) publishRoomMessage(message *BackendRoomMessageRequest) {
|
||||||
|
|
11
room_test.go
11
room_test.go
|
@ -407,4 +407,15 @@ func TestRoom_RoomSessionData(t *testing.T) {
|
||||||
if userid := session.UserId(); userid != expected {
|
if userid := session.UserId(); userid != expected {
|
||||||
t.Errorf("Expected userid %s, got %s", expected, userid)
|
t.Errorf("Expected userid %s, got %s", expected, userid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
room := hub.getRoom(roomId)
|
||||||
|
if room == nil {
|
||||||
|
t.Fatalf("Room not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
entries, wg := room.publishActiveSessions()
|
||||||
|
if entries != 1 {
|
||||||
|
t.Errorf("expected 1 entries, got %d", entries)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue