Compare commits
2 Commits
bf17d4d1da
...
05d6d5af4d
| Author | SHA1 | Date | |
|---|---|---|---|
| 05d6d5af4d | |||
| 633175f5be |
@@ -10,4 +10,7 @@ REDIS_ADDR=localhost:6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
JWT_SECRET=your-secret-key-here
|
||||
JWT_EXPIRY_HOURS=24
|
||||
JWT_EXPIRY_HOURS=24
|
||||
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=admin1234
|
||||
@@ -1,48 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"a301_server/internal/auth"
|
||||
"a301_server/pkg/config"
|
||||
"a301_server/pkg/database"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
config.Load()
|
||||
|
||||
if err := database.ConnectMySQL(); err != nil {
|
||||
log.Fatalf("MySQL 연결 실패: %v", err)
|
||||
}
|
||||
|
||||
username := getArg(1, "admin")
|
||||
password := getArg(2, "admin1234")
|
||||
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
log.Fatalf("비밀번호 해시 실패: %v", err)
|
||||
}
|
||||
|
||||
user := auth.User{
|
||||
Username: username,
|
||||
PasswordHash: string(hash),
|
||||
Role: auth.RoleAdmin,
|
||||
}
|
||||
|
||||
repo := auth.NewRepository(database.DB)
|
||||
if err := repo.Create(&user); err != nil {
|
||||
log.Fatalf("관리자 계정 생성 실패: %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("관리자 계정 생성 완료\n 아이디: %s\n 비밀번호: %s\n", username, password)
|
||||
}
|
||||
|
||||
func getArg(index int, fallback string) string {
|
||||
if len(os.Args) > index {
|
||||
return os.Args[index]
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
@@ -64,3 +64,18 @@ func (s *Service) Logout(userID uint) {
|
||||
key := fmt.Sprintf("session:%d", userID)
|
||||
s.rdb.Del(context.Background(), key)
|
||||
}
|
||||
|
||||
func (s *Service) EnsureAdmin(username, password string) error {
|
||||
if _, err := s.repo.FindByUsername(username); err == nil {
|
||||
return nil // 이미 존재하면 스킵
|
||||
}
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return s.repo.Create(&User{
|
||||
Username: username,
|
||||
PasswordHash: string(hash),
|
||||
Role: RoleAdmin,
|
||||
})
|
||||
}
|
||||
|
||||
7
main.go
7
main.go
@@ -35,6 +35,13 @@ func main() {
|
||||
authSvc := auth.NewService(authRepo, database.RDB)
|
||||
authHandler := auth.NewHandler(authSvc)
|
||||
|
||||
// 초기 admin 계정 생성
|
||||
if err := authSvc.EnsureAdmin(config.C.AdminUsername, config.C.AdminPassword); err != nil {
|
||||
log.Printf("admin 계정 생성 실패: %v", err)
|
||||
} else {
|
||||
log.Printf("admin 계정 확인 완료: %s", config.C.AdminUsername)
|
||||
}
|
||||
|
||||
annRepo := announcement.NewRepository(database.DB)
|
||||
annSvc := announcement.NewService(annRepo)
|
||||
annHandler := announcement.NewHandler(annSvc)
|
||||
|
||||
@@ -18,6 +18,8 @@ type Config struct {
|
||||
RedisPassword string
|
||||
JWTSecret string
|
||||
JWTExpiryHours int
|
||||
AdminUsername string
|
||||
AdminPassword string
|
||||
}
|
||||
|
||||
var C Config
|
||||
@@ -37,6 +39,8 @@ func Load() {
|
||||
RedisPassword: getEnv("REDIS_PASSWORD", ""),
|
||||
JWTSecret: getEnv("JWT_SECRET", "secret"),
|
||||
JWTExpiryHours: hours,
|
||||
AdminUsername: getEnv("ADMIN_USERNAME", "admin"),
|
||||
AdminPassword: getEnv("ADMIN_PASSWORD", "admin1234"),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user