첫 커밋: 로컬 프로젝트 업로드
This commit is contained in:
90
baron-sso/backend/cmd/keygen/main.go
Normal file
90
baron-sso/backend/cmd/keygen/main.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ApiKey struct {
|
||||
ID string `gorm:"primaryKey;type:uuid;default:gen_random_uuid()"`
|
||||
Name string
|
||||
ClientID string `gorm:"uniqueIndex"`
|
||||
ClientSecretHash string
|
||||
Scopes string
|
||||
Status string `gorm:"default:'active'"`
|
||||
}
|
||||
|
||||
func generateToken(n int) string {
|
||||
b := make([]byte, n)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return hex.EncodeToString(b)
|
||||
}
|
||||
|
||||
func main() {
|
||||
godotenv.Load(".env")
|
||||
godotenv.Load("backend/.env")
|
||||
|
||||
pgHost := os.Getenv("DB_HOST")
|
||||
if pgHost == "" {
|
||||
pgHost = "localhost"
|
||||
}
|
||||
pgPort := os.Getenv("DB_PORT")
|
||||
if pgPort == "" {
|
||||
pgPort = "5432"
|
||||
}
|
||||
pgUser := os.Getenv("DB_USER")
|
||||
if pgUser == "" {
|
||||
pgUser = "baron"
|
||||
}
|
||||
pgPass := os.Getenv("DB_PASSWORD")
|
||||
if pgPass == "" {
|
||||
pgPass = "password"
|
||||
}
|
||||
pgName := os.Getenv("DB_NAME")
|
||||
if pgName == "" {
|
||||
pgName = "baron_sso"
|
||||
}
|
||||
|
||||
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable",
|
||||
pgHost, pgUser, pgPass, pgName, pgPort)
|
||||
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to connect to DB: %v", err)
|
||||
}
|
||||
|
||||
clientID := generateToken(8)
|
||||
plainSecret := generateToken(16)
|
||||
hashedSecret, _ := bcrypt.GenerateFromPassword([]byte(plainSecret), bcrypt.DefaultCost)
|
||||
|
||||
key := ApiKey{
|
||||
Name: "Test Admin Key",
|
||||
ClientID: clientID,
|
||||
ClientSecretHash: string(hashedSecret),
|
||||
Scopes: "tenant:read tenant:write user:read user:write audit:read audit:write",
|
||||
Status: "active",
|
||||
}
|
||||
|
||||
if err := db.Table("api_keys").Create(&key).Error; err != nil {
|
||||
log.Fatalf("Failed to create API key: %v", err)
|
||||
}
|
||||
|
||||
fmt.Println("====================================================")
|
||||
fmt.Println("✅ API Key Generated Successfully!")
|
||||
fmt.Printf("Client ID: %s\n", clientID)
|
||||
fmt.Printf("Client Secret: %s\n", plainSecret)
|
||||
fmt.Println("====================================================")
|
||||
fmt.Println("Usage Example:")
|
||||
fmt.Printf("curl -H \"X-Baron-Key-ID: %s\" -H \"X-Baron-Key-Secret: %s\" http://localhost:3000/api/v1/admin/tenants\n", clientID, plainSecret)
|
||||
fmt.Println("====================================================")
|
||||
}
|
||||
Reference in New Issue
Block a user