forked from baron/baron-sso
Refactor password reset flow
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// getEnv는 환경 변수를 읽거나 대체 값을 반환하는 헬퍼 함수입니다.
|
||||
@@ -19,38 +20,44 @@ func getEnv(key, fallback string) string {
|
||||
// InitializeProvider는 환경 설정을 기반으로 IDP 공급자를 생성하고 반환합니다.
|
||||
// 이것은 IdentityProvider 인터페이스의 팩토리 역할을 합니다.
|
||||
func InitializeProvider() (domain.IdentityProvider, error) {
|
||||
providerName := getEnv("IDP_PROVIDER", "descope") // 기본값은 descope입니다.
|
||||
slog.Info("Initializing IDP", "provider", providerName)
|
||||
rawProviders := getEnv("IDP_PROVIDER", "descope") // 기본값은 descope입니다.
|
||||
providers := strings.Split(rawProviders, ",")
|
||||
slog.Info("Initializing IDP", "providers", rawProviders)
|
||||
|
||||
switch providerName {
|
||||
case "descope":
|
||||
descopeProjectID := getEnv("DESCOPE_PROJECT_ID", "")
|
||||
descopeManagementKey := getEnv("DESCOPE_MANAGEMENT_KEY", "")
|
||||
// 선택된 공급자에 대한 키가 설정되었는지 확인하기 위한 기본 유효성 검사
|
||||
if descopeProjectID == "" || descopeManagementKey == "" {
|
||||
return nil, fmt.Errorf("DESCOPE_PROJECT_ID and DESCOPE_MANAGEMENT_KEY must be set for the 'descope' provider")
|
||||
for _, p := range providers {
|
||||
providerName := strings.TrimSpace(strings.ToLower(p))
|
||||
switch providerName {
|
||||
case "descope":
|
||||
descopeProjectID := getEnv("DESCOPE_PROJECT_ID", "")
|
||||
descopeManagementKey := getEnv("DESCOPE_MANAGEMENT_KEY", "")
|
||||
// 선택된 공급자에 대한 키가 설정되었는지 확인하기 위한 기본 유효성 검사
|
||||
if descopeProjectID == "" || descopeManagementKey == "" {
|
||||
return nil, fmt.Errorf("DESCOPE_PROJECT_ID and DESCOPE_MANAGEMENT_KEY must be set for the 'descope' provider")
|
||||
}
|
||||
return service.NewDescopeProvider(descopeProjectID, descopeManagementKey), nil
|
||||
|
||||
// --- 향후 공급자 구현 ---
|
||||
// case "ory":
|
||||
// // oryURL := getEnv("ORY_URL", "")
|
||||
// // if oryURL == "" {
|
||||
// // return nil, fmt.Errorf("ORY_URL must be set for the 'ory' provider")
|
||||
// // }
|
||||
// // return service.NewOryProvider(oryURL), nil
|
||||
// // return nil, fmt.Errorf(\"'ory' provider is not yet implemented\")
|
||||
|
||||
// case "keycloak":
|
||||
// // keycloakURL := getEnv("KEYCLOAK_URL", "")
|
||||
// // keycloakRealm := getEnv("KEYCLOAK_REALM", "")
|
||||
// // if keycloakURL == "" || keycloakRealm == "" {
|
||||
// // return nil, fmt.Errorf("KEYCLOAK_URL and KEYCLOAK_REALM must be set for the 'keycloak' provider")
|
||||
// // }
|
||||
// // return service.NewKeycloakProvider(keycloakURL, keycloakRealm), nil
|
||||
// // return nil, fmt.Errorf(\"'keycloak' provider is not yet implemented\")
|
||||
default:
|
||||
// 알 수 없는 공급자는 건너뛰고 다음 후보를 시도
|
||||
slog.Warn("Skipping unsupported IDP provider entry", "provider", providerName)
|
||||
}
|
||||
return service.NewDescopeProvider(descopeProjectID, descopeManagementKey), nil
|
||||
|
||||
// --- 향후 공급자 구현 ---
|
||||
// case "ory":
|
||||
// // oryURL := getEnv("ORY_URL", "")
|
||||
// // if oryURL == "" {
|
||||
// // return nil, fmt.Errorf("ORY_URL must be set for the 'ory' provider")
|
||||
// // }
|
||||
// // return service.NewOryProvider(oryURL), nil
|
||||
// return nil, fmt.Errorf("'ory' provider is not yet implemented")
|
||||
|
||||
// case "keycloak":
|
||||
// // keycloakURL := getEnv("KEYCLOAK_URL", "")
|
||||
// // keycloakRealm := getEnv("KEYCLOAK_REALM", "")
|
||||
// // if keycloakURL == "" || keycloakRealm == "" {
|
||||
// // return nil, fmt.Errorf("KEYCLOAK_URL and KEYCLOAK_REALM must be set for the 'keycloak' provider")
|
||||
// // }
|
||||
// // return service.NewKeycloakProvider(keycloakURL, keycloakRealm), nil
|
||||
// return nil, fmt.Errorf("'keycloak' provider is not yet implemented")
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported or unknown IDP_PROVIDER specified: %s", providerName)
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unsupported or unknown IDP_PROVIDER specified: %s", rawProviders)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user