aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/config.go20
-rw-r--r--config/types.go11
-rw-r--r--database/database.go49
-rw-r--r--imageboard/main.go6
4 files changed, 66 insertions, 20 deletions
diff --git a/config/config.go b/config/config.go
index ce2dd8b..a7831f2 100644
--- a/config/config.go
+++ b/config/config.go
@@ -7,14 +7,12 @@ import (
)
var (
- AppSecret string = "default_secret"
- Database DatabaseConfig
- IsDevelopmentMode bool = true
- Image ImageConfig
- S3 S3Config
- Server ServerConfig
- Session SessionConfig
- SMTP SMTPConfig
+ Database DatabaseConfig
+ Upload UploadConfig
+ S3 S3Config
+ Server ServerConfig
+ Session SessionConfig
+ SMTP SMTPConfig
)
func init() {
@@ -22,15 +20,11 @@ func init() {
log.Println("no .env file found, using environment variables")
}
- AppSecret = getEnv("APP_SECRET", AppSecret)
-
if err := Parse(&Database); err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
- IsDevelopmentMode = getEnvBool("DEV_MODE", IsDevelopmentMode)
-
- if err := Parse(&Image); err != nil {
+ if err := Parse(&Upload); err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
diff --git a/config/types.go b/config/types.go
index 075b728..fc4ad3c 100644
--- a/config/types.go
+++ b/config/types.go
@@ -3,9 +3,12 @@ package config
import "time"
type ServerConfig struct {
- Host string `env:"SERVER_HOST" default:"localhost"`
- Port int `env:"SERVER_PORT" default:"8080"`
- AppName string `env:"APP_NAME" default:"ImageBoard"`
+ Host string `env:"SERVER_HOST" default:"localhost"`
+ Port int `env:"SERVER_PORT" default:"8080"`
+ AppName string `env:"APP_NAME" default:"ImageBoard"`
+ AppSecret string `env:"APP_SECRET" default:"default_secret"`
+ IsDevMode bool `env:"DEV_MODE" default:"true"`
+ MinPasswordLength int `env:"MIN_PASSWORD_LENGTH" default:"8"`
}
type DatabaseConfig struct {
@@ -26,7 +29,7 @@ type SessionConfig struct {
CookieSameSite string `env:"SESSION_COOKIE_SAMESITE" default:"Lax"`
}
-type ImageConfig struct {
+type UploadConfig struct {
MaxSize int `env:"IMAGE_MAX_SIZE" default:"10485760"`
AllowedTypes string `env:"IMAGE_ALLOWED_TYPES" default:"image/jpeg,image/png,image/gif,image/webp"`
}
diff --git a/database/database.go b/database/database.go
new file mode 100644
index 0000000..d063cfc
--- /dev/null
+++ b/database/database.go
@@ -0,0 +1,49 @@
+package database
+
+import (
+ "fmt"
+ "imageboard/config"
+ "log"
+
+ "gorm.io/driver/postgres"
+ "gorm.io/gorm"
+ "gorm.io/gorm/logger"
+)
+
+var (
+ DB *gorm.DB
+ err error
+)
+
+func init() {
+ dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s",
+ config.Database.Host,
+ config.Database.Username,
+ config.Database.Password,
+ config.Database.DatabaseName,
+ config.Database.Port,
+ config.Database.SSLMode,
+ )
+
+ logLevel := logger.Silent
+ if config.Server.IsDevMode {
+ logLevel = logger.Info
+ }
+
+ DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
+ Logger: logger.Default.LogMode(logLevel),
+ })
+ if err != nil {
+ log.Fatalf("failed to connect to database: %v", err)
+ }
+
+ if err := autoMigrate(); err != nil {
+ log.Fatalf("failed to auto migrate database: %v", err)
+ }
+
+ log.Println("Database connection established successfully")
+}
+
+func autoMigrate() error {
+ return DB.AutoMigrate()
+}
diff --git a/imageboard/main.go b/imageboard/main.go
index d5a3c88..49eda9c 100644
--- a/imageboard/main.go
+++ b/imageboard/main.go
@@ -17,19 +17,19 @@ import (
)
func main() {
- if config.AppSecret == "default_secret" {
+ if config.Server.AppSecret == "default_secret" {
log.Println("Warning: AppSecret is set to a default value which is not secure. Please set a strong random secret in your APP_SECRET environment variable or .env file.")
}
engine := html.New("./templates", ".html")
- engine.Reload(config.IsDevelopmentMode)
+ engine.Reload(config.Server.IsDevMode)
app := fiber.New(fiber.Config{
Views: engine,
ErrorHandler: func(ctx *fiber.Ctx, err error) error {
log.Printf("Error: %v", err)
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
},
- BodyLimit: config.Image.MaxSize,
+ BodyLimit: config.Upload.MaxSize,
})
app.Use(recover.New())