diff --git a/pkg/config/config.go b/pkg/config/config.go index b3779b143..9ccc51c4b 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -246,6 +246,10 @@ func (l LimitConfig) CheckRoomNameLength(name string) bool { return l.MaxRoomNameLength == 0 || len(name) <= l.MaxRoomNameLength } +func (l LimitConfig) CheckParticipantIdentityLength(identity string) bool { + return l.MaxParticipantIdentityLength == 0 || len(identity) <= l.MaxParticipantIdentityLength +} + func (l LimitConfig) CheckParticipantNameLength(name string) bool { return l.MaxParticipantNameLength == 0 || len(name) <= l.MaxParticipantNameLength } diff --git a/pkg/service/rtcrestservice.go b/pkg/service/rtcrestservice.go index 364759af2..e993b96f0 100644 --- a/pkg/service/rtcrestservice.go +++ b/pkg/service/rtcrestservice.go @@ -135,15 +135,15 @@ func (s *RTCRestService) validateCreate(r *http.Request) (*createRequest, int, e if roomName == "" { return nil, http.StatusUnauthorized, errors.New("room name cannot be empty") } - if limit := s.config.Limit.MaxRoomNameLength; limit > 0 && len(roomName) > limit { - return nil, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrRoomNameExceedsLimits, limit) + if !s.config.Limit.CheckRoomNameLength(string(roomName)) { + return nil, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrRoomNameExceedsLimits, s.config.Limit.MaxRoomNameLength) } if claims.Identity == "" { return nil, http.StatusBadRequest, ErrIdentityEmpty } - if limit := s.config.Limit.MaxParticipantIdentityLength; limit > 0 && len(claims.Identity) > limit { - return nil, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrParticipantIdentityExceedsLimits, limit) + if !s.config.Limit.CheckParticipantIdentityLength(claims.Identity) { + return nil, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrParticipantIdentityExceedsLimits, s.config.Limit.MaxParticipantIdentityLength) } var clientInfo struct { diff --git a/pkg/service/rtcservice.go b/pkg/service/rtcservice.go index a58200963..ae4b59b33 100644 --- a/pkg/service/rtcservice.go +++ b/pkg/service/rtcservice.go @@ -132,8 +132,8 @@ func (s *RTCService) validateInternal(log logger.Logger, r *http.Request, strict if claims.Identity == "" { return "", pi, http.StatusBadRequest, ErrIdentityEmpty } - if limit := s.config.Limit.MaxParticipantIdentityLength; limit > 0 && len(claims.Identity) > limit { - return "", pi, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrParticipantIdentityExceedsLimits, limit) + if !s.config.Limit.CheckParticipantIdentityLength(claims.Identity) { + return "", pi, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrParticipantIdentityExceedsLimits, s.config.Limit.MaxParticipantIdentityLength) } roomName := livekit.RoomName(r.FormValue("room")) @@ -150,8 +150,8 @@ func (s *RTCService) validateInternal(log logger.Logger, r *http.Request, strict if onlyName != "" { roomName = onlyName } - if limit := s.config.Limit.MaxRoomNameLength; limit > 0 && len(roomName) > limit { - return "", pi, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrRoomNameExceedsLimits, limit) + if !s.config.Limit.CheckRoomNameLength(string(roomName)) { + return "", pi, http.StatusBadRequest, fmt.Errorf("%w: max length %d", ErrRoomNameExceedsLimits, s.config.Limit.MaxRoomNameLength) } // this is new connection for existing participant - with publish only permissions