aboutsummaryrefslogtreecommitdiff
path: root/config/types.go
blob: a66c7a45e5cf03898aeb0349cfcbc6a2b612c9fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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"`
	AppBaseURL        string `env:"APP_BASE_URL" default:"http://localhost:8080"`
	AppSecret         string `env:"APP_SECRET" default:"default_secret"`
	IsDevMode         bool   `env:"DEV_MODE" default:"true"`
	MinPasswordLength int    `env:"MIN_PASSWORD_LENGTH" default:"8"`
	AdminEmail        string `env:"ADMIN_EMAIL" default:""`
}

type DatabaseConfig struct {
	Host                 string `env:"DB_HOST" default:"localhost"`
	Port                 int    `env:"DB_PORT" default:"5432"`
	Username             string `env:"DB_USERNAME" default:"postgres"`
	Password             string `env:"DB_PASSWORD" default:""`
	DatabaseName         string `env:"DB_NAME" default:"imageboard"`
	SSLMode              string `env:"DB_SSLMODE" default:"disable"`
	WipeAndResetDatabase bool   `env:"DB_WIPE_AND_RESET" default:"false"`
}

type SessionConfig struct {
	Expiration     time.Duration `env:"SESSION_EXPIRATION" default:"24h"`
	CookieName     string        `env:"SESSION_COOKIE_NAME" default:"session_id"`
	CookieDomain   string        `env:"SESSION_COOKIE_DOMAIN" default:""`
	CookiePath     string        `env:"SESSION_COOKIE_PATH" default:"/"`
	CookieSecure   bool          `env:"SESSION_COOKIE_SECURE" default:"false"`
	CookieSameSite string        `env:"SESSION_COOKIE_SAMESITE" default:"Lax"`
}

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"`
}

type S3Config struct {
	Endpoint        string `env:"S3_ENDPOINT" default:"localhost:9000"`
	AccessKey       string `env:"S3_ACCESS_KEY" default:"minioadmin"`
	SecretAccessKey string `env:"S3_SECRET_KEY" default:"minioadmin"`
	BucketName      string `env:"S3_BUCKET_NAME" default:"shifoo"`
	FolderPath      string `env:"S3_FOLDER_PATH" default:"imageboard"`
	Region          string `env:"S3_REGION" default:"us-east-1"`
	UseSSL          bool   `env:"S3_USE_SSL" default:"false"`
	PublicURL       string `env:"S3_PUBLIC_URL" default:""`
}

type SMTPConfig struct {
	Host     string `env:"SMTP_HOST" default:""`
	Port     int    `env:"SMTP_PORT" default:"587"`
	Username string `env:"SMTP_USERNAME" default:""`
	Password string `env:"SMTP_PASSWORD" default:""`
	From     string `env:"EMAIL_FROM" default:""`
}

type QueryParam struct {
	Key   string
	Value string
}

type Request struct {
	Path        string
	Method      string
	Query       []QueryParam
	Params      []QueryParam
	QueryString string
	IP          string
	URL         string
}

type SiteStats struct {
	Posts    string
	Tags     string
	Today    string
	Storage  string
	Comments string
}

type SitePreferences struct {
	SidebarWidth     string `json:"sidebar_width"`
	MainContentWidth string `json:"main_content_width"`
	H1FontSize       string `json:"h1_font_size"`
	BodyFontSize     string `json:"body_font_size"`
	SmallFontSize    string `json:"small_font_size"`
	PostsPerPage     int    `json:"posts_per_page"`
}