import React from 'react'; import { Button, Center, Flex, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, useDisclosure, Text, useToast, Input, } from '@chakra-ui/react'; import { useClient } from 'urql'; import { FaSave } from 'react-icons/fa'; import { ECDSAEncryptionType, HMACEncryptionType, RSAEncryptionType, SelectInputType, TextAreaInputType, } from '../constants'; import InputField from './InputField'; import { GenerateKeys, UpdateEnvVariables } from '../graphql/mutation'; interface propTypes { jwtType: string; getData: Function; } interface stateVarTypes { JWT_TYPE: string; JWT_SECRET: string; JWT_PRIVATE_KEY: string; JWT_PUBLIC_KEY: string; } const initState: stateVarTypes = { JWT_TYPE: '', JWT_SECRET: '', JWT_PRIVATE_KEY: '', JWT_PUBLIC_KEY: '', }; const GenerateKeysModal = ({ jwtType, getData }: propTypes) => { const client = useClient(); const toast = useToast(); const { isOpen, onOpen, onClose } = useDisclosure(); const [stateVariables, setStateVariables] = React.useState({ ...initState, }); React.useEffect(() => { if (isOpen) { setStateVariables({ ...initState, JWT_TYPE: jwtType }); } }, [isOpen]); const fetchKeys = async () => { const res = await client .mutation(GenerateKeys, { params: { type: stateVariables.JWT_TYPE } }) .toPromise(); if (res?.error) { toast({ title: 'Error occurred generating jwt keys', isClosable: true, status: 'error', position: 'bottom-right', }); closeHandler(); } else { setStateVariables({ ...stateVariables, JWT_SECRET: res?.data?._generate_jwt_keys?.secret || '', JWT_PRIVATE_KEY: res?.data?._generate_jwt_keys?.private_key || '', JWT_PUBLIC_KEY: res?.data?._generate_jwt_keys?.public_key || '', }); } }; React.useEffect(() => { if (isOpen && stateVariables.JWT_TYPE) { fetchKeys(); } }, [stateVariables.JWT_TYPE]); const saveHandler = async () => { const res = await client .mutation(UpdateEnvVariables, { params: { ...stateVariables } }) .toPromise(); if (res.error) { toast({ title: 'Error occurred setting jwt keys', isClosable: true, status: 'error', position: 'bottom-right', }); return; } toast({ title: 'JWT keys updated successfully', isClosable: true, status: 'success', position: 'bottom-right', }); closeHandler(); }; const closeHandler = () => { setStateVariables({ ...initState }); onClose(); getData(); }; return ( <> New JWT keys JWT Type: {Object.values(HMACEncryptionType).includes( stateVariables.JWT_TYPE ) ? ( JWT Secret
setStateVariables({ ...stateVariables, JWT_SECRET: event.target.value, }) } />
) : ( <> Public Key
Private Key
)}
); }; export default GenerateKeysModal;