@@ -206,7 +206,7 @@ func (g Graph) GetRootDriveChildren(w http.ResponseWriter, r *http.Request) {
206206 return
207207 }
208208
209- files , err := formatDriveItems (g .logger , lRes .GetInfos ())
209+ files , err := formatDriveItems (g .logger , g . publicBaseURL , lRes .GetInfos ())
210210 if err != nil {
211211 g .logger .Error ().Err (err ).Msg ("error encoding response as json" )
212212 errorcode .GeneralException .Render (w , r , http .StatusInternalServerError , err .Error ())
@@ -271,7 +271,7 @@ func (g Graph) GetDriveItem(w http.ResponseWriter, r *http.Request) {
271271 errorcode .GeneralException .Render (w , r , http .StatusInternalServerError , res .GetStatus ().GetMessage ())
272272 return
273273 }
274- driveItem , err := cs3ResourceToDriveItem (g .logger , res .GetInfo ())
274+ driveItem , err := cs3ResourceToDriveItem (g .logger , g . publicBaseURL , res .GetInfo ())
275275 if err != nil {
276276 errorcode .GeneralException .Render (w , r , http .StatusInternalServerError , err .Error ())
277277 return
@@ -339,7 +339,7 @@ func (g Graph) GetDriveItemChildren(w http.ResponseWriter, r *http.Request) {
339339 return
340340 }
341341
342- files , err := formatDriveItems (g .logger , res .GetInfos ())
342+ files , err := formatDriveItems (g .logger , g . publicBaseURL , res .GetInfos ())
343343 if err != nil {
344344 errorcode .GeneralException .Render (w , r , http .StatusInternalServerError , err .Error ())
345345 return
@@ -416,10 +416,10 @@ func (g Graph) getRemoteItem(ctx context.Context, root *storageprovider.Resource
416416 return item , nil
417417}
418418
419- func formatDriveItems (logger * log.Logger , mds []* storageprovider.ResourceInfo ) ([]* libregraph.DriveItem , error ) {
419+ func formatDriveItems (logger * log.Logger , publicBaseURL * url. URL , mds []* storageprovider.ResourceInfo ) ([]* libregraph.DriveItem , error ) {
420420 responses := make ([]* libregraph.DriveItem , 0 , len (mds ))
421421 for i := range mds {
422- res , err := cs3ResourceToDriveItem (logger , mds [i ])
422+ res , err := cs3ResourceToDriveItem (logger , publicBaseURL , mds [i ])
423423 if err != nil {
424424 return nil , err
425425 }
@@ -433,7 +433,7 @@ func cs3TimestampToTime(t *types.Timestamp) time.Time {
433433 return time .Unix (int64 (t .GetSeconds ()), int64 (t .GetNanos ()))
434434}
435435
436- func cs3ResourceToDriveItem (logger * log.Logger , res * storageprovider.ResourceInfo ) (* libregraph.DriveItem , error ) {
436+ func cs3ResourceToDriveItem (logger * log.Logger , publicBaseURL * url. URL , res * storageprovider.ResourceInfo ) (* libregraph.DriveItem , error ) {
437437 size := new (int64 )
438438 * size = int64 (res .GetSize ()) // TODO lurking overflow: make size of libregraph drive item use uint64
439439
@@ -442,6 +442,10 @@ func cs3ResourceToDriveItem(logger *log.Logger, res *storageprovider.ResourceInf
442442 Size : size ,
443443 }
444444
445+ webURL := * publicBaseURL
446+ webURL .Path = path .Join (webURL .Path , "f" , storagespace .FormatResourceID (res .GetId ()))
447+ driveItem .WebUrl = libregraph .PtrString (webURL .String ())
448+
445449 if name := path .Base (res .GetPath ()); name != "" {
446450 driveItem .Name = & name
447451 }
0 commit comments