Files
3dp-manager/client/src/components/SecurityWarning.tsx
T
2026-03-30 01:29:04 +03:00

115 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Alert, AlertTitle, Box, Button, Collapse, IconButton, Snackbar, useMediaQuery, useTheme } from '@mui/material';
import { Close, ContentCopy } from '@mui/icons-material';
import { useState } from 'react';
const INSTALL_COMMAND = 'bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)';
export default function SecurityWarning() {
const [copied, setCopied] = useState(false);
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
const handleCopy = async () => {
try {
await navigator.clipboard.writeText(INSTALL_COMMAND);
setCopied(true);
} catch {
// Fallback для старых браузеров
const textArea = document.createElement('textarea');
textArea.value = INSTALL_COMMAND;
document.body.appendChild(textArea);
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
setCopied(true);
}
};
return (
<>
<Collapse in={true}>
<Alert
severity="warning"
variant="filled"
sx={{
borderRadius: 0,
borderBottom: '1px solid rgba(0, 0, 0, 0.1)',
}}
>
<AlertTitle sx={{ fontWeight: 'bold', mb: 1, fontSize: { xs: '1rem', sm: '1.1rem' } }}>
3DP-MANAGER работает в небезопасном режиме (HTTP)
</AlertTitle>
<Box
component="p"
sx={{
mb: 2,
fontSize: { xs: '0.875rem', sm: '0.95rem' },
lineHeight: 1.5,
}}
>
<strong>Не вводите реальные пароли от 3x-ui панели и не меняйте пароль администратора в режиме работы по HTTP!</strong>{' '}
Для безопасной работы переустановите 3DP-MANAGER с SSL-сертификатами. Все ваши настройки сохранятся.
</Box>
<Box
sx={{
display: 'flex',
alignItems: 'center',
gap: 1,
backgroundColor: 'rgba(0, 0, 0, 0.1)',
p: 1,
borderRadius: 1,
flexWrap: { xs: 'wrap', sm: 'nowrap' },
}}
>
<Box
component="code"
sx={{
flexGrow: 1,
fontSize: { xs: '0.75rem', sm: '0.85rem' },
wordBreak: 'break-all',
fontFamily: 'monospace',
minWidth: 0,
}}
>
{INSTALL_COMMAND}
</Box>
<Button
size="small"
variant="outlined"
color="inherit"
startIcon={!isMobile && <ContentCopy />}
onClick={handleCopy}
sx={{
color: 'inherit',
borderColor: 'currentColor',
whiteSpace: 'nowrap',
flexShrink: 0,
'&:hover': {
backgroundColor: 'rgba(255, 255, 255, 0.2)',
},
minWidth: { xs: 'auto', sm: '140px' },
px: { xs: 1, sm: 2 },
}}
>
{isMobile ? <ContentCopy fontSize="small" /> : 'Копировать'}
</Button>
</Box>
</Alert>
</Collapse>
<Snackbar
open={copied}
autoHideDuration={2000}
onClose={() => setCopied(false)}
message="Скопировано"
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
action={
<IconButton size="small" color="inherit" onClick={() => setCopied(false)}>
<Close fontSize="small" />
</IconButton>
}
/>
</>
);
}