81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
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])
|
|
}
|
|
}
|