summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-12-18 16:29:07 +0530
committerBobby <[email protected]>2025-12-18 16:29:07 +0530
commit74209da9580c7ae63898664437dc7d021010d29a (patch)
tree90cba8e61cd5dc8c8fa62e7cc3ac798b2962dc6e /config
parent25f73ff8a0bbfc1f7c0ca8eab46c510e8d2624ef (diff)
downloadlain-74209da9580c7ae63898664437dc7d021010d29a.tar.xz
lain-74209da9580c7ae63898664437dc7d021010d29a.zip
add config and makefile
Diffstat (limited to 'config')
-rw-r--r--config/config.go47
-rw-r--r--config/types.go47
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"`
+}