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]) } }