Stirling-PDF/frontend/src/components/tools/manageSignatures/CertificateFilesSettings.tsx

95 lines
3.5 KiB
TypeScript
Raw Normal View History

2025-09-03 00:12:16 +01:00
import { Stack, Text, TextInput } from "@mantine/core";
import { useTranslation } from "react-i18next";
import { ManageSignaturesParameters } from "../../../hooks/tools/manageSignatures/useManageSignaturesParameters";
import FileUploadButton from "../../shared/FileUploadButton";
interface CertificateFilesSettingsProps {
parameters: ManageSignaturesParameters;
onParameterChange: (key: keyof ManageSignaturesParameters, value: any) => void;
disabled?: boolean;
}
const CertificateFilesSettings = ({ parameters, onParameterChange, disabled = false }: CertificateFilesSettingsProps) => {
const { t } = useTranslation();
return (
<Stack gap="md">
{/* Certificate Files based on type */}
{parameters.certType === 'PEM' && (
<Stack gap="sm">
<FileUploadButton
file={parameters.privateKeyFile}
onChange={(file) => onParameterChange('privateKeyFile', file || undefined)}
2025-09-04 16:29:05 +01:00
accept=".pem,.der,.key"
2025-09-03 00:12:16 +01:00
disabled={disabled}
2025-09-04 16:29:05 +01:00
placeholder={t('certSign.choosePrivateKey', 'Choose Private Key File')}
2025-09-03 00:12:16 +01:00
/>
{parameters.privateKeyFile && (
<FileUploadButton
file={parameters.certFile}
onChange={(file) => onParameterChange('certFile', file || undefined)}
2025-09-04 16:29:05 +01:00
accept=".pem,.der,.crt,.cer"
2025-09-03 00:12:16 +01:00
disabled={disabled}
2025-09-04 16:29:05 +01:00
placeholder={t('certSign.chooseCertificate', 'Choose Certificate File')}
2025-09-03 00:12:16 +01:00
/>
)}
</Stack>
)}
{parameters.certType === 'PKCS12' && (
<FileUploadButton
file={parameters.p12File}
onChange={(file) => onParameterChange('p12File', file || undefined)}
2025-09-04 16:29:05 +01:00
accept=".p12"
2025-09-03 00:12:16 +01:00
disabled={disabled}
2025-09-04 16:29:05 +01:00
placeholder={t('certSign.chooseP12File', 'Choose PKCS12 File')}
/>
)}
{parameters.certType === 'PFX' && (
<FileUploadButton
file={parameters.p12File}
onChange={(file) => onParameterChange('p12File', file || undefined)}
accept=".pfx"
disabled={disabled}
placeholder={t('certSign.choosePfxFile', 'Choose PFX File')}
2025-09-03 00:12:16 +01:00
/>
)}
{parameters.certType === 'JKS' && (
<FileUploadButton
file={parameters.jksFile}
onChange={(file) => onParameterChange('jksFile', file || undefined)}
accept=".jks,.keystore"
disabled={disabled}
2025-09-04 16:29:05 +01:00
placeholder={t('certSign.chooseJksFile', 'Choose JKS File')}
2025-09-03 00:12:16 +01:00
/>
)}
2025-09-05 15:49:59 +01:00
{parameters.signMode === 'AUTO' && (
2025-09-03 22:57:58 +01:00
<Text c="dimmed" size="sm">
2025-09-04 16:29:05 +01:00
{t('certSign.serverCertMessage', 'Using server certificate - no files or password required')}
2025-09-03 22:57:58 +01:00
</Text>
)}
2025-09-03 00:12:16 +01:00
{/* Password - only show when files are uploaded */}
{parameters.certType && (
(parameters.certType === 'PEM' && parameters.privateKeyFile && parameters.certFile) ||
(parameters.certType === 'PKCS12' && parameters.p12File) ||
2025-09-04 16:29:05 +01:00
(parameters.certType === 'PFX' && parameters.p12File) ||
2025-09-03 00:12:16 +01:00
(parameters.certType === 'JKS' && parameters.jksFile)
) && (
<TextInput
2025-09-04 16:29:05 +01:00
label={t('certSign.password', 'Certificate Password')}
placeholder={t('certSign.passwordOptional', 'Leave empty if no password')}
2025-09-03 00:12:16 +01:00
type="password"
value={parameters.password}
onChange={(event) => onParameterChange('password', event.currentTarget.value)}
disabled={disabled}
/>
)}
</Stack>
);
};
export default CertificateFilesSettings;