2025-08-07 18:35:00 +01:00

84 lines
1.9 KiB
Go

package main
import (
"context"
"crypto/rand"
"encoding/hex"
"fmt"
"log"
"os"
"git.keircn.com/keiran/termcloud/internal/config"
"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()
cfg := config.Load()
pool, err := db.NewPool(ctx, cfg)
if err != nil {
log.Fatalf("Failed to create database pool: %v", err)
}
defer db.ClosePool(pool)
bucketService := db.NewBucketService(pool, cfg)
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 := cfg.DefaultStorageLimit
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])
}
}