add admin cli

This commit is contained in:
Keiran 2025-08-07 18:20:24 +01:00
parent f142c45178
commit d54bcc0b75

80
cmd/admin/main.go Normal file
View File

@ -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 <command> [args...]")
fmt.Println("Commands:")
fmt.Println(" create-user <username> <email> [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 <username> <email> [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])
}
}