Skip to content

Commit cccd504

Browse files
committed
Detect symlinks and render it as part of the /usage response
1 parent 3b5d08a commit cccd504

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

http/resource.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ func patchAction(ctx context.Context, action, src, dst string, d *data, fileCach
377377
}
378378

379379
type 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

Comments
 (0)