Files
phylum/server/internal/command/common/format.go
2025-04-05 18:51:58 +05:30

79 lines
1.6 KiB
Go

package common
import (
"encoding/json"
"fmt"
"strings"
"github.com/jackc/pgx/v5/pgtype"
"github.com/shroff/phylum/server/internal/core/fs"
)
func FormatResourceSummary(r fs.Resource, name string, deleted pgtype.Timestamp) string {
if name == "" {
name = r.Name()
}
if r.Dir() {
name += "/"
}
sha256 := r.ContentSHA256()
sizeStr := " -"
if r.Dir() {
sha256 = "- "
} else {
sizeStr = FormatSize(r.ContentLength())
}
if sha256 == "" {
sha256 = "xxxxxxxx"
}
delStr := " "
if deleted != r.Deleted() {
delStr = "*"
}
return fmt.Sprintf("%s %s %s %s%-24s %s %s", r.ID().String(), sizeStr, sha256[0:8], delStr, name, formatGrantsJson(r.Grants()), r.Links())
}
func FormatSize(size int) string {
suffix := []string{"B", "K", "M", "G", "T"}
si := 0
for ; size >= 1000 && si < len(suffix); si, size = si+1, size/1000 {
}
return fmt.Sprintf("%4d%s", size, suffix[si])
}
func formatGrantsJson(j []byte) string {
p := make(map[string]interface{})
json.Unmarshal(j, &p)
if len(p) == 0 {
return ""
}
perm := make([]string, 0, len(p))
for k, v := range p {
perm = append(perm, k+": "+FormatPermission(int32((v.(map[string]interface{})["p"]).(float64))))
}
return "[" + strings.Join(perm, ", ") + "]"
}
func FormatPermission(p fs.Permission) string {
if p == fs.PermissionSU {
return "su"
}
str := ""
if p&fs.PermissionRead != 0 {
p -= fs.PermissionRead
str += "r"
}
if p&fs.PermissionWrite != 0 {
p -= fs.PermissionWrite
str += "w"
}
if p&fs.PermissionShare != 0 {
p -= fs.PermissionShare
str += "s"
}
if p != 0 {
str += fmt.Sprintf("u(%d)", p)
}
return str
}