main.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "github.com/porter-dev/porter/cmd/migrate/keyrotate"
  6. adapter "github.com/porter-dev/porter/internal/adapter"
  7. "github.com/porter-dev/porter/internal/config"
  8. lr "github.com/porter-dev/porter/internal/logger"
  9. "github.com/porter-dev/porter/internal/models"
  10. ints "github.com/porter-dev/porter/internal/models/integrations"
  11. "github.com/joeshaw/envdecode"
  12. )
  13. func main() {
  14. fmt.Println("running migrations...")
  15. appConf := config.FromEnv()
  16. logger := lr.NewConsole(true)
  17. db, err := adapter.New(&appConf.Db)
  18. if err != nil {
  19. logger.Fatal().Err(err).Msg("")
  20. return
  21. }
  22. err = db.AutoMigrate(
  23. &models.Project{},
  24. &models.Role{},
  25. &models.User{},
  26. &models.Release{},
  27. &models.Session{},
  28. &models.GitRepo{},
  29. &models.Registry{},
  30. &models.HelmRepo{},
  31. &models.Cluster{},
  32. &models.ClusterCandidate{},
  33. &models.ClusterResolver{},
  34. &models.Infra{},
  35. &models.GitActionConfig{},
  36. &models.Invite{},
  37. &ints.KubeIntegration{},
  38. &ints.BasicIntegration{},
  39. &ints.OIDCIntegration{},
  40. &ints.OAuthIntegration{},
  41. &ints.GCPIntegration{},
  42. &ints.AWSIntegration{},
  43. &ints.TokenCache{},
  44. &ints.ClusterTokenCache{},
  45. &ints.RegTokenCache{},
  46. &ints.HelmRepoTokenCache{},
  47. )
  48. if err != nil {
  49. panic(err)
  50. }
  51. if shouldRotate, oldKeyStr, newKeyStr := shouldKeyRotate(); shouldRotate {
  52. oldKey := [32]byte{}
  53. newKey := [32]byte{}
  54. copy(oldKey[:], []byte(oldKeyStr))
  55. copy(newKey[:], []byte(newKeyStr))
  56. err := keyrotate.Rotate(db, &oldKey, &newKey)
  57. if err != nil {
  58. panic(err)
  59. }
  60. }
  61. }
  62. type RotateConf struct {
  63. OldEncryptionKey string `env:"OLD_ENCRYPTION_KEY"`
  64. NewEncryptionKey string `env:"NEW_ENCRYPTION_KEY"`
  65. }
  66. func shouldKeyRotate() (bool, string, string) {
  67. var c RotateConf
  68. if err := envdecode.StrictDecode(&c); err != nil {
  69. log.Fatalf("Failed to decode migration conf: %s", err)
  70. return false, "", ""
  71. }
  72. return c.OldEncryptionKey != "" && c.NewEncryptionKey != "", c.OldEncryptionKey, c.NewEncryptionKey
  73. }