@@ -377,6 +377,7 @@ func patchAction(ctx context.Context, action, src, dst string, d *data, fileCach
377377}
378378
379379type DiskUsageResponse struct {
380+ Path string `json:"path"`
380381 Total uint64 `json:"total"`
381382 Used uint64 `json:"used"`
382383}
@@ -397,16 +398,43 @@ var diskUsage = withUser(func(w http.ResponseWriter, r *http.Request, d *data) (
397398 fPath := file .RealPath ()
398399 if ! file .IsDir {
399400 return renderJSON (w , r , & DiskUsageResponse {
401+ Path : fPath ,
400402 Total : 0 ,
401403 Used : 0 ,
402404 })
403405 }
404406
407+ // Check for symlink and resolve it safely
408+ info , err := os .Lstat (fPath )
409+ if err != nil {
410+ return errToStatus (err ), err
411+ }
412+
413+ if info .Mode ()& os .ModeSymlink != 0 {
414+ target , err := os .Readlink (fPath )
415+ if err != nil {
416+ return errToStatus (err ), err
417+ }
418+ log .Printf ("'%s' -> '%s'" , fPath , target )
419+ fPath = target
420+
421+ // realPath, err := filepath.EvalSymlinks(fPath)
422+ // if err != nil {
423+ // return errToStatus(err), err
424+ // }
425+ // log.Printf("'%s' -> '%s'", fPath, realPath)
426+ // fPath = realPath
427+ } else {
428+ // Fallback to root filesystem
429+ fPath = "/"
430+ }
431+
405432 usage , err := disk .UsageWithContext (r .Context (), fPath )
406433 if err != nil {
407434 return errToStatus (err ), err
408435 }
409436 return renderJSON (w , r , & DiskUsageResponse {
437+ Path : fPath ,
410438 Total : usage .Total ,
411439 Used : usage .Used ,
412440 })
0 commit comments