main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "time"
  6. "github.com/joeshaw/envdecode"
  7. "github.com/porter-dev/porter/api/server/shared/config/env"
  8. "github.com/porter-dev/porter/api/types"
  9. "github.com/porter-dev/porter/internal/adapter"
  10. "github.com/porter-dev/porter/internal/models"
  11. "golang.org/x/crypto/bcrypt"
  12. rcreds "github.com/porter-dev/porter/internal/repository/credentials"
  13. pgorm "github.com/porter-dev/porter/internal/repository/gorm"
  14. )
  15. type EnvConf struct {
  16. env.DBConf
  17. env.ServerConf
  18. }
  19. func main() {
  20. conf := EnvConf{}
  21. if err := envdecode.StrictDecode(&conf); err != nil {
  22. log.Fatalf("Failed to decode DB conf: %v", err)
  23. }
  24. db, err := adapter.New(&conf.DBConf)
  25. if err != nil {
  26. log.Fatalf("Failed to create DB adapter: %v", err)
  27. }
  28. err = pgorm.AutoMigrate(db, false)
  29. if err != nil {
  30. log.Fatalf("Failed to auto migrate DB: %v", err)
  31. }
  32. var credBackend rcreds.CredentialStorage
  33. var key [32]byte
  34. for i, b := range []byte(conf.EncryptionKey) {
  35. key[i] = b
  36. }
  37. repo := pgorm.NewRepository(db, &key, credBackend)
  38. log.Println("Creating test user")
  39. hashedPW, err := bcrypt.GenerateFromPassword([]byte("test"), 8)
  40. if err != nil {
  41. log.Fatalf("Failed to hash password: %v", err)
  42. }
  43. user, err := repo.User().CreateUser(&models.User{
  44. Email: "test@test.com",
  45. Password: string(hashedPW),
  46. EmailVerified: true,
  47. })
  48. if err != nil {
  49. log.Fatalf("Failed to create test user: %v", err)
  50. }
  51. log.Println("Creating test project")
  52. proj, err := repo.Project().CreateProject(&models.Project{
  53. Name: "test-project",
  54. PreviewEnvsEnabled: true,
  55. APITokensEnabled: true,
  56. })
  57. if err != nil {
  58. log.Fatalf("Failed to create test project: %v", err)
  59. }
  60. log.Println("Adding test user as admin to test project")
  61. _, err = repo.Project().CreateProjectRole(proj, &models.Role{
  62. Role: types.Role{
  63. Kind: types.RoleAdmin,
  64. UserID: user.ID,
  65. ProjectID: proj.ID,
  66. },
  67. })
  68. if err != nil {
  69. log.Fatalf("Failed to add test user as admin to test project: %v", err)
  70. }
  71. policyBytes, err := json.Marshal(types.AdminPolicy)
  72. if err != nil {
  73. log.Fatalf("Failed to JSON marshal admin policy: %v", err)
  74. }
  75. policy, err := repo.Policy().CreatePolicy(&models.Policy{
  76. UniqueID: "test-user-admin-policy",
  77. ProjectID: proj.ID,
  78. CreatedByUserID: user.ID,
  79. Name: "Admin Policy",
  80. PolicyBytes: policyBytes,
  81. })
  82. if err != nil {
  83. log.Fatalf("Failed to create admin policy: %v", err)
  84. }
  85. expiry := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
  86. secretKey := "volume-miss-king-master"
  87. _, err = repo.APIToken().CreateAPIToken(&models.APIToken{
  88. UniqueID: "test-user-admin-token",
  89. ProjectID: proj.ID,
  90. CreatedByUserID: user.ID,
  91. Expiry: &expiry,
  92. PolicyUID: policy.UniqueID,
  93. PolicyName: policy.Name,
  94. Name: "Admin Token",
  95. SecretKey: []byte(secretKey),
  96. })
  97. if err != nil {
  98. log.Fatalf("Failed to create admin API token: %v", err)
  99. }
  100. log.Println("Successfully created test user, project, policy, and API token")
  101. }