Compare commits
2 Commits
bf17d4d1da
...
05d6d5af4d
| Author | SHA1 | Date | |
|---|---|---|---|
| 05d6d5af4d | |||
| 633175f5be |
@@ -10,4 +10,7 @@ REDIS_ADDR=localhost:6379
|
|||||||
REDIS_PASSWORD=
|
REDIS_PASSWORD=
|
||||||
|
|
||||||
JWT_SECRET=your-secret-key-here
|
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)
|
key := fmt.Sprintf("session:%d", userID)
|
||||||
s.rdb.Del(context.Background(), key)
|
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)
|
authSvc := auth.NewService(authRepo, database.RDB)
|
||||||
authHandler := auth.NewHandler(authSvc)
|
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)
|
annRepo := announcement.NewRepository(database.DB)
|
||||||
annSvc := announcement.NewService(annRepo)
|
annSvc := announcement.NewService(annRepo)
|
||||||
annHandler := announcement.NewHandler(annSvc)
|
annHandler := announcement.NewHandler(annSvc)
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ type Config struct {
|
|||||||
RedisPassword string
|
RedisPassword string
|
||||||
JWTSecret string
|
JWTSecret string
|
||||||
JWTExpiryHours int
|
JWTExpiryHours int
|
||||||
|
AdminUsername string
|
||||||
|
AdminPassword string
|
||||||
}
|
}
|
||||||
|
|
||||||
var C Config
|
var C Config
|
||||||
@@ -37,6 +39,8 @@ func Load() {
|
|||||||
RedisPassword: getEnv("REDIS_PASSWORD", ""),
|
RedisPassword: getEnv("REDIS_PASSWORD", ""),
|
||||||
JWTSecret: getEnv("JWT_SECRET", "secret"),
|
JWTSecret: getEnv("JWT_SECRET", "secret"),
|
||||||
JWTExpiryHours: hours,
|
JWTExpiryHours: hours,
|
||||||
|
AdminUsername: getEnv("ADMIN_USERNAME", "admin"),
|
||||||
|
AdminPassword: getEnv("ADMIN_PASSWORD", "admin1234"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user