100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/jackc/pgx/v4"
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type Environment string
|
|
|
|
const (
|
|
Live Environment = "live"
|
|
Beta = "beta"
|
|
Dev = "dev"
|
|
)
|
|
|
|
type HMNConfig struct {
|
|
Env Environment
|
|
Addr string
|
|
PrivateAddr string
|
|
BaseUrl string
|
|
LogLevel zerolog.Level
|
|
Postgres PostgresConfig
|
|
Auth AuthConfig
|
|
Admin AdminConfig
|
|
Email EmailConfig
|
|
DigitalOcean DigitalOceanConfig
|
|
Discord DiscordConfig
|
|
EpisodeGuide EpisodeGuide
|
|
}
|
|
|
|
type PostgresConfig struct {
|
|
User string
|
|
Password string
|
|
Hostname string
|
|
Port int
|
|
DbName string
|
|
LogLevel pgx.LogLevel
|
|
MinConn int32
|
|
MaxConn int32
|
|
}
|
|
|
|
type AuthConfig struct {
|
|
CookieDomain string
|
|
CookieSecure bool
|
|
}
|
|
|
|
type DigitalOceanConfig struct {
|
|
AssetsSpacesKey string
|
|
AssetsSpacesSecret string
|
|
AssetsSpacesRegion string
|
|
AssetsSpacesEndpoint string
|
|
AssetsSpacesBucket string
|
|
AssetsPathPrefix string
|
|
AssetsPublicUrlRoot string
|
|
}
|
|
|
|
type EmailConfig struct {
|
|
ServerAddress string
|
|
ServerPort int
|
|
FromAddress string
|
|
FromAddressPassword string
|
|
FromName string
|
|
OverrideRecipientEmail string
|
|
}
|
|
|
|
type DiscordConfig struct {
|
|
BotToken string
|
|
BotUserID string
|
|
|
|
OAuthClientID string
|
|
OAuthClientSecret string
|
|
|
|
GuildID string
|
|
MemberRoleID string
|
|
ShowcaseChannelID string
|
|
LibraryChannelID string
|
|
}
|
|
|
|
type EpisodeGuide struct {
|
|
CineraOutputPath string
|
|
Projects map[string]string // NOTE(asaf): Maps from slugs to default episode guide topic
|
|
}
|
|
|
|
type AdminConfig struct {
|
|
AtomUsername string
|
|
AtomPassword string
|
|
}
|
|
|
|
func init() {
|
|
if Config.EpisodeGuide.Projects == nil {
|
|
Config.EpisodeGuide.Projects = make(map[string]string)
|
|
}
|
|
}
|
|
|
|
func (info PostgresConfig) DSN() string {
|
|
return fmt.Sprintf("user=%s password=%s host=%s port=%d dbname=%s", info.User, info.Password, info.Hostname, info.Port, info.DbName)
|
|
}
|