Browse Source

Fixed deadlock when authorizeRoomCreation=true.

pull/168/head
Simon Eisenmann 11 years ago
parent
commit
f8a44d1add
  1. 2
      src/app/spreed-webrtc-server/channelling_api_test.go
  2. 10
      src/app/spreed-webrtc-server/room_manager.go
  3. 6
      src/app/spreed-webrtc-server/room_manager_test.go
  4. 14
      src/app/spreed-webrtc-server/session.go

2
src/app/spreed-webrtc-server/channelling_api_test.go

@ -57,7 +57,7 @@ func (fake *fakeRoomManager) RoomUsers(session *Session) []*DataSession { @@ -57,7 +57,7 @@ func (fake *fakeRoomManager) RoomUsers(session *Session) []*DataSession {
return fake.roomUsers
}
func (fake *fakeRoomManager) JoinRoom(id string, _ *DataRoomCredentials, session *Session, _ Sender) (*DataRoom, error) {
func (fake *fakeRoomManager) JoinRoom(id string, _ *DataRoomCredentials, session *Session, sessionAuthenticated bool, _ Sender) (*DataRoom, error) {
fake.joinedID = id
return &DataRoom{Name: id}, fake.joinError
}

10
src/app/spreed-webrtc-server/room_manager.go

@ -28,7 +28,7 @@ import ( @@ -28,7 +28,7 @@ import (
type RoomStatusManager interface {
RoomUsers(*Session) []*DataSession
JoinRoom(string, *DataRoomCredentials, *Session, Sender) (*DataRoom, error)
JoinRoom(roomID string, credentials *DataRoomCredentials, session *Session, sessionAuthenticated bool, sender Sender) (*DataRoom, error)
LeaveRoom(roomID, sessionID string)
UpdateRoom(*Session, *DataRoom) (*DataRoom, error)
}
@ -71,12 +71,12 @@ func (rooms *roomManager) RoomUsers(session *Session) []*DataSession { @@ -71,12 +71,12 @@ func (rooms *roomManager) RoomUsers(session *Session) []*DataSession {
return []*DataSession{}
}
func (rooms *roomManager) JoinRoom(roomID string, credentials *DataRoomCredentials, session *Session, sender Sender) (*DataRoom, error) {
func (rooms *roomManager) JoinRoom(roomID string, credentials *DataRoomCredentials, session *Session, sessionAuthenticated bool, sender Sender) (*DataRoom, error) {
if roomID == "" && !rooms.DefaultRoomEnabled {
return nil, NewDataError("default_room_disabled", "The default room is not enabled")
}
roomWorker, err := rooms.GetOrCreate(roomID, credentials, session)
roomWorker, err := rooms.GetOrCreate(roomID, credentials, sessionAuthenticated)
if err != nil {
return nil, err
}
@ -145,7 +145,7 @@ func (rooms *roomManager) Get(roomID string) (room RoomWorker, ok bool) { @@ -145,7 +145,7 @@ func (rooms *roomManager) Get(roomID string) (room RoomWorker, ok bool) {
return
}
func (rooms *roomManager) GetOrCreate(roomID string, credentials *DataRoomCredentials, session *Session) (RoomWorker, error) {
func (rooms *roomManager) GetOrCreate(roomID string, credentials *DataRoomCredentials, sessionAuthenticated bool) (RoomWorker, error) {
if room, ok := rooms.Get(roomID); ok {
return room, nil
}
@ -158,7 +158,7 @@ func (rooms *roomManager) GetOrCreate(roomID string, credentials *DataRoomCreden @@ -158,7 +158,7 @@ func (rooms *roomManager) GetOrCreate(roomID string, credentials *DataRoomCreden
return room, nil
}
if rooms.UsersEnabled && rooms.AuthorizeRoomCreation && !session.Authenticated() {
if rooms.UsersEnabled && rooms.AuthorizeRoomCreation && !sessionAuthenticated {
rooms.Unlock()
return nil, NewDataError("room_join_requires_account", "Room creation requires a user account")
}

6
src/app/spreed-webrtc-server/room_manager_test.go

@ -36,16 +36,16 @@ func Test_RoomManager_JoinRoom_ReturnsAnErrorForUnauthenticatedSessionsWhenCreat @@ -36,16 +36,16 @@ func Test_RoomManager_JoinRoom_ReturnsAnErrorForUnauthenticatedSessionsWhenCreat
config.AuthorizeRoomCreation = true
unauthenticatedSession := &Session{}
_, err := roomManager.JoinRoom("foo", nil, unauthenticatedSession, nil)
_, err := roomManager.JoinRoom("foo", nil, unauthenticatedSession, false, nil)
assertDataError(t, err, "room_join_requires_account")
authenticatedSession := &Session{userid: "9870457"}
_, err = roomManager.JoinRoom("foo", nil, authenticatedSession, nil)
_, err = roomManager.JoinRoom("foo", nil, authenticatedSession, true, nil)
if err != nil {
t.Fatalf("Unexpected error %v joining room while authenticated", err)
}
_, err = roomManager.JoinRoom("foo", nil, unauthenticatedSession, nil)
_, err = roomManager.JoinRoom("foo", nil, unauthenticatedSession, false, nil)
if err != nil {
t.Fatalf("Unexpected error %v joining room while unauthenticated", err)
}

14
src/app/spreed-webrtc-server/session.go

@ -79,6 +79,11 @@ func NewSession(manager SessionManager, unicaster Unicaster, broadcaster Broadca @@ -79,6 +79,11 @@ func NewSession(manager SessionManager, unicaster Unicaster, broadcaster Broadca
}
func (s *Session) authenticated() (authenticated bool) {
authenticated = s.userid != ""
return
}
func (s *Session) Subscribe(session *Session) {
s.mutex.Lock()
@ -132,7 +137,7 @@ func (s *Session) JoinRoom(roomID string, credentials *DataRoomCredentials, send @@ -132,7 +137,7 @@ func (s *Session) JoinRoom(roomID string, credentials *DataRoomCredentials, send
})
}
room, err := s.RoomStatusManager.JoinRoom(roomID, credentials, s, sender)
room, err := s.RoomStatusManager.JoinRoom(roomID, credentials, s, s.authenticated(), sender)
if err == nil {
s.Hello = true
s.Roomid = roomID
@ -292,13 +297,6 @@ func (s *Session) Authorize(realm string, st *SessionToken) (string, error) { @@ -292,13 +297,6 @@ func (s *Session) Authorize(realm string, st *SessionToken) (string, error) {
}
func (s *Session) Authenticated() (authenticated bool) {
s.mutex.Lock()
authenticated = s.userid != ""
s.mutex.Unlock()
return
}
func (s *Session) Authenticate(realm string, st *SessionToken, userid string) error {
s.mutex.Lock()

Loading…
Cancel
Save