diff options
Diffstat (limited to 'config')
| -rw-r--r-- | config/config.go | 47 | ||||
| -rw-r--r-- | config/types.go | 47 |
2 files changed, 94 insertions, 0 deletions
diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..a3835c5 --- /dev/null +++ b/config/config.go @@ -0,0 +1,47 @@ +package config + +import ( + "lain/utils/env" + "log" + + "github.com/joho/godotenv" +) + +var ( + Server ServerConfig + MailServer MailServerConfig + Database DatabaseConfig + MinIO MinIOConfig + AIServer AIServerConfig + Session SessionConfig +) + +func init() { + if err := godotenv.Load(); err != nil { + log.Println("No .env file found, using environment variables") + } + + if err := env.Parse(&Server); err != nil { + log.Fatalf("Failed to parse ServerConfig: %v", err) + } + + if err := env.Parse(&MailServer); err != nil { + log.Fatalf("Failed to parse MailServerConfig: %v", err) + } + + if err := env.Parse(&Database); err != nil { + log.Fatalf("Failed to parse DatabaseConfig: %v", err) + } + + if err := env.Parse(&MinIO); err != nil { + log.Fatalf("Failed to parse MinIOConfig: %v", err) + } + + if err := env.Parse(&AIServer); err != nil { + log.Fatalf("Failed to parse AIServerConfig: %v", err) + } + + if err := env.Parse(&Session); err != nil { + log.Fatalf("Failed to parse SessionConfig: %v", err) + } +} diff --git a/config/types.go b/config/types.go new file mode 100644 index 0000000..a8bcf01 --- /dev/null +++ b/config/types.go @@ -0,0 +1,47 @@ +package config + +import "time" + +type ServerConfig struct { + Host string `env:"SERVER_HOST" default:"localhost"` + Port int `env:"SERVER_PORT" default:"8080"` + AppSecret string `env:"APP_SECRET" default:"mysecret"` + AllowedDomains []string `env:"ALLOWED_DOMAINS" default:"localhost"` +} + +type MailServerConfig struct { + IMAPHost string `env:"IMAP_HOST" default:""` + IMAPPort int `env:"IMAP_PORT" default:"993"` + IMAPTLS bool `env:"IMAP_TLS" default:"true"` + SMTPHost string `env:"SMTP_HOST" default:""` + SMTPPort int `env:"SMTP_PORT" default:"587"` + SMTPTLS bool `env:"SMTP_TLS" default:"true"` +} + +type DatabaseConfig struct { + Host string `env:"DB_HOST" default:"localhost"` + Port int `env:"DB_PORT" default:"5432"` + User string `env:"DB_USER" default:"postgres"` + Pass string `env:"DB_PASS" default:""` + Name string `env:"DB_NAME" default:"lain"` + SSLMode string `env:"DB_SSLMODE" default:"disable"` +} + +type MinIOConfig struct { + Endpoint string `env:"MINIO_ENDPOINT" default:"localhost:9000"` + AccessKey string `env:"MINIO_ACCESS_KEY" default:""` + SecretKey string `env:"MINIO_SECRET_KEY" default:""` + BucketName string `env:"MINIO_BUCKET_NAME" default:"lain"` + UseSSL bool `env:"MINIO_USE_SSL" default:"false"` +} + +type AIServerConfig struct { + URL string `env:"AI_SERVER_URL" default:""` + AuthKey string `env:"AI_SERVER_AUTH_KEY" default:""` +} + +type SessionConfig struct { + CookieName string `env:"SESSION_COOKIE_NAME" default:"lain_session"` + Timeout time.Duration `env:"SESSION_TIMEOUT" default:"24h"` + SecureCookie bool `env:"SESSION_SECURE_COOKIE" default:"false"` +} |
