11package config
22
33import (
4+ "fmt"
45 "net/url"
56 "strconv"
67 "strings"
@@ -10,14 +11,15 @@ import (
1011)
1112
1213type Cfg struct {
13- PostgresHost string
14- PostgresUser string
15- PostgresPass string
16- PostgresUriArgs string
17- PostgresDefaultDb string
18- CloudProvider CloudProvider
19- AnnotationFilter string
20- KeepSecretName bool
14+ PostgresHost string
15+ PostgresUser string
16+ PostgresPass string
17+ PostgresUriArgs string
18+ PostgresPassPolicy utils.PostgresPassPolicy
19+ PostgresDefaultDb string
20+ CloudProvider CloudProvider
21+ AnnotationFilter string
22+ KeepSecretName bool
2123}
2224
2325var (
@@ -47,6 +49,12 @@ func Get() *Cfg {
4749 if value , err := strconv .ParseBool (utils .GetEnv ("KEEP_SECRET_NAME" )); err == nil {
4850 config .KeepSecretName = value
4951 }
52+
53+ pp , err := loadPassPolicy ()
54+ if err != nil {
55+ panic (fmt .Errorf ("failed to load password policy config: %w" , err ))
56+ }
57+ config .PostgresPassPolicy = pp
5058 })
5159 return config
5260}
@@ -65,3 +73,57 @@ func ParseCloudProvider(s string) CloudProvider {
6573 return CloudProviderNone
6674 }
6775}
76+
77+ // loadPassPolicy parses password policy configuration from environment variables.
78+ func loadPassPolicy () (utils.PostgresPassPolicy , error ) {
79+ var pp utils.PostgresPassPolicy
80+ var err error
81+
82+ if pp .Length , err = parseIntEnv ("POSTGRES_DEFAULT_PASSWORD_LENGTH" ); err != nil {
83+ return pp , err
84+ }
85+ if pp .MinLower , err = parseIntEnv ("POSTGRES_DEFAULT_PASSWORD_MIN_LOWER" ); err != nil {
86+ return pp , err
87+ }
88+ if pp .MinUpper , err = parseIntEnv ("POSTGRES_DEFAULT_PASSWORD_MIN_UPPER" ); err != nil {
89+ return pp , err
90+ }
91+ if pp .MinNumeric , err = parseIntEnv ("POSTGRES_DEFAULT_PASSWORD_MIN_NUMERIC" ); err != nil {
92+ return pp , err
93+ }
94+ if pp .MinSpecial , err = parseIntEnv ("POSTGRES_DEFAULT_PASSWORD_MIN_SPECIAL" ); err != nil {
95+ return pp , err
96+ }
97+
98+ pp .ExcludeChars = utils .GetEnv ("POSTGRES_DEFAULT_PASSWORD_EXCLUDE_CHARS" )
99+
100+ if pp .EnsureFirstLetter , err = parseBoolEnv ("POSTGRES_DEFAULT_PASSWORD_ENSURE_FIRST_LETTER" ); err != nil {
101+ return pp , err
102+ }
103+
104+ return pp , nil
105+ }
106+
107+ func parseIntEnv (key string ) (int , error ) {
108+ val := utils .GetEnv (key )
109+ if val == "" {
110+ return 0 , nil
111+ }
112+ i , err := strconv .Atoi (val )
113+ if err != nil {
114+ return 0 , fmt .Errorf ("invalid integer for %s: %v" , key , err )
115+ }
116+ return i , nil
117+ }
118+
119+ func parseBoolEnv (key string ) (bool , error ) {
120+ val := utils .GetEnv (key )
121+ if val == "" {
122+ return false , nil
123+ }
124+ b , err := strconv .ParseBool (val )
125+ if err != nil {
126+ return false , fmt .Errorf ("invalid boolean for %s: %v" , key , err )
127+ }
128+ return b , nil
129+ }
0 commit comments