From d54bcc0b75d78e154420ef4f406da2509cb481f3 Mon Sep 17 00:00:00 2001 From: Keiran Date: Thu, 7 Aug 2025 18:20:24 +0100 Subject: [PATCH] add admin cli --- cmd/admin/main.go | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 cmd/admin/main.go diff --git a/cmd/admin/main.go b/cmd/admin/main.go new file mode 100644 index 0000000..15e9d54 --- /dev/null +++ b/cmd/admin/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "context" + "crypto/rand" + "encoding/hex" + "fmt" + "log" + "os" + + "git.keircn.com/keiran/termcloud/internal/db" +) + +func generateAPIKey() string { + bytes := make([]byte, 32) + if _, err := rand.Read(bytes); err != nil { + log.Fatalf("Failed to generate API key: %v", err) + } + return hex.EncodeToString(bytes) +} + +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: termcloud-admin [args...]") + fmt.Println("Commands:") + fmt.Println(" create-user [storage_limit_gb]") + fmt.Println(" list-users") + return + } + + ctx := context.Background() + pool, err := db.NewPool(ctx) + if err != nil { + log.Fatalf("Failed to create database pool: %v", err) + } + defer db.ClosePool(pool) + + bucketService := db.NewBucketService(pool) + + switch os.Args[1] { + case "create-user": + if len(os.Args) < 4 { + fmt.Println("Usage: create-user [storage_limit_gb]") + return + } + + username := os.Args[2] + email := os.Args[3] + storageLimit := int64(1) * 1024 * 1024 * 1024 + + if len(os.Args) >= 5 { + var limitGB int64 + if _, err := fmt.Sscanf(os.Args[4], "%d", &limitGB); err != nil { + fmt.Printf("Invalid storage limit: %v\n", err) + return + } + storageLimit = limitGB * 1024 * 1024 * 1024 + } + + apiKey := generateAPIKey() + user, err := bucketService.CreateUser(ctx, username, email, apiKey, storageLimit) + if err != nil { + fmt.Printf("Failed to create user: %v\n", err) + return + } + + fmt.Printf("Created user:\n") + fmt.Printf(" ID: %d\n", user.ID) + fmt.Printf(" Username: %s\n", user.Username) + fmt.Printf(" Email: %s\n", user.Email) + fmt.Printf(" API Key: %s\n", apiKey) + fmt.Printf(" Storage Limit: %d GB\n", user.StorageLimitBytes/1024/1024/1024) + + case "list-users": + fmt.Println("List users functionality not yet implemented") + + default: + fmt.Printf("Unknown command: %s\n", os.Args[1]) + } +}