feat(cli): add comprehensive command suite
+ Adds new commands for managing boxes, environment variables, and running the server. * The command structure is greatly expanded to improve user experience and coverage for core service functionalities.
This commit is contained in:
80
cmd/cmd_format.go
Normal file
80
cmd/cmd_format.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
"warpbox/lib/boxstore"
|
||||
"warpbox/lib/models"
|
||||
)
|
||||
|
||||
func formatBoxSummariesTable(summaries []models.BoxSummary) error {
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||||
fmt.Fprintln(w, "ID\tFiles\tSize\tCreated\tExpires\tPassword\tOne-Time\tExpired")
|
||||
for _, s := range summaries {
|
||||
expires := "-"
|
||||
if !s.ExpiresAt.IsZero() {
|
||||
expires = s.ExpiresAt.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
created := s.CreatedAt.Format("2006-01-02 15:04:05")
|
||||
fmt.Fprintf(w, "%s\t%d\t%s\t%s\t%s\t%v\t%v\t%v\n",
|
||||
s.ID, s.FileCount, s.TotalSizeLabel, created, expires,
|
||||
s.PasswordProtected, s.OneTimeDownload, s.Expired)
|
||||
}
|
||||
return w.Flush()
|
||||
}
|
||||
|
||||
func formatBoxSummariesJSON(summaries []models.BoxSummary) error {
|
||||
type summaryOut struct {
|
||||
ID string `json:"id"`
|
||||
FileCount int `json:"file_count"`
|
||||
TotalSize int64 `json:"total_size"`
|
||||
TotalSizeLabel string `json:"total_size_label"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
ExpiresAt time.Time `json:"expires_at"`
|
||||
Expired bool `json:"expired"`
|
||||
OneTimeDownload bool `json:"one_time_download"`
|
||||
PasswordProtected bool `json:"password_protected"`
|
||||
}
|
||||
out := make([]summaryOut, len(summaries))
|
||||
for i, s := range summaries {
|
||||
out[i] = summaryOut{
|
||||
ID: s.ID, FileCount: s.FileCount, TotalSize: s.TotalSize,
|
||||
TotalSizeLabel: s.TotalSizeLabel, CreatedAt: s.CreatedAt,
|
||||
ExpiresAt: s.ExpiresAt, Expired: s.Expired,
|
||||
OneTimeDownload: s.OneTimeDownload, PasswordProtected: s.PasswordProtected,
|
||||
}
|
||||
}
|
||||
enc := json.NewEncoder(os.Stdout)
|
||||
enc.SetIndent("", " ")
|
||||
return enc.Encode(out)
|
||||
}
|
||||
|
||||
func printBoxSummary(s *models.BoxSummary) {
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||||
fmt.Fprintf(w, "ID:\t%s\n", s.ID)
|
||||
fmt.Fprintf(w, "Files:\t%d\n", s.FileCount)
|
||||
fmt.Fprintf(w, "Total Size:\t%s\n", s.TotalSizeLabel)
|
||||
if !s.CreatedAt.IsZero() {
|
||||
fmt.Fprintf(w, "Created:\t%s\n", s.CreatedAt.Format(time.RFC3339))
|
||||
}
|
||||
if !s.ExpiresAt.IsZero() {
|
||||
fmt.Fprintf(w, "Expires:\t%s\n", s.ExpiresAt.Format(time.RFC3339))
|
||||
}
|
||||
fmt.Fprintf(w, "Expired:\t%v\n", s.Expired)
|
||||
fmt.Fprintf(w, "Password Protected:\t%v\n", s.PasswordProtected)
|
||||
fmt.Fprintf(w, "One-Time Download:\t%v\n", s.OneTimeDownload)
|
||||
w.Flush()
|
||||
}
|
||||
|
||||
func printRetentionOptions() {
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||||
fmt.Fprintln(w, "Key\tLabel\tSeconds")
|
||||
for _, opt := range boxstore.RetentionOptions() {
|
||||
fmt.Fprintf(w, "%s\t%s\t%d\n", opt.Key, opt.Label, opt.Seconds)
|
||||
}
|
||||
w.Flush()
|
||||
}
|
||||
Reference in New Issue
Block a user