Spaces:
Running
Running
Crie um website para agregar concursos públicos bem como estudar para esses concursos, implemente autênticação, login, definição de interesses, notificação, etc... Sites de exemplo: qconcursos.com, grancursosonline.com.br, jcconcursos.com.br. Make the website secure and resistant to web scraping. Also, add authentication using google oauth. Make the project optimized, clean and modular.Gere um website para agregar concursos públicos bem como estudar para esses concursos, implemente autênticação, login, definição de interesses, notificação, etc... Sites de exemplo: qconcursos.com, grancursosonline.com.br, jcconcursos.com.br. Now, make the website secure and resistant to web scraping. Also, add authentication using google oauth. Make the project optimized, clean and modular. Generate a final optimized complete version of the website:Crie um website para agregar concursos públicos bem como estudar para esses concursos, implemente autênticação, login, definição de interesses, notificação, etc... Sites de exemplo: qconcursos.com, grancursosonline.com.br, jcconcursos.com.br. Make the website secure and resistant to web scraping. Also, add authentication using google oauth. Make the project optimized, clean and modular.Gere um website para agregar concursos públicos bem como estudar para esses concursos, implemente autênticação, login, definição de interesses, notificação, etc... Sites de exemplo: qconcursos.com, grancursosonline.com.br, jcconcursos.com.br. Now, make the website secure and resistant to web scraping. Also, add authentication using google oauth. Make the project optimized, clean and modular. Generate a final optimized complete version of the website:jcconcursos.com.br,grancursosonline.com.br,qconcursos.com - Follow Up Deployment
Browse files- index.html +80 -2
index.html
CHANGED
|
@@ -3,10 +3,20 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 6 |
<title>ConcursoMaster - Preparação para Concursos Públicos</title>
|
| 7 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 9 |
<script src="https://accounts.google.com/gsi/client" async defer></script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
<style>
|
| 11 |
.blur-effect {
|
| 12 |
filter: blur(4px);
|
|
@@ -71,7 +81,16 @@
|
|
| 71 |
</head>
|
| 72 |
<body class="bg-gray-50 font-sans">
|
| 73 |
<!-- Anti-scraping measures -->
|
| 74 |
-
<div class="honey-pot" id="fakeContent">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
<div class="rate-limit-message" id="rateLimitMessage">
|
| 76 |
Você está fazendo muitas requisições rapidamente. Por favor, aguarde alguns segundos.
|
| 77 |
</div>
|
|
@@ -111,10 +130,25 @@
|
|
| 111 |
<a href="#" id="logoutButton" class="block px-4 py-2 text-gray-700 hover:bg-gray-100">Sair</a>
|
| 112 |
</div>
|
| 113 |
</div>
|
| 114 |
-
<div id="authSection">
|
| 115 |
<button id="loginButton" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 transition">
|
| 116 |
Entrar
|
| 117 |
</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
</div>
|
| 119 |
<button id="mobileMenuButton" class="md:hidden text-gray-700">
|
| 120 |
<i class="fas fa-bars text-xl"></i>
|
|
@@ -357,5 +391,49 @@
|
|
| 357 |
</div>
|
| 358 |
<div class="p-4">
|
| 359 |
<h3 class="font-bold mb-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
<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=jairopaiva/c" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
| 361 |
</html>
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<meta name="csrf-token" content="{{YOUR_CSRF_TOKEN}}">
|
| 7 |
<title>ConcursoMaster - Preparação para Concursos Públicos</title>
|
| 8 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 10 |
<script src="https://accounts.google.com/gsi/client" async defer></script>
|
| 11 |
+
<meta name="robots" content="noindex, nofollow">
|
| 12 |
+
<meta name="googlebot" content="noindex, nofollow">
|
| 13 |
+
<script>
|
| 14 |
+
// Anti-scraping protection
|
| 15 |
+
if (navigator.webdriver || window.callPhantom || window._phantom || window.phantom) {
|
| 16 |
+
document.body.innerHTML = '<div class="text-center p-8 text-red-600 font-bold">Acesso não autorizado detectado</div>';
|
| 17 |
+
throw new Error("Bot detected");
|
| 18 |
+
}
|
| 19 |
+
</script>
|
| 20 |
<style>
|
| 21 |
.blur-effect {
|
| 22 |
filter: blur(4px);
|
|
|
|
| 81 |
</head>
|
| 82 |
<body class="bg-gray-50 font-sans">
|
| 83 |
<!-- Anti-scraping measures -->
|
| 84 |
+
<div class="honey-pot" id="fakeContent">
|
| 85 |
+
<a href="/fake-login" style="display:none">Fake Login</a>
|
| 86 |
+
<input type="hidden" name="fake-email" value="">
|
| 87 |
+
</div>
|
| 88 |
+
<script>
|
| 89 |
+
// Honeypot trap
|
| 90 |
+
document.getElementById('fakeContent').addEventListener('focus', () => {
|
| 91 |
+
document.body.innerHTML = '<div class="text-center p-8 text-red-600 font-bold">Acesso suspeito detectado</div>';
|
| 92 |
+
});
|
| 93 |
+
</script>
|
| 94 |
<div class="rate-limit-message" id="rateLimitMessage">
|
| 95 |
Você está fazendo muitas requisições rapidamente. Por favor, aguarde alguns segundos.
|
| 96 |
</div>
|
|
|
|
| 130 |
<a href="#" id="logoutButton" class="block px-4 py-2 text-gray-700 hover:bg-gray-100">Sair</a>
|
| 131 |
</div>
|
| 132 |
</div>
|
| 133 |
+
<div id="authSection" class="flex items-center space-x-3">
|
| 134 |
<button id="loginButton" class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 transition">
|
| 135 |
Entrar
|
| 136 |
</button>
|
| 137 |
+
<div id="g_id_onload"
|
| 138 |
+
data-client_id="YOUR_GOOGLE_CLIENT_ID.apps.googleusercontent.com"
|
| 139 |
+
data-context="signin"
|
| 140 |
+
data-ux_mode="popup"
|
| 141 |
+
data-callback="handleGoogleSignIn"
|
| 142 |
+
data-auto_prompt="false">
|
| 143 |
+
</div>
|
| 144 |
+
<div class="g_id_signin"
|
| 145 |
+
data-type="standard"
|
| 146 |
+
data-shape="rectangular"
|
| 147 |
+
data-theme="filled_blue"
|
| 148 |
+
data-text="signin_with"
|
| 149 |
+
data-size="medium"
|
| 150 |
+
data-logo_alignment="left">
|
| 151 |
+
</div>
|
| 152 |
</div>
|
| 153 |
<button id="mobileMenuButton" class="md:hidden text-gray-700">
|
| 154 |
<i class="fas fa-bars text-xl"></i>
|
|
|
|
| 391 |
</div>
|
| 392 |
<div class="p-4">
|
| 393 |
<h3 class="font-bold mb-
|
| 394 |
+
<script>
|
| 395 |
+
// Rate limiting implementation
|
| 396 |
+
let lastRequestTime = 0;
|
| 397 |
+
const requestQueue = [];
|
| 398 |
+
const MAX_REQUESTS = 5;
|
| 399 |
+
const TIME_WINDOW = 10000; // 10 seconds
|
| 400 |
+
|
| 401 |
+
function checkRateLimit() {
|
| 402 |
+
const now = Date.now();
|
| 403 |
+
requestQueue.push(now);
|
| 404 |
+
|
| 405 |
+
// Remove old requests
|
| 406 |
+
while (requestQueue.length > 0 && now - requestQueue[0] > TIME_WINDOW) {
|
| 407 |
+
requestQueue.shift();
|
| 408 |
+
}
|
| 409 |
+
|
| 410 |
+
if (requestQueue.length > MAX_REQUESTS) {
|
| 411 |
+
document.getElementById('rateLimitMessage').style.display = 'block';
|
| 412 |
+
return false;
|
| 413 |
+
}
|
| 414 |
+
return true;
|
| 415 |
+
}
|
| 416 |
+
|
| 417 |
+
// Google OAuth handler
|
| 418 |
+
function handleGoogleSignIn(response) {
|
| 419 |
+
if (!checkRateLimit()) return;
|
| 420 |
+
|
| 421 |
+
// Verify Google token with your backend
|
| 422 |
+
fetch('/api/auth/google', {
|
| 423 |
+
method: 'POST',
|
| 424 |
+
headers: {
|
| 425 |
+
'Content-Type': 'application/json',
|
| 426 |
+
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
|
| 427 |
+
},
|
| 428 |
+
body: JSON.stringify({ credential: response.credential })
|
| 429 |
+
})
|
| 430 |
+
.then(response => response.json())
|
| 431 |
+
.then(data => {
|
| 432 |
+
if (data.success) {
|
| 433 |
+
window.location.reload();
|
| 434 |
+
}
|
| 435 |
+
});
|
| 436 |
+
}
|
| 437 |
+
</script>
|
| 438 |
<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=jairopaiva/c" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
| 439 |
</html>
|