added long term secret token options

This commit is contained in:
Vladyslav Matsiiako
2022-12-10 22:29:47 -05:00
parent 31d6191251
commit 52285a1f38
@@ -1,39 +1,39 @@
import { Fragment, useState } from "react"; import { Fragment, useState } from 'react';
import { useRouter } from "next/router"; import { faCheck, faCopy } from '@fortawesome/free-solid-svg-icons';
import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Dialog, Transition } from '@headlessui/react';
import { Dialog, Transition } from "@headlessui/react"; import nacl from 'tweetnacl';
import nacl from "tweetnacl";
import addServiceToken from "~/pages/api/serviceToken/addServiceToken"; import addServiceToken from '~/pages/api/serviceToken/addServiceToken';
import getLatestFileKey from "~/pages/api/workspace/getLatestFileKey"; import getLatestFileKey from '~/pages/api/workspace/getLatestFileKey';
import { envMapping } from "../../../public/data/frequentConstants"; import { envMapping } from '../../../public/data/frequentConstants';
import { import {
decryptAssymmetric, decryptAssymmetric,
encryptAssymmetric, encryptAssymmetric
} from "../../utilities/cryptography/crypto"; } from '../../utilities/cryptography/crypto';
import Button from "../buttons/Button"; import Button from '../buttons/Button';
import InputField from "../InputField"; import InputField from '../InputField';
import ListBox from "../Listbox"; import ListBox from '../Listbox';
const expiryMapping = { const expiryMapping = {
"1 day": 86400, '1 day': 86400,
"7 days": 604800, '7 days': 604800,
"1 month": 2592000, '1 month': 2592000,
'6 months': 15552000,
'12 months': 31104000
}; };
const AddServiceTokenDialog = ({ const AddServiceTokenDialog = ({
isOpen, isOpen,
closeModal, closeModal,
workspaceId, workspaceId,
workspaceName, workspaceName
}) => { }) => {
const router = useRouter(); const [serviceToken, setServiceToken] = useState('');
const [serviceToken, setServiceToken] = useState(""); const [serviceTokenName, setServiceTokenName] = useState('');
const [serviceTokenName, setServiceTokenName] = useState(""); const [serviceTokenEnv, setServiceTokenEnv] = useState('Development');
const [serviceTokenEnv, setServiceTokenEnv] = useState("Development"); const [serviceTokenExpiresIn, setServiceTokenExpiresIn] = useState('1 day');
const [serviceTokenExpiresIn, setServiceTokenExpiresIn] = useState("1 day");
const [serviceTokenCopied, setServiceTokenCopied] = useState(false); const [serviceTokenCopied, setServiceTokenCopied] = useState(false);
const generateServiceToken = async () => { const generateServiceToken = async () => {
@@ -43,7 +43,7 @@ const AddServiceTokenDialog = ({
ciphertext: latestFileKey.latestKey.encryptedKey, ciphertext: latestFileKey.latestKey.encryptedKey,
nonce: latestFileKey.latestKey.nonce, nonce: latestFileKey.latestKey.nonce,
publicKey: latestFileKey.latestKey.sender.publicKey, publicKey: latestFileKey.latestKey.sender.publicKey,
privateKey: localStorage.getItem("PRIVATE_KEY"), privateKey: localStorage.getItem('PRIVATE_KEY')
}); });
// generate new public/private key pair // generate new public/private key pair
@@ -55,7 +55,7 @@ const AddServiceTokenDialog = ({
const { ciphertext: encryptedKey, nonce } = encryptAssymmetric({ const { ciphertext: encryptedKey, nonce } = encryptAssymmetric({
plaintext: key, plaintext: key,
publicKey, publicKey,
privateKey, privateKey
}); });
let newServiceToken = await addServiceToken({ let newServiceToken = await addServiceToken({
@@ -65,16 +65,16 @@ const AddServiceTokenDialog = ({
expiresIn: expiryMapping[serviceTokenExpiresIn], expiresIn: expiryMapping[serviceTokenExpiresIn],
publicKey, publicKey,
encryptedKey, encryptedKey,
nonce, nonce
}); });
const serviceToken = newServiceToken + "," + privateKey; const serviceToken = newServiceToken + ',' + privateKey;
setServiceToken(serviceToken); setServiceToken(serviceToken);
}; };
function copyToClipboard() { function copyToClipboard() {
// Get the text field // Get the text field
var copyText = document.getElementById("serviceToken"); var copyText = document.getElementById('serviceToken');
// Select the text field // Select the text field
copyText.select(); copyText.select();
@@ -91,8 +91,8 @@ const AddServiceTokenDialog = ({
const closeAddServiceTokenModal = () => { const closeAddServiceTokenModal = () => {
closeModal(); closeModal();
setServiceTokenName(""); setServiceTokenName('');
setServiceToken(""); setServiceToken('');
}; };
return ( return (
@@ -122,7 +122,7 @@ const AddServiceTokenDialog = ({
leaveFrom="opacity-100 scale-100" leaveFrom="opacity-100 scale-100"
leaveTo="opacity-0 scale-95" leaveTo="opacity-0 scale-95"
> >
{serviceToken == "" ? ( {serviceToken == '' ? (
<Dialog.Panel className="w-full max-w-md transform rounded-md bg-bunker-800 border border-gray-700 p-6 text-left align-middle shadow-xl transition-all"> <Dialog.Panel className="w-full max-w-md transform rounded-md bg-bunker-800 border border-gray-700 p-6 text-left align-middle shadow-xl transition-all">
<Dialog.Title <Dialog.Title
as="h3" as="h3"
@@ -155,12 +155,12 @@ const AddServiceTokenDialog = ({
selected={serviceTokenEnv} selected={serviceTokenEnv}
onChange={setServiceTokenEnv} onChange={setServiceTokenEnv}
data={[ data={[
"Development", 'Development',
"Staging", 'Staging',
"Production", 'Production',
"Testing", 'Testing'
]} ]}
width="full" isFull={true}
text="Environment: " text="Environment: "
/> />
</div> </div>
@@ -168,8 +168,14 @@ const AddServiceTokenDialog = ({
<ListBox <ListBox
selected={serviceTokenExpiresIn} selected={serviceTokenExpiresIn}
onChange={setServiceTokenExpiresIn} onChange={setServiceTokenExpiresIn}
data={["1 day", "7 days", "1 month"]} data={[
width="full" '1 day',
'7 days',
'1 month',
'6 months',
'12 months'
]}
isFull={true}
text="Expires in: " text="Expires in: "
/> />
</div> </div>
@@ -181,7 +187,7 @@ const AddServiceTokenDialog = ({
text="Add Service Token" text="Add Service Token"
textDisabled="Add Service Token" textDisabled="Add Service Token"
size="md" size="md"
active={serviceTokenName == "" ? false : true} active={serviceTokenName == '' ? false : true}
/> />
</div> </div>
</div> </div>