nidus-sync/config/config.go

153 lines
5 KiB
Go
Raw Normal View History

package config
import (
"fmt"
"os"
"github.com/nyaruka/phonenumbers"
)
2026-01-17 01:13:27 +00:00
var (
2026-01-18 03:00:48 +00:00
Bind string
ClientID string
ClientSecret string
DomainRMO string
DomainNidus string
DomainTegola string
2026-01-18 03:00:48 +00:00
Environment string
FilesDirectoryLogo string
2026-01-18 03:00:48 +00:00
FilesDirectoryPublic string
FilesDirectoryUser string
2026-01-17 01:13:27 +00:00
FieldseekerSchemaDirectory string
2026-01-18 03:00:48 +00:00
ForwardEmailAPIToken string
ForwardEmailReportAddress string
2026-01-17 01:13:27 +00:00
ForwardEmailReportPassword string
ForwardEmailReportUsername string
2026-01-18 03:00:48 +00:00
MapboxToken string
PGDSN string
RMOPhoneNumber phonenumbers.PhoneNumber
TwilioAuthToken string
TwilioAccountSID string
TwilioMessagingServiceSID string
2026-01-17 01:13:27 +00:00
)
func IsProductionEnvironment() bool {
return Environment == "PRODUCTION"
}
func makeURL(domain, path string, args ...interface{}) string {
pattern := "https://" + domain + path
return fmt.Sprintf(pattern, args...)
}
func MakeURLNidus(path string, args ...interface{}) string {
return makeURL(DomainNidus, path, args...)
}
func MakeURLReport(path string, args ...interface{}) string {
return makeURL(DomainRMO, path, args...)
}
func MakeURLTegola(path string, args ...interface{}) string {
return makeURL(DomainTegola, path, args...)
}
func Parse() (err error) {
2026-01-17 01:13:27 +00:00
Bind = os.Getenv("BIND")
if Bind == "" {
Bind = ":9001"
}
ClientID = os.Getenv("ARCGIS_CLIENT_ID")
if ClientID == "" {
return fmt.Errorf("You must specify a non-empty ARCGIS_CLIENT_ID")
}
ClientSecret = os.Getenv("ARCGIS_CLIENT_SECRET")
if ClientSecret == "" {
return fmt.Errorf("You must specify a non-empty ARCGIS_CLIENT_SECRET")
}
DomainNidus = os.Getenv("DOMAIN_NIDUS")
if DomainNidus == "" {
return fmt.Errorf("You must specify a non-empty DOMAIN_NIDUS")
}
DomainRMO = os.Getenv("DOMAIN_RMO")
if DomainRMO == "" {
return fmt.Errorf("You must specify a non-empty DOMAIN_RMO")
}
DomainTegola = os.Getenv("DOMAIN_TEGOLA")
if DomainTegola == "" {
return fmt.Errorf("You must specify a non-empty DOMAIN_TEGOLA")
}
Environment = os.Getenv("ENVIRONMENT")
if Environment == "" {
return fmt.Errorf("You must specify a non-empty ENVIRONMENT")
}
if !(Environment == "PRODUCTION" || Environment == "DEVELOPMENT") {
return fmt.Errorf("ENVIRONMENT should be either DEVELOPMENT or PRODUCTION")
}
FieldseekerSchemaDirectory = os.Getenv("FIELDSEEKER_SCHEMA_DIRECTORY")
if FieldseekerSchemaDirectory == "" {
return fmt.Errorf("You must specify a non-empty FIELDSEEKER_SCHEMA_DIRECTORY")
}
FilesDirectoryLogo = os.Getenv("FILES_DIRECTORY_LOGO")
if FilesDirectoryLogo == "" {
return fmt.Errorf("You must specify a non-empty FILES_DIRECTORY_LOGO")
}
FilesDirectoryPublic = os.Getenv("FILES_DIRECTORY_PUBLIC")
if FilesDirectoryPublic == "" {
return fmt.Errorf("You must specify a non-empty FILES_DIRECTORY_PUBLIC")
}
FilesDirectoryUser = os.Getenv("FILES_DIRECTORY_USER")
if FilesDirectoryUser == "" {
return fmt.Errorf("You must specify a non-empty FILES_DIRECTORY_USER")
}
2026-01-18 03:00:48 +00:00
ForwardEmailReportAddress = os.Getenv("FORWARDEMAIL_REPORT_ADDRESS")
if ForwardEmailReportAddress == "" {
return fmt.Errorf("You must specify a non-empty FORWARDEMAIL_REPORT_ADDRESS")
}
2026-01-17 01:13:27 +00:00
ForwardEmailAPIToken = os.Getenv("FORWARDEMAIL_API_TOKEN")
if ForwardEmailAPIToken == "" {
return fmt.Errorf("You must specify a non-empty FORWARDEMAIL_API_TOKEN")
}
ForwardEmailReportUsername = os.Getenv("FORWARDEMAIL_REPORT_USERNAME")
if ForwardEmailReportUsername == "" {
return fmt.Errorf("You must specify a non-empty FORWARDEMAIL_REPORT_USERNAME")
}
ForwardEmailReportPassword = os.Getenv("FORWARDEMAIL_REPORT_PASSWORD")
if ForwardEmailReportPassword == "" {
return fmt.Errorf("You must specify a non-empty FORWARDEMAIL_REPORT_PASSWORD")
}
MapboxToken = os.Getenv("MAPBOX_TOKEN")
if MapboxToken == "" {
return fmt.Errorf("You must specify a non-empty MAPBOX_TOKEN")
}
PGDSN = os.Getenv("POSTGRES_DSN")
if PGDSN == "" {
return fmt.Errorf("You must specify a non-empty POSTGRES_DSN")
}
rmo_phone_number := os.Getenv("RMO_PHONE_NUMBER")
if rmo_phone_number == "" {
return fmt.Errorf("You must specify a non-empty RMO_PHONE_NUMBER")
}
p, err := phonenumbers.Parse(rmo_phone_number, "US")
if err != nil {
return fmt.Errorf("Failed to parse '%s' as a valid phone number: %w", rmo_phone_number, err)
}
RMOPhoneNumber = *p
TwilioAccountSID = os.Getenv("TWILIO_ACCOUNT_SID")
if TwilioAccountSID == "" {
return fmt.Errorf("You must specify a non-empty TWILIO_ACCOUNT_SID")
2026-01-17 01:13:27 +00:00
}
TwilioAuthToken = os.Getenv("TWILIO_AUTH_TOKEN")
if TwilioAuthToken == "" {
return fmt.Errorf("You must specify a non-empty TWILIO_AUTH_TOKEN")
2026-01-17 01:13:27 +00:00
}
TwilioMessagingServiceSID = os.Getenv("TWILIO_MESSAGING_SERVICE_SID")
if TwilioMessagingServiceSID == "" {
return fmt.Errorf("You must specify a non-empty TWILIO_MESSAGING_SERVICE_SID")
2026-01-17 01:13:27 +00:00
}
return nil
}
func ArcGISOauthRedirectURL() string {
return MakeURLNidus("/arcgis/oauth/callback")
}