mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 14:27:59 +00:00
Merge remote-tracking branch 'origin' into ldap
This commit is contained in:
@@ -59,7 +59,8 @@ var exportCmd = &cobra.Command{
|
|||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ var getCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,8 @@ var runCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -39,10 +38,10 @@ var secretsCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if infisicalToken == "" {
|
if err != nil {
|
||||||
infisicalToken = os.Getenv(util.INFISICAL_TOKEN_NAME)
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -399,7 +398,8 @@ func getSecretsByNames(cmd *cobra.Command, args []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
@@ -466,7 +466,8 @@ func generateExampleEnv(cmd *cobra.Command, args []string) {
|
|||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
infisicalToken, err := cmd.Flags().GetString("token")
|
infisicalToken, err := util.GetInfisicalServiceToken(cmd)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.HandleError(err, "Unable to parse flag")
|
util.HandleError(err, "Unable to parse flag")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Infisical/infisical-merge/packages/models"
|
"github.com/Infisical/infisical-merge/packages/models"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DecodedSymmetricEncryptionDetails = struct {
|
type DecodedSymmetricEncryptionDetails = struct {
|
||||||
@@ -63,6 +64,20 @@ func IsSecretTypeValid(s string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetInfisicalServiceToken(cmd *cobra.Command) (serviceToken string, err error) {
|
||||||
|
infisicalToken, err := cmd.Flags().GetString("token")
|
||||||
|
|
||||||
|
if infisicalToken == "" {
|
||||||
|
infisicalToken = os.Getenv(INFISICAL_TOKEN_NAME)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return infisicalToken, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Checks if the passed in email already exists in the users slice
|
// Checks if the passed in email already exists in the users slice
|
||||||
func ConfigContainsEmail(users []models.LoggedInUser, email string) bool {
|
func ConfigContainsEmail(users []models.LoggedInUser, email string) bool {
|
||||||
for _, value := range users {
|
for _, value := range users {
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { useCallback, useState } from "react";
|
import { useCallback, useEffect, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { subject } from "@casl/ability";
|
import { subject } from "@casl/ability";
|
||||||
import { faArrowDown, faArrowUp } from "@fortawesome/free-solid-svg-icons";
|
import { faArrowDown, faArrowUp } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
|
import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider";
|
||||||
import NavHeader from "@app/components/navigation/NavHeader";
|
import NavHeader from "@app/components/navigation/NavHeader";
|
||||||
import { PermissionDeniedBanner } from "@app/components/permissions";
|
import { PermissionDeniedBanner } from "@app/components/permissions";
|
||||||
import { ContentLoader } from "@app/components/v2";
|
import { ContentLoader } from "@app/components/v2";
|
||||||
@@ -47,9 +48,10 @@ const LOADER_TEXT = [
|
|||||||
|
|
||||||
export const SecretMainPage = () => {
|
export const SecretMainPage = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace, isLoading: isWorkspaceLoading } = useWorkspace();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { permission } = useProjectPermission();
|
const { permission } = useProjectPermission();
|
||||||
|
const { createNotification } = useNotificationContext();
|
||||||
|
|
||||||
const [isVisible, setIsVisible] = useState(false);
|
const [isVisible, setIsVisible] = useState(false);
|
||||||
const [sortDir, setSortDir] = useState<SortDir>(SortDir.ASC);
|
const [sortDir, setSortDir] = useState<SortDir>(SortDir.ASC);
|
||||||
@@ -75,6 +77,20 @@ export const SecretMainPage = () => {
|
|||||||
ProjectPermissionSub.SecretRollback
|
ProjectPermissionSub.SecretRollback
|
||||||
);
|
);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (
|
||||||
|
!isWorkspaceLoading &&
|
||||||
|
!currentWorkspace?.environments.find((env) => env.slug === environment) &&
|
||||||
|
router.isReady
|
||||||
|
) {
|
||||||
|
router.push(`/project/${workspaceId}/secrets/overview`);
|
||||||
|
createNotification({
|
||||||
|
text: "No envronment found with given slug",
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [isWorkspaceLoading, currentWorkspace, environment, router.isReady]);
|
||||||
|
|
||||||
const { data: decryptFileKey } = useGetUserWsKey(workspaceId);
|
const { data: decryptFileKey } = useGetUserWsKey(workspaceId);
|
||||||
|
|
||||||
// fetch secrets
|
// fetch secrets
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ import { useEffect, useRef, useState } from "react";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { faCheckCircle } from "@fortawesome/free-regular-svg-icons";
|
|
||||||
import { subject } from "@casl/ability";
|
import { subject } from "@casl/ability";
|
||||||
|
import { faCheckCircle } from "@fortawesome/free-regular-svg-icons";
|
||||||
import {
|
import {
|
||||||
faAngleDown,
|
faAngleDown,
|
||||||
faArrowDown,
|
faArrowDown,
|
||||||
faArrowUp,
|
faArrowUp,
|
||||||
faFolderBlank,
|
faFolderBlank,
|
||||||
faList,
|
|
||||||
faFolderPlus,
|
faFolderPlus,
|
||||||
|
faList,
|
||||||
faMagnifyingGlass,
|
faMagnifyingGlass,
|
||||||
faPlus
|
faPlus
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
@@ -207,10 +207,10 @@ export const SecretOverviewPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleEnvSelect = (envId: string) => {
|
const handleEnvSelect = (envId: string) => {
|
||||||
if (visibleEnvs.map(env => env.id).includes(envId)) {
|
if (visibleEnvs.map((env) => env.id).includes(envId)) {
|
||||||
setVisisbleEnvs(visibleEnvs.filter(env => env.id !== envId))
|
setVisisbleEnvs(visibleEnvs.filter((env) => env.id !== envId));
|
||||||
} else {
|
} else {
|
||||||
setVisisbleEnvs(visibleEnvs.concat(userAvailableEnvs.filter(env => env.id === envId)))
|
setVisisbleEnvs(visibleEnvs.concat(userAvailableEnvs.filter((env) => env.id === envId)));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -396,7 +396,7 @@ export const SecretOverviewPage = () => {
|
|||||||
ariaLabel="Environments"
|
ariaLabel="Environments"
|
||||||
variant="plain"
|
variant="plain"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="flex justify-center items-center overflow-hidden p-0 w-11 bg-mineshaft-800 hover:bg-primary/10 hover:border-primary/60 border border-mineshaft-600 mr-2"
|
className="mr-2 flex w-11 items-center justify-center overflow-hidden border border-mineshaft-600 bg-mineshaft-800 p-0 hover:border-primary/60 hover:bg-primary/10"
|
||||||
>
|
>
|
||||||
<Tooltip content="Choose visible environments" className="mb-2">
|
<Tooltip content="Choose visible environments" className="mb-2">
|
||||||
<FontAwesomeIcon icon={faList} />
|
<FontAwesomeIcon icon={faList} />
|
||||||
@@ -408,17 +408,19 @@ export const SecretOverviewPage = () => {
|
|||||||
{userAvailableEnvs.map((avaiableEnv) => {
|
{userAvailableEnvs.map((avaiableEnv) => {
|
||||||
const { id: envId, name } = avaiableEnv;
|
const { id: envId, name } = avaiableEnv;
|
||||||
|
|
||||||
const isEnvSelected = visibleEnvs.map(env => env.id).includes(envId);
|
const isEnvSelected = visibleEnvs.map((env) => env.id).includes(envId);
|
||||||
return (
|
return (
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
onClick={() => handleEnvSelect(envId)}
|
onClick={() => handleEnvSelect(envId)}
|
||||||
key={envId}
|
key={envId}
|
||||||
icon={isEnvSelected && <FontAwesomeIcon className="text-primary" icon={faCheckCircle} />}
|
icon={
|
||||||
|
isEnvSelected && (
|
||||||
|
<FontAwesomeIcon className="text-primary" icon={faCheckCircle} />
|
||||||
|
)
|
||||||
|
}
|
||||||
iconPos="left"
|
iconPos="left"
|
||||||
>
|
>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">{name}</div>
|
||||||
{name}
|
|
||||||
</div>
|
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
Reference in New Issue
Block a user