All checks were successful
Dev Deployment (Zero Downtime) / deploy-dev (push) Successful in 13m33s
Build Optimizations: - Enable Docker BuildKit cache for faster builds (7min → 3-4min) - Add .dockerignore to reduce build context - Optimize Dockerfile with better layer caching - Run linting and tests in parallel - Skip blocking checks for dev deployments Rollback Functionality: - Add rollback.sh script to restore previous versions - Supports both production and dev environments - Automatic health checks after rollback Security Improvements: - Add authentication to n8n/generate-image endpoint - Add rate limiting to all n8n endpoints (10-30 req/min) - Create email obfuscation utilities - Add ObfuscatedEmail React component - Document security best practices Files: - .dockerignore - Faster builds - scripts/rollback.sh - Rollback functionality - lib/email-obfuscate.ts - Email obfuscation utilities - components/ObfuscatedEmail.tsx - React component - SECURITY_IMPROVEMENTS.md - Security documentation
32 lines
754 B
TypeScript
32 lines
754 B
TypeScript
'use client';
|
|
|
|
import React from 'react';
|
|
import { obfuscateEmail, deobfuscateEmail } from '@/lib/email-obfuscate';
|
|
|
|
interface ObfuscatedEmailProps {
|
|
email: string;
|
|
children?: React.ReactNode;
|
|
className?: string;
|
|
}
|
|
|
|
export function ObfuscatedEmail({ email, children, className }: ObfuscatedEmailProps) {
|
|
const obfuscated = obfuscateEmail(email);
|
|
|
|
return (
|
|
<a
|
|
href="#"
|
|
data-email={obfuscated}
|
|
className={className || "obfuscated-email"}
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
const link = e.currentTarget;
|
|
const decoded = deobfuscateEmail(obfuscated);
|
|
link.href = `mailto:${decoded}`;
|
|
window.location.href = link.href;
|
|
}}
|
|
>
|
|
{children || email}
|
|
</a>
|
|
);
|
|
}
|