Import source: cshare-app/src/pages/SecurityPage
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
import { ShieldIcon, LinkIcon, ClockIcon, EyeIcon } from '../components/Icons';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
const PRACTICES = [
|
||||
{
|
||||
icon: <ShieldIcon size={22} />,
|
||||
title: 'Encryption at rest',
|
||||
desc: 'All files are encrypted with AES-256 before being written to disk. Encryption keys are managed separately from the data they protect and rotated on a regular schedule.',
|
||||
},
|
||||
{
|
||||
icon: <LinkIcon size={22} />,
|
||||
title: 'Encryption in transit',
|
||||
desc: 'All connections to CShare use TLS 1.3. We do not support TLS 1.0 or 1.1. HTTPS is enforced on every endpoint — there is no HTTP fallback.',
|
||||
},
|
||||
{
|
||||
icon: <ClockIcon size={22} />,
|
||||
title: 'Automatic deletion',
|
||||
desc: 'Files are permanently deleted at link expiry — not marked as deleted, actually removed from storage. Backups are purged within 7 days. No recovery path exists after deletion.',
|
||||
},
|
||||
{
|
||||
icon: <EyeIcon size={22} />,
|
||||
title: 'Access control',
|
||||
desc: 'Share links use cryptographically random identifiers. Only someone with the exact link can access a file. On Pro plans, optional password protection adds a second factor.',
|
||||
},
|
||||
];
|
||||
|
||||
export default function SecurityPage() {
|
||||
const navigate = useNavigate();
|
||||
|
||||
return (
|
||||
<div className="page-enter" style={{ minHeight: '100vh' }}>
|
||||
<section style={{ padding: 'clamp(64px, 10vh, 100px) 24px 48px', maxWidth: '760px', margin: '0 auto' }}>
|
||||
<div style={{ display: 'inline-flex', alignItems: 'center', gap: '8px', marginBottom: '20px' }}>
|
||||
<span style={{ color: 'var(--accent)', fontFamily: 'var(--font-heading)', fontWeight: 700 }}>//</span>
|
||||
<span style={{ color: 'var(--text-muted)', fontFamily: 'var(--font-heading)', fontWeight: 600, fontSize: '0.75rem', letterSpacing: '0.12em', textTransform: 'uppercase' }}>Security</span>
|
||||
</div>
|
||||
<h1 className="heading-lg" style={{ marginBottom: '20px' }}>Security at CShare</h1>
|
||||
<p style={{ color: 'var(--text-secondary)', fontSize: '1.0625rem', lineHeight: 1.8 }}>
|
||||
We are a file-sharing service. Security is not a feature — it is the foundation. Here is exactly what we do to protect your files.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section style={{ padding: '0 24px 56px', maxWidth: '1080px', margin: '0 auto' }}>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))', gap: '20px' }}>
|
||||
{PRACTICES.map((p) => (
|
||||
<div key={p.title} className="card" style={{ padding: '28px' }}>
|
||||
<div style={{ width: '44px', height: '44px', borderRadius: 'var(--radius-md)', background: 'var(--accent-muted)', border: '1px solid var(--accent-border)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'var(--accent)', marginBottom: '16px' }}>
|
||||
{p.icon}
|
||||
</div>
|
||||
<h3 className="heading-sm" style={{ marginBottom: '10px' }}>{p.title}</h3>
|
||||
<p style={{ color: 'var(--text-secondary)', fontSize: '0.9375rem', lineHeight: 1.7 }}>{p.desc}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section style={{ padding: '0 24px 56px', maxWidth: '760px', margin: '0 auto' }}>
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '24px' }}>
|
||||
<span style={{ color: 'var(--accent)', fontFamily: 'var(--font-heading)', fontWeight: 700 }}>//</span>
|
||||
<span style={{ color: 'var(--text-muted)', fontFamily: 'var(--font-heading)', fontWeight: 600, fontSize: '0.75rem', letterSpacing: '0.12em', textTransform: 'uppercase' }}>Infrastructure</span>
|
||||
</div>
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>
|
||||
{[
|
||||
['Storage location', 'EU-based object storage with redundant copies across availability zones.'],
|
||||
['Backup policy', 'Encrypted backups retained for 7 days. Backups are purged within 7 days of file deletion.'],
|
||||
['DDoS protection', 'Edge-level DDoS mitigation on all endpoints.'],
|
||||
['Dependency scanning', 'All dependencies are scanned for known vulnerabilities on every build.'],
|
||||
['Access logging', 'All admin access to production infrastructure is logged and reviewed.'],
|
||||
].map(([label, value]) => (
|
||||
<div key={label} style={{ display: 'flex', gap: '20px', padding: '16px 20px', background: 'var(--bg-elevated)', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-md)' }}>
|
||||
<span style={{ fontFamily: 'var(--font-heading)', fontWeight: 600, fontSize: '0.875rem', minWidth: '180px', flexShrink: 0 }}>{label}</span>
|
||||
<span style={{ color: 'var(--text-secondary)', fontSize: '0.875rem', lineHeight: 1.6 }}>{value}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section style={{ padding: '0 24px 80px', maxWidth: '760px', margin: '0 auto' }}>
|
||||
<div className="card" style={{ padding: '32px', border: '1px solid var(--accent-border)', position: 'relative', overflow: 'hidden' }}>
|
||||
<div style={{ position: 'absolute', top: 0, left: 0, right: 0, height: '2px', background: 'linear-gradient(90deg, transparent, var(--accent), transparent)' }} />
|
||||
<h3 className="heading-sm" style={{ marginBottom: '12px' }}>Found a vulnerability?</h3>
|
||||
<p style={{ color: 'var(--text-secondary)', fontSize: '0.9375rem', lineHeight: 1.7, marginBottom: '20px' }}>
|
||||
We take security reports seriously. Please disclose responsibly by emailing <strong style={{ color: 'var(--accent)' }}>security@cshare.app</strong>. We will acknowledge within 24 hours and work with you on a fix.
|
||||
</p>
|
||||
<button className="btn btn-secondary" onClick={() => navigate('/contact')}>
|
||||
Report a vulnerability
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user