Browse Source

add preview env setup service

Mohammed Nafees 3 years ago
parent
commit
5f04423bcc
1 changed files with 116 additions and 0 deletions
  1. 116 0
      services/preview_env_setup_job/main.go

+ 116 - 0
services/preview_env_setup_job/main.go

@@ -0,0 +1,116 @@
+package main
+
+import (
+	"encoding/json"
+	"log"
+	"time"
+
+	"github.com/joeshaw/envdecode"
+	"github.com/porter-dev/porter/api/server/shared/config/env"
+	"github.com/porter-dev/porter/api/types"
+	"github.com/porter-dev/porter/internal/adapter"
+	"github.com/porter-dev/porter/internal/models"
+
+	rcreds "github.com/porter-dev/porter/internal/repository/credentials"
+	"github.com/porter-dev/porter/internal/repository/gorm"
+	pgorm "github.com/porter-dev/porter/internal/repository/gorm"
+)
+
+func main() {
+	conf := env.DBConf{}
+
+	if err := envdecode.StrictDecode(&conf); err != nil {
+		log.Fatalf("Failed to decode DB conf: %v", err)
+	}
+
+	db, err := adapter.New(&conf)
+
+	if err != nil {
+		log.Fatalf("Failed to create DB adapter: %v", err)
+	}
+
+	err = gorm.AutoMigrate(db, false)
+
+	if err != nil {
+		log.Fatalf("Failed to auto migrate DB: %v", err)
+	}
+
+	var credBackend rcreds.CredentialStorage
+
+	var key [32]byte
+
+	for i, b := range []byte(conf.EncryptionKey) {
+		key[i] = b
+	}
+
+	repo := pgorm.NewRepository(db, &key, credBackend)
+
+	log.Println("Creating test user")
+
+	user, err := repo.User().CreateUser(&models.User{
+		Email:         "test@test.com",
+		Password:      "test",
+		EmailVerified: true,
+	})
+
+	if err != nil {
+		log.Fatalf("Failed to create test user: %v", err)
+	}
+
+	log.Println("Creating test project")
+
+	proj, err := repo.Project().CreateProject(&models.Project{
+		Name:               "test-project",
+		PreviewEnvsEnabled: true,
+		APITokensEnabled:   true,
+	})
+
+	if err != nil {
+		log.Fatalf("Failed to create test project: %v", err)
+	}
+
+	log.Println("Adding test user as admin to test project")
+
+	_, err = repo.Project().CreateProjectRole(proj, &models.Role{
+		Role: types.Role{
+			Kind:      types.RoleAdmin,
+			UserID:    user.ID,
+			ProjectID: proj.ID,
+		},
+	})
+
+	if err != nil {
+		log.Fatalf("Failed to add test user as admin to test project: %v", err)
+	}
+
+	policyBytes, err := json.Marshal(types.AdminPolicy)
+
+	if err != nil {
+		log.Fatalf("Failed to JSON marshal admin policy: %v", err)
+	}
+
+	policy, err := repo.Policy().CreatePolicy(&models.Policy{
+		UniqueID:        "test-user-admin-policy",
+		ProjectID:       proj.ID,
+		CreatedByUserID: user.ID,
+		Name:            "Admin Policy",
+		PolicyBytes:     policyBytes,
+	})
+
+	if err != nil {
+		log.Fatalf("Failed to create admin policy: %v", err)
+	}
+
+	expiry := time.Now().Add(7 * 24 * time.Hour)
+
+	apiToken, err := repo.APIToken().CreateAPIToken(&models.APIToken{
+		UniqueID:        "test-user-admin-token",
+		ProjectID:       proj.ID,
+		CreatedByUserID: user.ID,
+		Expiry:          &expiry,
+		PolicyUID:       policy.UniqueID,
+		PolicyName:      policy.Name,
+		Name:            "Admin Token",
+		SecretKey:       []byte("volume-miss-king-master"),
+	})
+}