Files
haven/config.go
2024-09-22 23:28:25 -04:00

121 lines
5.5 KiB
Go

package main
import (
"log"
"os"
"strconv"
"strings"
"github.com/joho/godotenv"
)
type Config struct {
OwnerNpub string `json:"owner_npub"`
RelaySoftware string `json:"relay_software"`
RelayVersion string `json:"relay_version"`
PrivateRelayName string `json:"private_relay_name"`
PrivateRelayNpub string `json:"private_relay_npub"`
PrivateRelayDescription string `json:"private_relay_description"`
PrivateRelayIcon string `json:"private_relay_icon"`
ChatRelayName string `json:"chat_relay_name"`
ChatRelayNpub string `json:"chat_relay_npub"`
ChatRelayDescription string `json:"chat_relay_description"`
ChatRelayIcon string `json:"chat_relay_icon"`
ChatRelayWotDepth int `json:"chat_relay_wot_depth"`
ChatRelayWotRefreshIntervalHours int `json:"chat_relay_wot_refresh_interval_hours"`
ChatRelayMinimumFollowers int `json:"chat_relay_minimum_followers"`
OutboxRelayName string `json:"outbox_relay_name"`
OutboxRelayNpub string `json:"outbox_relay_npub"`
OutboxRelayDescription string `json:"outbox_relay_description"`
OutboxRelayIcon string `json:"outbox_relay_icon"`
InboxRelayName string `json:"inbox_relay_name"`
InboxRelayNpub string `json:"inbox_relay_npub"`
InboxRelayDescription string `json:"inbox_relay_description"`
InboxRelayIcon string `json:"inbox_relay_icon"`
InboxPullIntervalSeconds int `json:"inbox_pull_interval_seconds"`
ImportStartDate string `json:"import_start_date"`
ImportQueryIntervalSeconds int `json:"import_query_interval_seconds"`
ImportSeedRelays []string `json:"import_seed_relays"`
BackupProvider string `json:"backup_provider"`
BlastrRelays []string `json:"blastr_relays"`
}
type AwsConfig struct {
AccessKeyID string `json:"access"`
SecretAccessKey string `json:"secret"`
Region string `json:"region"`
Bucket string `json:"bucket"`
}
func loadConfig() Config {
godotenv.Load(".env")
return Config{
OwnerNpub: getEnv("OWNER_NPUB"),
RelaySoftware: "https://github.com/bitvora/haven",
RelayVersion: "v0.1.0",
PrivateRelayName: getEnv("PRIVATE_RELAY_NAME"),
PrivateRelayNpub: getEnv("PRIVATE_RELAY_NPUB"),
PrivateRelayDescription: getEnv("PRIVATE_RELAY_DESCRIPTION"),
PrivateRelayIcon: getEnv("PRIVATE_RELAY_ICON"),
ChatRelayName: getEnv("CHAT_RELAY_NAME"),
ChatRelayNpub: getEnv("CHAT_RELAY_NPUB"),
ChatRelayDescription: getEnv("CHAT_RELAY_DESCRIPTION"),
ChatRelayIcon: getEnv("CHAT_RELAY_ICON"),
ChatRelayWotDepth: getEnvInt("CHAT_RELAY_WOT_DEPTH", 0),
ChatRelayWotRefreshIntervalHours: getEnvInt("CHAT_RELAY_WOT_REFRESH_INTERVAL_HOURS", 0),
ChatRelayMinimumFollowers: getEnvInt("CHAT_RELAY_MINIMUM_FOLLOWERS", 0),
OutboxRelayName: getEnv("OUTBOX_RELAY_NAME"),
OutboxRelayNpub: getEnv("OUTBOX_RELAY_NPUB"),
OutboxRelayDescription: getEnv("OUTBOX_RELAY_DESCRIPTION"),
OutboxRelayIcon: getEnv("OUTBOX_RELAY_ICON"),
InboxRelayName: getEnv("INBOX_RELAY_NAME"),
InboxRelayNpub: getEnv("INBOX_RELAY_NPUB"),
InboxRelayDescription: getEnv("INBOX_RELAY_DESCRIPTION"),
InboxRelayIcon: getEnv("INBOX_RELAY_ICON"),
InboxPullIntervalSeconds: getEnvInt("INBOX_PULL_INTERVAL_SECONDS", 3600),
ImportStartDate: getEnv("IMPORT_START_DATE"),
ImportQueryIntervalSeconds: getEnvInt("IMPORT_QUERY_INTERVAL_SECONDS", 360000),
ImportSeedRelays: getRelayList(getEnv("IMPORT_SEED_RELAYS")),
BackupProvider: getEnv("BACKUP_PROVIDER"),
BlastrRelays: getRelayList(getEnv("BLASTR_RELAYS")),
}
}
func getRelayList(commaList string) []string {
relayList := strings.Split(commaList, ",")
for i, relay := range relayList {
relayList[i] = "wss://" + strings.TrimSpace(relay)
}
return relayList
}
func getEnv(key string) string {
value, exists := os.LookupEnv(key)
if !exists {
log.Fatalf("Environment variable %s not set", key)
}
return value
}
func getEnvInt(key string, defaultValue int) int {
if value, ok := os.LookupEnv(key); ok {
intValue, err := strconv.Atoi(value)
if err != nil {
panic(err)
}
return intValue
}
return defaultValue
}
var art = `
██╗ ██╗ █████╗ ██╗ ██╗███████╗███╗ ██╗
██║ ██║██╔══██╗██║ ██║██╔════╝████╗ ██║
███████║███████║██║ ██║█████╗ ██╔██╗ ██║
██╔══██║██╔══██║╚██╗ ██╔╝██╔══╝ ██║╚██╗██║
██║ ██║██║ ██║ ╚████╔╝ ███████╗██║ ╚████║
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═══╝
HIGH AVAILABILITY VAULT FOR EVENTS ON NOSTR
`