import React from 'react'; import { Box, Divider, Flex, Stack, Center, Text, Button, Input, InputGroup, InputRightElement, } from '@chakra-ui/react'; import { useClient } from 'urql'; import { FaGoogle, FaGithub, FaFacebookF, FaUndo, FaSave, FaRegEyeSlash, FaRegEye, } from 'react-icons/fa'; import _ from 'lodash'; import InputField from '../components/InputField'; import { EnvVariablesQuery } from '../graphql/queries'; import { ArrayInputType, SelectInputType, HiddenInputType, TextInputType, TextAreaInputType, SwitchInputType, } from '../constants'; import { UpdateEnvVariables } from '../graphql/mutation'; import { getObjectDiff } from '../utils'; interface envVarTypes { GOOGLE_CLIENT_ID: string; GOOGLE_CLIENT_SECRET: string; GITHUB_CLIENT_ID: string; GITHUB_CLIENT_SECRET: string; FACEBOOK_CLIENT_ID: string; FACEBOOK_CLIENT_SECRET: string; ROLES: [string] | []; DEFAULT_ROLES: [string] | []; PROTECTED_ROLES: [string] | []; JWT_TYPE: string; JWT_SECRET: string; JWT_ROLE_CLAIM: string; REDIS_URL: string; SMTP_HOST: string; SMTP_PORT: string; SMTP_USERNAME: string; SMTP_PASSWORD: string; SENDER_EMAIL: string; ALLOWED_ORIGINS: [string] | []; ORGANIZATION_NAME: string; ORGANIZATION_LOGO: string; CUSTOM_ACCESS_TOKEN_SCRIPT: string; ADMIN_SECRET: string; DISABLE_LOGIN_PAGE: boolean; DISABLE_MAGIC_LINK_LOGIN: boolean; DISABLE_EMAIL_VERIFICATION: boolean; DISABLE_BASIC_AUTHENTICATION: boolean; OLD_ADMIN_SECRET: string; DATABASE_NAME: string; DATABASE_TYPE: string; DATABASE_URL: string; } export default function Environment() { const client = useClient(); const [adminSecret, setAdminSecret] = React.useState< Record >({ value: '', disableInputField: true, }); const [loading, setLoading] = React.useState(false); const [envVariables, setEnvVariables] = React.useState({ GOOGLE_CLIENT_ID: '', GOOGLE_CLIENT_SECRET: '', GITHUB_CLIENT_ID: '', GITHUB_CLIENT_SECRET: '', FACEBOOK_CLIENT_ID: '', FACEBOOK_CLIENT_SECRET: '', ROLES: [], DEFAULT_ROLES: [], PROTECTED_ROLES: [], JWT_TYPE: '', JWT_SECRET: '', JWT_ROLE_CLAIM: '', REDIS_URL: '', SMTP_HOST: '', SMTP_PORT: '', SMTP_USERNAME: '', SMTP_PASSWORD: '', SENDER_EMAIL: '', ALLOWED_ORIGINS: [], ORGANIZATION_NAME: '', ORGANIZATION_LOGO: '', CUSTOM_ACCESS_TOKEN_SCRIPT: '', ADMIN_SECRET: '', DISABLE_LOGIN_PAGE: false, DISABLE_MAGIC_LINK_LOGIN: false, DISABLE_EMAIL_VERIFICATION: false, DISABLE_BASIC_AUTHENTICATION: false, OLD_ADMIN_SECRET: '', DATABASE_NAME: '', DATABASE_TYPE: '', DATABASE_URL: '', }); const [oldEnvVariables, setOldEnvVariables] = React.useState({ GOOGLE_CLIENT_ID: '', GOOGLE_CLIENT_SECRET: '', GITHUB_CLIENT_ID: '', GITHUB_CLIENT_SECRET: '', FACEBOOK_CLIENT_ID: '', FACEBOOK_CLIENT_SECRET: '', ROLES: [], DEFAULT_ROLES: [], PROTECTED_ROLES: [], JWT_TYPE: '', JWT_SECRET: '', JWT_ROLE_CLAIM: '', REDIS_URL: '', SMTP_HOST: '', SMTP_PORT: '', SMTP_USERNAME: '', SMTP_PASSWORD: '', SENDER_EMAIL: '', ALLOWED_ORIGINS: [], ORGANIZATION_NAME: '', ORGANIZATION_LOGO: '', CUSTOM_ACCESS_TOKEN_SCRIPT: '', ADMIN_SECRET: '', DISABLE_LOGIN_PAGE: false, DISABLE_MAGIC_LINK_LOGIN: false, DISABLE_EMAIL_VERIFICATION: false, DISABLE_BASIC_AUTHENTICATION: false, OLD_ADMIN_SECRET: '', DATABASE_NAME: '', DATABASE_TYPE: '', DATABASE_URL: '', }); const [fieldVisibility, setFieldVisibility] = React.useState< Record >({ GOOGLE_CLIENT_SECRET: false, GITHUB_CLIENT_SECRET: false, FACEBOOK_CLIENT_SECRET: false, JWT_SECRET: false, SMTP_PASSWORD: false, ADMIN_SECRET: false, OLD_ADMIN_SECRET: false, }); const updateHandler = async () => { setLoading(true); const { data: { _env: envData }, } = await client.query(EnvVariablesQuery).toPromise(); if (envData) { setEnvVariables({ ...envVariables, ...envData, ADMIN_SECRET: '', OLD_ADMIN_SECRET: envData.ADMIN_SECRET, }); setOldEnvVariables({ ...envVariables, ...envData, ADMIN_SECRET: '', OLD_ADMIN_SECRET: envData.ADMIN_SECRET, }); } setAdminSecret({ value: '', disableInputField: true, }); setLoading(false); }; React.useEffect(() => { updateHandler(); }, []); const validateAdminSecretHandler = (event: any) => { if (envVariables.OLD_ADMIN_SECRET === event.target.value) { setAdminSecret({ ...adminSecret, value: event.target.value, disableInputField: false, }); } else { setAdminSecret({ ...adminSecret, value: event.target.value, disableInputField: true, }); } if (envVariables.ADMIN_SECRET !== '') { setEnvVariables({ ...envVariables, ADMIN_SECRET: '' }); } }; const saveHandler = async () => { setLoading(true); const diff = getObjectDiff(envVariables, oldEnvVariables); const updatedEnvVariables = diff.reduce( (acc: any, property: string) => ({ ...acc, // @ts-ignore [property]: envVariables[property], }), {} ); if (diff.includes(HiddenInputType.ADMIN_SECRET)) { updatedEnvVariables[HiddenInputType.OLD_ADMIN_SECRET] = // @ts-ignore envVariables[HiddenInputType.OLD_ADMIN_SECRET]; } const res = await client .mutation(UpdateEnvVariables, { params: envVariables }) .toPromise(); console.log('res ==>> ', res); updateHandler(); }; return ( Social Media Logins
Roles Roles:
Default Roles:
Protected Roles:
JWT Configurations JWT Type:
More JWT types will be enabled in upcoming releases.
JWT Secret
JWT Role Claim:
Session Storage Redis URL:
Email Configurations SMTP Host:
Port:
Username:
Password:
From Email:
White Listing Allowed Origins:
Organization Information Organization Name:
Organization Logo:
Custom Scripts
Disable Features Login Page: Magic Login Link: Email Verification: Basic Authentication: Danger DataBase Name:
DataBase Type:
DataBase URL:
Old Admin Secret:
validateAdminSecretHandler(event)} type={ !fieldVisibility[HiddenInputType.OLD_ADMIN_SECRET] ? 'password' : 'text' } /> {fieldVisibility[HiddenInputType.OLD_ADMIN_SECRET] ? (
setFieldVisibility({ ...fieldVisibility, [HiddenInputType.OLD_ADMIN_SECRET]: false, }) } >
) : (
setFieldVisibility({ ...fieldVisibility, [HiddenInputType.OLD_ADMIN_SECRET]: true, }) } >
)} } />
New Admin Secret:
); }