diff --git a/backend/internal/service/hydra_admin_service.go b/backend/internal/service/hydra_admin_service.go index b86ebaba..ef1e0911 100644 --- a/backend/internal/service/hydra_admin_service.go +++ b/backend/internal/service/hydra_admin_service.go @@ -2,6 +2,7 @@ package service import ( "baron-sso-backend/internal/domain" + "baron-sso-backend/internal/utils" "bytes" "context" "encoding/json" @@ -27,8 +28,8 @@ type HydraAdminService struct { func NewHydraAdminService() *HydraAdminService { return &HydraAdminService{ - AdminURL: getenv("HYDRA_ADMIN_URL", "http://hydra:4445"), - PublicURL: getenv("HYDRA_PUBLIC_URL", "http://hydra:4444"), + AdminURL: utils.GetEnv("HYDRA_ADMIN_URL", "http://hydra:4445"), + PublicURL: utils.GetEnv("HYDRA_PUBLIC_URL", "http://hydra:4444"), } } diff --git a/backend/internal/service/keto_service.go b/backend/internal/service/keto_service.go index 4b329eae..2eeab758 100644 --- a/backend/internal/service/keto_service.go +++ b/backend/internal/service/keto_service.go @@ -1,6 +1,7 @@ package service import ( + "baron-sso-backend/internal/utils" "bytes" "context" "encoding/json" @@ -9,7 +10,6 @@ import ( "log/slog" "net/http" "net/url" - "os" "time" ) @@ -28,14 +28,8 @@ type ketoService struct { } func NewKetoService() KetoService { - readURL := os.Getenv("KETO_READ_URL") - if readURL == "" { - readURL = "http://keto:4466" - } - writeURL := os.Getenv("KETO_WRITE_URL") - if writeURL == "" { - writeURL = "http://keto:4467" - } + readURL := utils.GetEnv("KETO_READ_URL", "http://keto:4466") + writeURL := utils.GetEnv("KETO_WRITE_URL", "http://keto:4467") return &ketoService{ readURL: readURL, diff --git a/backend/internal/service/kratos_admin_service.go b/backend/internal/service/kratos_admin_service.go index 800407d4..03e9669e 100644 --- a/backend/internal/service/kratos_admin_service.go +++ b/backend/internal/service/kratos_admin_service.go @@ -1,6 +1,7 @@ package service import ( + "baron-sso-backend/internal/utils" "bytes" "context" "encoding/json" @@ -28,7 +29,7 @@ type KratosAdminService struct { func NewKratosAdminService() *KratosAdminService { return &KratosAdminService{ - AdminURL: getenvKratos("KRATOS_ADMIN_URL", "http://kratos:4434"), + AdminURL: utils.GetEnv("KRATOS_ADMIN_URL", "http://kratos:4434"), } } @@ -227,8 +228,9 @@ func (s *KratosAdminService) httpClient() *http.Client { } func getenvKratos(key, fallback string) string { - if v := os.Getenv(key); v != "" { - return v + v := os.Getenv(key) + if v == "" { + return fallback } - return fallback + return strings.Trim(v, "\"") } diff --git a/backend/internal/service/ory_service.go b/backend/internal/service/ory_service.go index bab1e8c0..48cab108 100644 --- a/backend/internal/service/ory_service.go +++ b/backend/internal/service/ory_service.go @@ -2,6 +2,7 @@ package service import ( "baron-sso-backend/internal/domain" + "baron-sso-backend/internal/utils" "bytes" "context" "encoding/json" @@ -27,9 +28,9 @@ type OryProvider struct { func NewOryProvider() *OryProvider { return &OryProvider{ - KratosAdminURL: getenv("KRATOS_ADMIN_URL", "http://kratos:4434"), - KratosPublicURL: getenv("KRATOS_PUBLIC_URL", "http://kratos:4433"), - HydraAdminURL: getenv("HYDRA_ADMIN_URL", "http://hydra:4445"), + KratosAdminURL: utils.GetEnv("KRATOS_ADMIN_URL", "http://kratos:4434"), + KratosPublicURL: utils.GetEnv("KRATOS_PUBLIC_URL", "http://kratos:4433"), + HydraAdminURL: utils.GetEnv("HYDRA_ADMIN_URL", "http://hydra:4445"), } } @@ -727,10 +728,12 @@ func (o *OryProvider) UpdateUserPassword(loginID, newPassword string, r *http.Re } func getenv(key, fallback string) string { - if v := os.Getenv(key); v != "" { - return v + v := os.Getenv(key) + if v == "" { + return fallback } - return fallback + // Strip surrounding double quotes if present + return strings.Trim(v, "\"") } // findIdentityID: Kratos Admin API에서 credentials_identifier로 검색 후 첫 번째 identity id 반환 diff --git a/backend/internal/utils/env.go b/backend/internal/utils/env.go new file mode 100644 index 00000000..6e61dc32 --- /dev/null +++ b/backend/internal/utils/env.go @@ -0,0 +1,22 @@ +package utils + +import ( + "os" + "strings" +) + +// GetEnv retrieves the value of the environment variable named by the key. +// It returns the value if it exists, otherwise it returns the fallback value. +// It automatically strips surrounding double quotes from the value. +func GetEnv(key, fallback string) string { + v := os.Getenv(key) + if v == "" { + return fallback + } + // Strip surrounding double quotes if present + v = strings.TrimSpace(v) + if len(v) >= 2 && v[0] == '"' && v[len(v)-1] == '"' { + return v[1 : len(v)-1] + } + return v +}