main.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //go:build ee
  2. // +build ee
  3. package main
  4. import (
  5. "os"
  6. "github.com/fatih/color"
  7. "github.com/porter-dev/porter/api/server/shared/config/envloader"
  8. "github.com/porter-dev/porter/internal/adapter"
  9. "github.com/porter-dev/porter/internal/notifier"
  10. "github.com/porter-dev/porter/internal/notifier/sendgrid"
  11. "github.com/porter-dev/porter/internal/oauth"
  12. "github.com/porter-dev/porter/internal/repository"
  13. "github.com/porter-dev/porter/internal/repository/credentials"
  14. pgorm "github.com/porter-dev/porter/internal/repository/gorm"
  15. "github.com/spf13/cobra"
  16. "golang.org/x/oauth2"
  17. "gorm.io/gorm"
  18. "github.com/porter-dev/porter/ee/integrations/vault"
  19. lr "github.com/porter-dev/porter/pkg/logger"
  20. )
  21. var db *gorm.DB
  22. var repo repository.Repository
  23. var doConf *oauth2.Config
  24. var userNotifier notifier.UserNotifier
  25. var envName string
  26. var notifyEmail string
  27. func main() {
  28. notifyEmail = os.Getenv("NOTIFY_EMAIL")
  29. // initialize the database
  30. logger := lr.NewConsole(true)
  31. envConf, err := envloader.FromEnv()
  32. if err != nil {
  33. logger.Fatal().Err(err).Msg("could not load env conf")
  34. return
  35. }
  36. db, err = adapter.New(envConf.DBConf)
  37. if err != nil {
  38. logger.Fatal().Err(err).Msg("could not connect to the database")
  39. return
  40. }
  41. var key [32]byte
  42. for i, b := range []byte(envConf.DBConf.EncryptionKey) {
  43. key[i] = b
  44. }
  45. var credBackend credentials.CredentialStorage
  46. if envConf.DBConf.VaultAPIKey != "" && envConf.DBConf.VaultServerURL != "" && envConf.DBConf.VaultPrefix != "" {
  47. credBackend = vault.NewClient(
  48. envConf.DBConf.VaultServerURL,
  49. envConf.DBConf.VaultAPIKey,
  50. envConf.DBConf.VaultPrefix,
  51. )
  52. }
  53. repo = pgorm.NewRepository(db, &key, credBackend)
  54. if envConf.ServerConf.DOClientID != "" && envConf.ServerConf.DOClientSecret != "" {
  55. doConf = oauth.NewDigitalOceanClient(&oauth.Config{
  56. ClientID: envConf.ServerConf.DOClientID,
  57. ClientSecret: envConf.ServerConf.DOClientSecret,
  58. Scopes: []string{"read", "write"},
  59. BaseURL: envConf.ServerConf.ServerURL,
  60. })
  61. }
  62. userNotifier = &notifier.EmptyUserNotifier{}
  63. if envConf.ServerConf.SendgridAPIKey != "" && envConf.ServerConf.SendgridSenderEmail != "" {
  64. userNotifier = sendgrid.NewUserNotifier(&sendgrid.Client{
  65. APIKey: envConf.ServerConf.SendgridAPIKey,
  66. SenderEmail: envConf.ServerConf.SendgridSenderEmail,
  67. })
  68. }
  69. envName = envConf.ServerConf.InstanceName
  70. if envName == "" {
  71. envName = "test"
  72. }
  73. // call the admin CLI command with the database connection
  74. if err := adminCmd.Execute(); err != nil {
  75. color.New(color.FgRed).Println(err)
  76. os.Exit(1)
  77. }
  78. }
  79. // adminCmd represents the base command when called without any subcommands
  80. var adminCmd = &cobra.Command{
  81. Use: "admin",
  82. Short: "Admin command-line tool for managing a Porter instance.",
  83. }