Просмотр исходного кода

Merge branch 'master' into stefan/branch-preview-name

Mohammed Nafees 3 лет назад
Родитель
Сommit
d905148b8f

+ 4 - 0
api/server/handlers/infra/forms.go

@@ -444,6 +444,10 @@ tabs:
           value: "1.21"
         - label: "1.22"
           value: "1.22"
+        - label: "1.23"
+          value: "1.23"
+        - label: "1.24"
+          value: "1.24"
     - type: number-input
       label: Minimum number of EC2 instances to create in the application autoscaling group.
       variable: min_instances

Разница между файлами не показана из-за своего большого размера
+ 1 - 14754
dashboard/package-lock.json


+ 12 - 11
dashboard/src/main/home/Home.tsx

@@ -12,7 +12,6 @@ import ConfirmOverlay from "components/ConfirmOverlay";
 import Loading from "components/Loading";
 import ClusterDashboard from "./cluster-dashboard/ClusterDashboard";
 import Dashboard from "./dashboard/Dashboard";
-import WelcomeForm from "./WelcomeForm";
 import Integrations from "./integrations/Integrations";
 import LaunchWrapper from "./launch/LaunchWrapper";
 
@@ -435,16 +434,18 @@ class Home extends Component<PropsType, StateType> {
                 return <Onboarding />;
               }}
             />
-            <Route
-              path="/infrastructure"
-              render={() => {
-                return (
-                  <DashboardWrapper>
-                    <InfrastructureRouter />
-                  </DashboardWrapper>
-                );
-              }}
-            />
+            {this.context.user.isPorterUser ? (
+              <Route
+                path="/infrastructure"
+                render={() => {
+                  return (
+                    <DashboardWrapper>
+                      <InfrastructureRouter />
+                    </DashboardWrapper>
+                  );
+                }}
+              />
+            ) : null}
             <Route
               path="/dashboard"
               render={() => {

+ 5 - 4
dashboard/src/main/home/project-settings/ProjectSettings.tsx

@@ -65,10 +65,11 @@ class ProjectSettings extends Component<PropsType, StateType> {
     this.setState({ projectName: currentProject.name });
     const tabOptions = [];
     tabOptions.push({ value: "manage-access", label: "Manage access" });
-    tabOptions.push({
-      value: "billing",
-      label: "Billing",
-    });
+    // ? Disabled for now https://discord.com/channels/542888846271184896/1059277393031856208/1059277395913351258
+    // tabOptions.push({
+    //   value: "billing",
+    //   label: "Billing",
+    // });
 
     if (this.props.isAuthorized("settings", "", ["get", "delete"])) {
       // if (this.context?.hasBillingEnabled) {

+ 9 - 7
dashboard/src/main/home/sidebar/Sidebar.tsx

@@ -101,7 +101,7 @@ class Sidebar extends Component<PropsType, StateType> {
 
   renderProjectContents = () => {
     let { currentView } = this.props;
-    let { currentProject } = this.context;
+    let { currentProject, user } = this.context;
     if (currentProject) {
       return (
         <ScrollWrapper>
@@ -114,12 +114,14 @@ class Sidebar extends Component<PropsType, StateType> {
             <Img src={rocket} />
             Launch
           </NavButton>
-          {currentProject && currentProject.managed_infra_enabled && (
-            <NavButton path={"/infrastructure"}>
-              <i className="material-icons">build_circle</i>
-              Infrastructure
-            </NavButton>
-          )}
+          {currentProject &&
+            currentProject.managed_infra_enabled &&
+            user?.isPorterUser && (
+              <NavButton path={"/infrastructure"}>
+                <i className="material-icons">build_circle</i>
+                Infrastructure
+              </NavButton>
+            )}
           {this.props.isAuthorized("integrations", "", [
             "get",
             "create",

+ 3 - 1
dashboard/src/shared/Context.tsx

@@ -129,7 +129,9 @@ class ContextProvider extends Component<PropsType, StateType> {
     },
     user: null,
     setUser: (userId: number, email: string) => {
-      this.setState({ user: { userId, email } });
+      this.setState({
+        user: { userId, email, isPorterUser: email.endsWith("@porter.run") },
+      });
     },
     devOpsMode: true,
     setDevOpsMode: (devOpsMode: boolean) => {

+ 1 - 1
internal/repository/gorm/api_token.go

@@ -27,7 +27,7 @@ func (repo *APITokenRepository) CreateAPIToken(a *models.APIToken) (*models.APIT
 func (repo *APITokenRepository) ListAPITokensByProjectID(projectID uint) ([]*models.APIToken, error) {
 	tokens := []*models.APIToken{}
 
-	if err := repo.db.Where("project_id = ? AND NOT revoked", projectID, true).Find(&tokens).Error; err != nil {
+	if err := repo.db.Where("project_id = ? AND NOT revoked", projectID).Find(&tokens).Error; err != nil {
 		return nil, err
 	}
 

+ 31 - 0
internal/repository/gorm/api_token_test.go

@@ -0,0 +1,31 @@
+package gorm_test
+
+import (
+	"testing"
+)
+
+func TestListAPITokensByProjectID(t *testing.T) {
+	tester := &tester{
+		dbFileName: "./porter_tokens.db",
+	}
+
+	setupTestEnv(tester, t)
+	initProject(tester, t)
+	initAPITokens(tester, t)
+	initMultiUser(tester, t)
+	defer cleanup(tester, t)
+
+	projectID := tester.initProjects[0].Model.ID
+	found, err := tester.repo.APIToken().ListAPITokensByProjectID(projectID)
+	if err != nil {
+		t.Fatalf("%v\n", err)
+	}
+
+	if len(found) != 1 {
+		t.Errorf("expected to find 1 row, found %d", len(found))
+	}
+
+	if found[0].ID != 1 {
+		t.Errorf("expected found to be %d but got: %d", 1, found[0].ID)
+	}
+}

+ 20 - 0
internal/repository/gorm/helpers_test.go

@@ -41,6 +41,7 @@ type tester struct {
 	initAWSs       []*ints.AWSIntegration
 	initAllowlist  []*models.Allowlist
 	initTags       []*models.Tag
+	initAPITokens  []*models.APIToken
 }
 
 func setupTestEnv(tester *tester, t *testing.T) {
@@ -79,6 +80,7 @@ func setupTestEnv(tester *tester, t *testing.T) {
 		&models.Onboarding{},
 		&models.Allowlist{},
 		&models.Tag{},
+		&models.APIToken{},
 		&ints.KubeIntegration{},
 		&ints.BasicIntegration{},
 		&ints.OIDCIntegration{},
@@ -638,3 +640,21 @@ func initKubeEvents(tester *tester, t *testing.T) {
 
 	tester.initKubeEvents = initEvents
 }
+
+func initAPITokens(tester *tester, t *testing.T) {
+	t.Helper()
+
+	ti := time.Now().Add(10 * time.Minute)
+	tokens := &models.APIToken{
+		UniqueID:        "1",
+		ProjectID:       tester.initProjects[0].Model.ID,
+		CreatedByUserID: 1,
+		Expiry:          &ti,
+		Revoked:         false,
+		Name:            "test-key",
+	}
+
+	tester.db.Create(&tokens)
+
+	tester.initAPITokens = append(tester.initAPITokens, tokens)
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов