2
0

main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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/repository/gorm"
  10. "github.com/joeshaw/envdecode"
  11. )
  12. func main() {
  13. fmt.Println("running migrations...")
  14. appConf := config.FromEnv()
  15. logger := lr.NewConsole(true)
  16. db, err := adapter.New(&appConf.Db)
  17. if err != nil {
  18. logger.Fatal().Err(err).Msg("")
  19. return
  20. }
  21. err = gorm.AutoMigrate(db)
  22. if err != nil {
  23. logger.Fatal().Err(err).Msg("")
  24. return
  25. }
  26. if shouldRotate, oldKeyStr, newKeyStr := shouldKeyRotate(); shouldRotate {
  27. oldKey := [32]byte{}
  28. newKey := [32]byte{}
  29. copy(oldKey[:], []byte(oldKeyStr))
  30. copy(newKey[:], []byte(newKeyStr))
  31. err := keyrotate.Rotate(db, &oldKey, &newKey)
  32. if err != nil {
  33. panic(err)
  34. }
  35. }
  36. }
  37. type RotateConf struct {
  38. // we add a dummy field to avoid empty struct issue with envdecode
  39. DummyField string `env:"ASDF,default=asdf"`
  40. OldEncryptionKey string `env:"OLD_ENCRYPTION_KEY"`
  41. NewEncryptionKey string `env:"NEW_ENCRYPTION_KEY"`
  42. }
  43. func shouldKeyRotate() (bool, string, string) {
  44. var c RotateConf
  45. if err := envdecode.StrictDecode(&c); err != nil {
  46. log.Fatalf("Failed to decode migration conf: %s", err)
  47. return false, "", ""
  48. }
  49. return c.OldEncryptionKey != "" && c.NewEncryptionKey != "", c.OldEncryptionKey, c.NewEncryptionKey
  50. }