Spaces:
Runtime error
Runtime error
Mark-Lasfar commited on
Commit ·
be59b4c
1
Parent(s): f50c125
Update authorize for google & github
Browse files- templates/login.html +47 -16
templates/login.html
CHANGED
|
@@ -104,12 +104,12 @@
|
|
| 104 |
</button>
|
| 105 |
</form>
|
| 106 |
<div class="flex justify-center gap-4 mt-4 flex-wrap">
|
| 107 |
-
<
|
| 108 |
Login with Google <i class="bx bxl-google ml-2"></i>
|
| 109 |
-
</
|
| 110 |
-
<
|
| 111 |
Login with GitHub <i class="bx bxl-github ml-2"></i>
|
| 112 |
-
</
|
| 113 |
</div>
|
| 114 |
<p class="mt-4">Don't have an account? <a href="/register" class="text-emerald-300 hover:underline">Register</a></p>
|
| 115 |
<p id="errorMsg" class="text-red-500 mt-4 hidden"></p>
|
|
@@ -194,8 +194,6 @@
|
|
| 194 |
const loginBtn = document.getElementById('loginBtn');
|
| 195 |
const spinner = document.getElementById('spinner');
|
| 196 |
const errorMsg = document.getElementById('errorMsg');
|
| 197 |
-
|
| 198 |
-
// Handle email/password login
|
| 199 |
loginForm.addEventListener('submit', async (e) => {
|
| 200 |
e.preventDefault();
|
| 201 |
spinner.classList.remove('hidden');
|
|
@@ -218,27 +216,60 @@
|
|
| 218 |
spinner.classList.add('hidden');
|
| 219 |
errorMsg.textContent = 'An error occurred. Please try again.';
|
| 220 |
errorMsg.classList.remove('hidden');
|
| 221 |
-
console.error('Error during login:', error);
|
| 222 |
}
|
| 223 |
});
|
| 224 |
-
|
| 225 |
-
// Handle card details toggle
|
| 226 |
function showCardDetails(cardId) {
|
| 227 |
document.getElementById(`${cardId}-details`).classList.remove('hidden');
|
| 228 |
}
|
| 229 |
-
|
| 230 |
function closeCardDetails(cardId) {
|
| 231 |
document.getElementById(`${cardId}-details`).classList.add('hidden');
|
| 232 |
}
|
| 233 |
-
|
| 234 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
if ('serviceWorker' in navigator) {
|
| 236 |
navigator.serviceWorker.register('/static/js/sw.js')
|
| 237 |
-
.then(
|
| 238 |
-
|
|
|
|
|
|
|
|
|
|
| 239 |
}
|
| 240 |
-
|
| 241 |
-
// Handle PWA install prompt
|
| 242 |
let deferredPrompt;
|
| 243 |
window.addEventListener('beforeinstallprompt', (e) => {
|
| 244 |
e.preventDefault();
|
|
|
|
| 104 |
</button>
|
| 105 |
</form>
|
| 106 |
<div class="flex justify-center gap-4 mt-4 flex-wrap">
|
| 107 |
+
<button id="googleLoginBtn" class="inline-flex items-center bg-gradient-to-r from-white to-gray-200 text-gray-800 px-6 py-3 rounded-full font-semibold hover:scale-105 transition-transform">
|
| 108 |
Login with Google <i class="bx bxl-google ml-2"></i>
|
| 109 |
+
</button>
|
| 110 |
+
<button id="githubLoginBtn" class="inline-flex items-center bg-gradient-to-r from-gray-800 to-black text-white px-6 py-3 rounded-full font-semibold hover:scale-105 transition-transform">
|
| 111 |
Login with GitHub <i class="bx bxl-github ml-2"></i>
|
| 112 |
+
</button>
|
| 113 |
</div>
|
| 114 |
<p class="mt-4">Don't have an account? <a href="/register" class="text-emerald-300 hover:underline">Register</a></p>
|
| 115 |
<p id="errorMsg" class="text-red-500 mt-4 hidden"></p>
|
|
|
|
| 194 |
const loginBtn = document.getElementById('loginBtn');
|
| 195 |
const spinner = document.getElementById('spinner');
|
| 196 |
const errorMsg = document.getElementById('errorMsg');
|
|
|
|
|
|
|
| 197 |
loginForm.addEventListener('submit', async (e) => {
|
| 198 |
e.preventDefault();
|
| 199 |
spinner.classList.remove('hidden');
|
|
|
|
| 216 |
spinner.classList.add('hidden');
|
| 217 |
errorMsg.textContent = 'An error occurred. Please try again.';
|
| 218 |
errorMsg.classList.remove('hidden');
|
|
|
|
| 219 |
}
|
| 220 |
});
|
|
|
|
|
|
|
| 221 |
function showCardDetails(cardId) {
|
| 222 |
document.getElementById(`${cardId}-details`).classList.remove('hidden');
|
| 223 |
}
|
|
|
|
| 224 |
function closeCardDetails(cardId) {
|
| 225 |
document.getElementById(`${cardId}-details`).classList.add('hidden');
|
| 226 |
}
|
| 227 |
+
// Google Login
|
| 228 |
+
document.getElementById('googleLoginBtn').addEventListener('click', async () => {
|
| 229 |
+
try {
|
| 230 |
+
const response = await fetch('/auth/google/authorize');
|
| 231 |
+
const data = await response.json();
|
| 232 |
+
if (data.authorization_url) {
|
| 233 |
+
window.location.href = data.authorization_url;
|
| 234 |
+
} else {
|
| 235 |
+
console.error('No authorization URL received');
|
| 236 |
+
errorMsg.textContent = 'Error starting Google login. Try again.';
|
| 237 |
+
errorMsg.classList.remove('hidden');
|
| 238 |
+
}
|
| 239 |
+
} catch (error) {
|
| 240 |
+
console.error('Error initiating Google login:', error);
|
| 241 |
+
errorMsg.textContent = 'Error starting Google login. Try again.';
|
| 242 |
+
errorMsg.classList.remove('hidden');
|
| 243 |
+
}
|
| 244 |
+
});
|
| 245 |
+
// GitHub Login
|
| 246 |
+
document.getElementById('githubLoginBtn').addEventListener('click', async () => {
|
| 247 |
+
try {
|
| 248 |
+
const response = await fetch('/auth/github/authorize');
|
| 249 |
+
const data = await response.json();
|
| 250 |
+
if (data.authorization_url) {
|
| 251 |
+
window.location.href = data.authorization_url;
|
| 252 |
+
} else {
|
| 253 |
+
console.error('No authorization URL received');
|
| 254 |
+
errorMsg.textContent = 'Error starting GitHub login. Try again.';
|
| 255 |
+
errorMsg.classList.remove('hidden');
|
| 256 |
+
}
|
| 257 |
+
} catch (error) {
|
| 258 |
+
console.error('Error initiating GitHub login:', error);
|
| 259 |
+
errorMsg.textContent = 'Error starting GitHub login. Try again.';
|
| 260 |
+
errorMsg.classList.remove('hidden');
|
| 261 |
+
}
|
| 262 |
+
});
|
| 263 |
+
// تسجيل Service Worker لتفعيل الـ PWA
|
| 264 |
if ('serviceWorker' in navigator) {
|
| 265 |
navigator.serviceWorker.register('/static/js/sw.js')
|
| 266 |
+
.then(function(reg) {
|
| 267 |
+
console.log('✅ Service Worker Registered', reg);
|
| 268 |
+
}).catch(function(err) {
|
| 269 |
+
console.error('❌ Service Worker registration failed', err);
|
| 270 |
+
});
|
| 271 |
}
|
| 272 |
+
// التعامل مع حدث beforeinstallprompt لتثبيت التطبيق
|
|
|
|
| 273 |
let deferredPrompt;
|
| 274 |
window.addEventListener('beforeinstallprompt', (e) => {
|
| 275 |
e.preventDefault();
|