@@ -13,10 +13,12 @@ import (
1313 group "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1"
1414 user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
1515 rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1"
16+ link "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1"
1617 provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
1718 "go.opentelemetry.io/otel/trace"
1819
1920 "github.com/owncloud/reva/v2/pkg/events"
21+ "github.com/owncloud/reva/v2/pkg/publicshare"
2022 "github.com/owncloud/reva/v2/pkg/rgrpc/todo/pool"
2123 "github.com/owncloud/reva/v2/pkg/storagespace"
2224 "github.com/owncloud/reva/v2/pkg/utils"
@@ -132,6 +134,8 @@ func (cl *ClientlogService) processEvent(event events.Event) {
132134 users , data , err = processShareEvent (ctx , ref , gwc , event .InitiatorID , uid , gid )
133135 }
134136
137+ tokens := make ([]string , 0 )
138+
135139 switch e := event .Event .(type ) {
136140 default :
137141 err = errors .New ("unhandled event" )
@@ -141,26 +145,34 @@ func (cl *ClientlogService) processEvent(event events.Event) {
141145 return
142146 }
143147 fileEv ("postprocessing-finished" , e .FileRef )
148+ tokens , _ = listPublicShareTokens (ctx , gwc , e .FileRef , cl .log )
144149 case events.ItemTrashed :
145150 evType = "item-trashed"
146151 users , data , err = processItemTrashedEvent (ctx , e .Ref , gwc , event .InitiatorID , e .ID )
152+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
147153 case events.ItemRestored :
148154 fileEv ("item-restored" , e .Ref )
155+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
149156 case events.ContainerCreated :
150157 fileEv ("folder-created" , e .Ref )
158+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
151159 case events.ItemMoved :
152160 // we send a dedicated event in case the item was only renamed
153161 if isRename (e .OldReference , e .Ref ) {
154162 fileEv ("item-renamed" , e .Ref )
155163 } else {
156164 fileEv ("item-moved" , e .Ref )
157165 }
166+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
158167 case events.FileLocked :
159168 fileEv ("file-locked" , e .Ref )
169+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
160170 case events.FileUnlocked :
161171 fileEv ("file-unlocked" , e .Ref )
172+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
162173 case events.FileTouched :
163174 fileEv ("file-touched" , e .Ref )
175+ tokens , _ = listPublicShareTokens (ctx , gwc , e .Ref , cl .log )
164176 case events.SpaceShared :
165177 r , _ := storagespace .ParseReference (e .ID .GetOpaqueId ())
166178 shareEv ("space-member-added" , & r , e .GranteeUserID , e .GranteeGroupID )
@@ -192,6 +204,9 @@ func (cl *ClientlogService) processEvent(event events.Event) {
192204 }
193205
194206 // II) instruct sse service to send the information
207+ if len (tokens ) > 0 {
208+ users = append (users , tokens ... )
209+ }
195210 if err := cl .sendSSE (users , evType , data ); err != nil {
196211 cl .log .Error ().Err (err ).Interface ("userIDs" , users ).Str ("eventid" , event .ID ).Msg ("failed to store event for user" )
197212 return
@@ -320,3 +335,41 @@ func backchannelLogoutEvent(e events.BackchannelLogout) (string, []string, Backc
320335 Timestamp : e .Timestamp .String (),
321336 }
322337}
338+
339+ func listPublicShareTokens (ctx context.Context , gwc gateway.GatewayAPIClient , ref * provider.Reference , log log.Logger ) ([]string , error ) {
340+ tokens := make ([]string , 0 )
341+ info , err := utils .GetResource (ctx , ref , gwc )
342+ if err != nil {
343+ log .Error ().Err (err ).Str ("event" , "listPublicShareTokens" ).Msg ("error getting ResourceInfo" )
344+ return tokens , err
345+ }
346+
347+ if utils .IsSpaceRoot (info ) {
348+ return tokens , nil
349+ }
350+
351+ req := link.ListPublicSharesRequest {
352+ Filters : []* link.ListPublicSharesRequest_Filter {publicshare .ResourceIDFilter (info .GetId ())},
353+ }
354+
355+ res , err := gwc .ListPublicShares (ctx , & req )
356+ if err != nil {
357+ log .Error ().Err (err ).Str ("event" , "listPublicShareTokens" ).Msg ("error getting ListPublicShares" )
358+ return tokens , err
359+ }
360+
361+ if res .GetStatus ().GetCode () != rpc .Code_CODE_OK {
362+ log .Error ().Str ("event" , "listPublicShareTokens" ).Msg ("error getting ListPublicShares " + res .GetStatus ().GetCode ().String ())
363+ return tokens , fmt .Errorf ("error getting ListPublicShares %s" , res .GetStatus ().GetCode ().String ())
364+ }
365+ for _ , s := range res .GetShare () {
366+ tokens = append (tokens , s .GetToken ())
367+ }
368+
369+ t , err := listPublicShareTokens (ctx , gwc , & provider.Reference {ResourceId : info .GetParentId ()}, log )
370+ if err != nil {
371+ log .Error ().Err (err ).Str ("event" , "listPublicShareTokens" ).Msg ("error getting parent listPublicShareTokens" )
372+ return tokens , err
373+ }
374+ return append (tokens , t ... ), nil
375+ }
0 commit comments