config.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package config
  2. import (
  3. "time"
  4. "github.com/gorilla/sessions"
  5. "github.com/gorilla/websocket"
  6. "github.com/porter-dev/porter/api/server/shared/apierrors/alerter"
  7. "github.com/porter-dev/porter/internal/auth/token"
  8. "github.com/porter-dev/porter/internal/helm/urlcache"
  9. "github.com/porter-dev/porter/internal/logger"
  10. "github.com/porter-dev/porter/internal/notifier"
  11. "github.com/porter-dev/porter/internal/oauth"
  12. "github.com/porter-dev/porter/internal/repository"
  13. "golang.org/x/oauth2"
  14. )
  15. type Config struct {
  16. // Logger for logging
  17. Logger *logger.Logger
  18. // Repo implements a query repository
  19. Repo repository.Repository
  20. // Metadata is a description object for the server metadata, used
  21. // to determine which endpoints to register
  22. Metadata *Metadata
  23. // Alerter sends messages to alert aggregators (like Sentry) if the
  24. // error is fatal
  25. Alerter alerter.Alerter
  26. // Store implements a session store for session-based cookies
  27. Store sessions.Store
  28. // ServerConf is the set of configuration variables for the Porter server
  29. ServerConf *ServerConf
  30. // TokenConf contains the config for generating and validating JWT tokens
  31. TokenConf *token.TokenGeneratorConf
  32. // UserNotifier is an object that notifies users of transactions (pw reset, email
  33. // verification, etc)
  34. UserNotifier notifier.UserNotifier
  35. // DOConf is the configuration for a DigitalOcean OAuth client
  36. DOConf *oauth2.Config
  37. // GithubConf is the configuration for a Github OAuth client
  38. GithubConf *oauth2.Config
  39. // GithubAppConf is the configuration for a Github App OAuth client
  40. GithubAppConf *oauth.GithubAppConf
  41. // WSUpgrader upgrades HTTP connections to websocket connections
  42. WSUpgrader *websocket.Upgrader
  43. // URLCache contains a cache of chart names to chart repos
  44. URLCache *urlcache.ChartURLCache
  45. }
  46. type ConfigLoader interface {
  47. LoadConfig() (*Config, error)
  48. }
  49. // ServerConf is the server configuration
  50. type ServerConf struct {
  51. Debug bool `env:"DEBUG,default=false"`
  52. ServerURL string `env:"SERVER_URL,default=http://localhost:8080"`
  53. Port int `env:"SERVER_PORT,default=8080"`
  54. StaticFilePath string `env:"STATIC_FILE_PATH,default=/porter/static"`
  55. CookieName string `env:"COOKIE_NAME,default=porter"`
  56. CookieSecrets []string `env:"COOKIE_SECRETS,default=random_hash_key_;random_block_key"`
  57. TokenGeneratorSecret string `env:"TOKEN_GENERATOR_SECRET,default=secret"`
  58. TimeoutRead time.Duration `env:"SERVER_TIMEOUT_READ,default=5s"`
  59. TimeoutWrite time.Duration `env:"SERVER_TIMEOUT_WRITE,default=10s"`
  60. TimeoutIdle time.Duration `env:"SERVER_TIMEOUT_IDLE,default=15s"`
  61. IsLocal bool `env:"IS_LOCAL,default=false"`
  62. IsTesting bool `env:"IS_TESTING,default=false"`
  63. AppRootDomain string `env:"APP_ROOT_DOMAIN,default=porter.run"`
  64. DefaultApplicationHelmRepoURL string `env:"HELM_APP_REPO_URL,default=https://charts.dev.getporter.dev"`
  65. DefaultAddonHelmRepoURL string `env:"HELM_ADD_ON_REPO_URL,default=https://chart-addons.dev.getporter.dev"`
  66. BasicLoginEnabled bool `env:"BASIC_LOGIN_ENABLED,default=true"`
  67. GithubClientID string `env:"GITHUB_CLIENT_ID"`
  68. GithubClientSecret string `env:"GITHUB_CLIENT_SECRET"`
  69. GithubLoginEnabled bool `env:"GITHUB_LOGIN_ENABLED,default=true"`
  70. GithubAppClientID string `env:"GITHUB_APP_CLIENT_ID"`
  71. GithubAppClientSecret string `env:"GITHUB_APP_CLIENT_SECRET"`
  72. GithubAppName string `env:"GITHUB_APP_NAME"`
  73. GithubAppWebhookSecret string `env:"GITHUB_APP_WEBHOOK_SECRET"`
  74. GithubAppID string `env:"GITHUB_APP_ID"`
  75. GithubAppSecretPath string `env:"GITHUB_APP_SECRET_PATH"`
  76. GoogleClientID string `env:"GOOGLE_CLIENT_ID"`
  77. GoogleClientSecret string `env:"GOOGLE_CLIENT_SECRET"`
  78. GoogleRestrictedDomain string `env:"GOOGLE_RESTRICTED_DOMAIN"`
  79. SendgridAPIKey string `env:"SENDGRID_API_KEY"`
  80. SendgridPWResetTemplateID string `env:"SENDGRID_PW_RESET_TEMPLATE_ID"`
  81. SendgridPWGHTemplateID string `env:"SENDGRID_PW_GH_TEMPLATE_ID"`
  82. SendgridVerifyEmailTemplateID string `env:"SENDGRID_VERIFY_EMAIL_TEMPLATE_ID"`
  83. SendgridProjectInviteTemplateID string `env:"SENDGRID_INVITE_TEMPLATE_ID"`
  84. SendgridSenderEmail string `env:"SENDGRID_SENDER_EMAIL"`
  85. SlackClientID string `env:"SLACK_CLIENT_ID"`
  86. SlackClientSecret string `env:"SLACK_CLIENT_SECRET"`
  87. DOClientID string `env:"DO_CLIENT_ID"`
  88. DOClientSecret string `env:"DO_CLIENT_SECRET"`
  89. ProvisionerImageTag string `env:"PROV_IMAGE_TAG,default=latest"`
  90. ProvisionerImagePullSecret string `env:"PROV_IMAGE_PULL_SECRET"`
  91. SegmentClientKey string `env:"SEGMENT_CLIENT_KEY"`
  92. SentryDSN string `env:"SENTRY_DSN"`
  93. ProvisionerCluster string `env:"PROVISIONER_CLUSTER"`
  94. IngressCluster string `env:"INGRESS_CLUSTER"`
  95. SelfKubeconfig string `env:"SELF_KUBECONFIG"`
  96. }
  97. // DBConf is the database configuration: if generated from environment variables,
  98. // it assumes the default docker-compose configuration is used
  99. type DBConf struct {
  100. // EncryptionKey is the key to use for sensitive values that are encrypted at rest
  101. EncryptionKey string `env:"ENCRYPTION_KEY,default=__random_strong_encryption_key__"`
  102. Host string `env:"DB_HOST,default=postgres"`
  103. Port int `env:"DB_PORT,default=5432"`
  104. Username string `env:"DB_USER,default=porter"`
  105. Password string `env:"DB_PASS,default=porter"`
  106. DbName string `env:"DB_NAME,default=porter"`
  107. ForceSSL bool `env:"DB_FORCE_SSL,default=false"`
  108. SQLLite bool `env:"SQL_LITE,default=false"`
  109. SQLLitePath string `env:"SQL_LITE_PATH,default=/porter/porter.db"`
  110. }
  111. // RedisConf is the redis config required for the provisioner container
  112. type RedisConf struct {
  113. // if redis should be used
  114. Enabled bool `env:"REDIS_ENABLED,default=true"`
  115. Host string `env:"REDIS_HOST,default=redis"`
  116. Port string `env:"REDIS_PORT,default=6379"`
  117. Username string `env:"REDIS_USER"`
  118. Password string `env:"REDIS_PASS"`
  119. DB int `env:"REDIS_DB,default=0"`
  120. }