Check size limits on metadata and name set from client. (#2850)

* Send error response when update metadata fails.

Keeping it simple for the first implementation.
- Send error response only if request_id != 0
- Two kinds of errors notified
  o does not have permissions - NOT_ALLOWED
  o attributes exceeds size limits -  INVALID_ARGUMENT

* Check size limits on metadata and name set from client.

Added a name length limit also.

* check name length in service update participant path also

* limit check in limit config

* update protocol

* longer keys
This commit is contained in:
Raja Subramanian
2024-07-12 09:57:17 +05:30
committed by GitHub
parent ff66b545b4
commit 09e3aef859
15 changed files with 208 additions and 206 deletions
+2 -2
View File
@@ -328,9 +328,10 @@ type LocalParticipant interface {
HandleSignalSourceClose()
// updates
CheckMetadataLimits(name string, metadata string, attributes map[string]string) error
SetName(name string)
SetMetadata(metadata string)
SetAttributes(attributes map[string]string) error
SetAttributes(attributes map[string]string)
// permissions
ClaimGrants() *auth.ClaimGrants
@@ -441,7 +442,6 @@ type Room interface {
SimulateScenario(participant LocalParticipant, scenario *livekit.SimulateScenario) error
ResolveMediaTrackForSubscriber(subIdentity livekit.ParticipantIdentity, trackID livekit.TrackID) MediaResolverResult
GetLocalParticipants() []LocalParticipant
UpdateParticipantMetadata(participant LocalParticipant, name string, metadata string, attributes map[string]string) error
}
// MediaTrack represents a media track
@@ -110,6 +110,19 @@ type FakeLocalParticipant struct {
canSubscribeReturnsOnCall map[int]struct {
result1 bool
}
CheckMetadataLimitsStub func(string, string, map[string]string) error
checkMetadataLimitsMutex sync.RWMutex
checkMetadataLimitsArgsForCall []struct {
arg1 string
arg2 string
arg3 map[string]string
}
checkMetadataLimitsReturns struct {
result1 error
}
checkMetadataLimitsReturnsOnCall map[int]struct {
result1 error
}
ClaimGrantsStub func() *auth.ClaimGrants
claimGrantsMutex sync.RWMutex
claimGrantsArgsForCall []struct {
@@ -744,17 +757,11 @@ type FakeLocalParticipant struct {
sendSpeakerUpdateReturnsOnCall map[int]struct {
result1 error
}
SetAttributesStub func(map[string]string) error
SetAttributesStub func(map[string]string)
setAttributesMutex sync.RWMutex
setAttributesArgsForCall []struct {
arg1 map[string]string
}
setAttributesReturns struct {
result1 error
}
setAttributesReturnsOnCall map[int]struct {
result1 error
}
SetICEConfigStub func(*livekit.ICEConfig)
setICEConfigMutex sync.RWMutex
setICEConfigArgsForCall []struct {
@@ -1491,6 +1498,69 @@ func (fake *FakeLocalParticipant) CanSubscribeReturnsOnCall(i int, result1 bool)
}{result1}
}
func (fake *FakeLocalParticipant) CheckMetadataLimits(arg1 string, arg2 string, arg3 map[string]string) error {
fake.checkMetadataLimitsMutex.Lock()
ret, specificReturn := fake.checkMetadataLimitsReturnsOnCall[len(fake.checkMetadataLimitsArgsForCall)]
fake.checkMetadataLimitsArgsForCall = append(fake.checkMetadataLimitsArgsForCall, struct {
arg1 string
arg2 string
arg3 map[string]string
}{arg1, arg2, arg3})
stub := fake.CheckMetadataLimitsStub
fakeReturns := fake.checkMetadataLimitsReturns
fake.recordInvocation("CheckMetadataLimits", []interface{}{arg1, arg2, arg3})
fake.checkMetadataLimitsMutex.Unlock()
if stub != nil {
return stub(arg1, arg2, arg3)
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeLocalParticipant) CheckMetadataLimitsCallCount() int {
fake.checkMetadataLimitsMutex.RLock()
defer fake.checkMetadataLimitsMutex.RUnlock()
return len(fake.checkMetadataLimitsArgsForCall)
}
func (fake *FakeLocalParticipant) CheckMetadataLimitsCalls(stub func(string, string, map[string]string) error) {
fake.checkMetadataLimitsMutex.Lock()
defer fake.checkMetadataLimitsMutex.Unlock()
fake.CheckMetadataLimitsStub = stub
}
func (fake *FakeLocalParticipant) CheckMetadataLimitsArgsForCall(i int) (string, string, map[string]string) {
fake.checkMetadataLimitsMutex.RLock()
defer fake.checkMetadataLimitsMutex.RUnlock()
argsForCall := fake.checkMetadataLimitsArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
}
func (fake *FakeLocalParticipant) CheckMetadataLimitsReturns(result1 error) {
fake.checkMetadataLimitsMutex.Lock()
defer fake.checkMetadataLimitsMutex.Unlock()
fake.CheckMetadataLimitsStub = nil
fake.checkMetadataLimitsReturns = struct {
result1 error
}{result1}
}
func (fake *FakeLocalParticipant) CheckMetadataLimitsReturnsOnCall(i int, result1 error) {
fake.checkMetadataLimitsMutex.Lock()
defer fake.checkMetadataLimitsMutex.Unlock()
fake.CheckMetadataLimitsStub = nil
if fake.checkMetadataLimitsReturnsOnCall == nil {
fake.checkMetadataLimitsReturnsOnCall = make(map[int]struct {
result1 error
})
}
fake.checkMetadataLimitsReturnsOnCall[i] = struct {
result1 error
}{result1}
}
func (fake *FakeLocalParticipant) ClaimGrants() *auth.ClaimGrants {
fake.claimGrantsMutex.Lock()
ret, specificReturn := fake.claimGrantsReturnsOnCall[len(fake.claimGrantsArgsForCall)]
@@ -4964,23 +5034,17 @@ func (fake *FakeLocalParticipant) SendSpeakerUpdateReturnsOnCall(i int, result1
}{result1}
}
func (fake *FakeLocalParticipant) SetAttributes(arg1 map[string]string) error {
func (fake *FakeLocalParticipant) SetAttributes(arg1 map[string]string) {
fake.setAttributesMutex.Lock()
ret, specificReturn := fake.setAttributesReturnsOnCall[len(fake.setAttributesArgsForCall)]
fake.setAttributesArgsForCall = append(fake.setAttributesArgsForCall, struct {
arg1 map[string]string
}{arg1})
stub := fake.SetAttributesStub
fakeReturns := fake.setAttributesReturns
fake.recordInvocation("SetAttributes", []interface{}{arg1})
fake.setAttributesMutex.Unlock()
if stub != nil {
return stub(arg1)
fake.SetAttributesStub(arg1)
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeLocalParticipant) SetAttributesCallCount() int {
@@ -4989,7 +5053,7 @@ func (fake *FakeLocalParticipant) SetAttributesCallCount() int {
return len(fake.setAttributesArgsForCall)
}
func (fake *FakeLocalParticipant) SetAttributesCalls(stub func(map[string]string) error) {
func (fake *FakeLocalParticipant) SetAttributesCalls(stub func(map[string]string)) {
fake.setAttributesMutex.Lock()
defer fake.setAttributesMutex.Unlock()
fake.SetAttributesStub = stub
@@ -5002,29 +5066,6 @@ func (fake *FakeLocalParticipant) SetAttributesArgsForCall(i int) map[string]str
return argsForCall.arg1
}
func (fake *FakeLocalParticipant) SetAttributesReturns(result1 error) {
fake.setAttributesMutex.Lock()
defer fake.setAttributesMutex.Unlock()
fake.SetAttributesStub = nil
fake.setAttributesReturns = struct {
result1 error
}{result1}
}
func (fake *FakeLocalParticipant) SetAttributesReturnsOnCall(i int, result1 error) {
fake.setAttributesMutex.Lock()
defer fake.setAttributesMutex.Unlock()
fake.SetAttributesStub = nil
if fake.setAttributesReturnsOnCall == nil {
fake.setAttributesReturnsOnCall = make(map[int]struct {
result1 error
})
}
fake.setAttributesReturnsOnCall[i] = struct {
result1 error
}{result1}
}
func (fake *FakeLocalParticipant) SetICEConfig(arg1 *livekit.ICEConfig) {
fake.setICEConfigMutex.Lock()
fake.setICEConfigArgsForCall = append(fake.setICEConfigArgsForCall, struct {
@@ -6575,6 +6616,8 @@ func (fake *FakeLocalParticipant) Invocations() map[string][][]interface{} {
defer fake.canSkipBroadcastMutex.RUnlock()
fake.canSubscribeMutex.RLock()
defer fake.canSubscribeMutex.RUnlock()
fake.checkMetadataLimitsMutex.RLock()
defer fake.checkMetadataLimitsMutex.RUnlock()
fake.claimGrantsMutex.RLock()
defer fake.claimGrantsMutex.RUnlock()
fake.closeMutex.RLock()
-80
View File
@@ -82,20 +82,6 @@ type FakeRoom struct {
syncStateReturnsOnCall map[int]struct {
result1 error
}
UpdateParticipantMetadataStub func(types.LocalParticipant, string, string, map[string]string) error
updateParticipantMetadataMutex sync.RWMutex
updateParticipantMetadataArgsForCall []struct {
arg1 types.LocalParticipant
arg2 string
arg3 string
arg4 map[string]string
}
updateParticipantMetadataReturns struct {
result1 error
}
updateParticipantMetadataReturnsOnCall map[int]struct {
result1 error
}
UpdateSubscriptionPermissionStub func(types.LocalParticipant, *livekit.SubscriptionPermission) error
updateSubscriptionPermissionMutex sync.RWMutex
updateSubscriptionPermissionArgsForCall []struct {
@@ -499,70 +485,6 @@ func (fake *FakeRoom) SyncStateReturnsOnCall(i int, result1 error) {
}{result1}
}
func (fake *FakeRoom) UpdateParticipantMetadata(arg1 types.LocalParticipant, arg2 string, arg3 string, arg4 map[string]string) error {
fake.updateParticipantMetadataMutex.Lock()
ret, specificReturn := fake.updateParticipantMetadataReturnsOnCall[len(fake.updateParticipantMetadataArgsForCall)]
fake.updateParticipantMetadataArgsForCall = append(fake.updateParticipantMetadataArgsForCall, struct {
arg1 types.LocalParticipant
arg2 string
arg3 string
arg4 map[string]string
}{arg1, arg2, arg3, arg4})
stub := fake.UpdateParticipantMetadataStub
fakeReturns := fake.updateParticipantMetadataReturns
fake.recordInvocation("UpdateParticipantMetadata", []interface{}{arg1, arg2, arg3, arg4})
fake.updateParticipantMetadataMutex.Unlock()
if stub != nil {
return stub(arg1, arg2, arg3, arg4)
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *FakeRoom) UpdateParticipantMetadataCallCount() int {
fake.updateParticipantMetadataMutex.RLock()
defer fake.updateParticipantMetadataMutex.RUnlock()
return len(fake.updateParticipantMetadataArgsForCall)
}
func (fake *FakeRoom) UpdateParticipantMetadataCalls(stub func(types.LocalParticipant, string, string, map[string]string) error) {
fake.updateParticipantMetadataMutex.Lock()
defer fake.updateParticipantMetadataMutex.Unlock()
fake.UpdateParticipantMetadataStub = stub
}
func (fake *FakeRoom) UpdateParticipantMetadataArgsForCall(i int) (types.LocalParticipant, string, string, map[string]string) {
fake.updateParticipantMetadataMutex.RLock()
defer fake.updateParticipantMetadataMutex.RUnlock()
argsForCall := fake.updateParticipantMetadataArgsForCall[i]
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4
}
func (fake *FakeRoom) UpdateParticipantMetadataReturns(result1 error) {
fake.updateParticipantMetadataMutex.Lock()
defer fake.updateParticipantMetadataMutex.Unlock()
fake.UpdateParticipantMetadataStub = nil
fake.updateParticipantMetadataReturns = struct {
result1 error
}{result1}
}
func (fake *FakeRoom) UpdateParticipantMetadataReturnsOnCall(i int, result1 error) {
fake.updateParticipantMetadataMutex.Lock()
defer fake.updateParticipantMetadataMutex.Unlock()
fake.UpdateParticipantMetadataStub = nil
if fake.updateParticipantMetadataReturnsOnCall == nil {
fake.updateParticipantMetadataReturnsOnCall = make(map[int]struct {
result1 error
})
}
fake.updateParticipantMetadataReturnsOnCall[i] = struct {
result1 error
}{result1}
}
func (fake *FakeRoom) UpdateSubscriptionPermission(arg1 types.LocalParticipant, arg2 *livekit.SubscriptionPermission) error {
fake.updateSubscriptionPermissionMutex.Lock()
ret, specificReturn := fake.updateSubscriptionPermissionReturnsOnCall[len(fake.updateSubscriptionPermissionArgsForCall)]
@@ -687,8 +609,6 @@ func (fake *FakeRoom) Invocations() map[string][][]interface{} {
defer fake.simulateScenarioMutex.RUnlock()
fake.syncStateMutex.RLock()
defer fake.syncStateMutex.RUnlock()
fake.updateParticipantMetadataMutex.RLock()
defer fake.updateParticipantMetadataMutex.RUnlock()
fake.updateSubscriptionPermissionMutex.RLock()
defer fake.updateSubscriptionPermissionMutex.RUnlock()
fake.updateSubscriptionsMutex.RLock()