Skip to content
Snippets Groups Projects
Commit 90df322b authored by Lucie Bader's avatar Lucie Bader
Browse files

Connexion via bouton extension

parent be51f3b0
No related branches found
No related tags found
1 merge request!1Connexion/Déconnexion de l'utilisateur
...@@ -3,10 +3,19 @@ let areStatsActive = false; ...@@ -3,10 +3,19 @@ let areStatsActive = false;
console.log("ff2BaLex est chargé."); console.log("ff2BaLex est chargé.");
// === 1. Installation de l'extension ===
browser.runtime.onInstalled.addListener(() => { browser.runtime.onInstalled.addListener(() => {
console.log("ff2BaLex est installé."); console.log("ff2BaLex est installé.");
// Création d'un bouton unique de connexion/déconnexion
browser.contextMenus.create({
id: "toggle_connection",
title: "Se connecter à la base lexicale",
contexts: ["all"]
});
}); });
// === 2. Suivi des changements de paramètres ===
browser.storage.onChanged.addListener((changes) => { browser.storage.onChanged.addListener((changes) => {
if (changes.extensionActive) { if (changes.extensionActive) {
isExtensionActive = changes.extensionActive.newValue; isExtensionActive = changes.extensionActive.newValue;
...@@ -18,3 +27,96 @@ browser.storage.onChanged.addListener((changes) => { ...@@ -18,3 +27,96 @@ browser.storage.onChanged.addListener((changes) => {
console.log("Statistiques activées :", areStatsActive); console.log("Statistiques activées :", areStatsActive);
} }
}); });
// === 3. Gestion des messages provenant du bouton Connexion/Déconnexion ===
browser.runtime.onMessage.addListener(async (message) => {
if (message.action === "toggleConnection") {
const isConnected = await isUserConnected();
if (isConnected) {
disconnectFromLexicalDB();
} else {
openLoginPage();
}
}
});
// === 4. Ouvrir la page de connexion Prisms ===
function openLoginPage() {
const authUrl = "https://prisms.lezinter.net/fr/login";
browser.tabs.create({ url: authUrl });
}
// === 5. Suivi du parcours de connexion et récupération du token ===
browser.webNavigation.onCompleted.addListener(async (details) => {
const url = new URL(details.url);
// Si connecté, rediriger vers la page BaLex dans Prisms
if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/login") {
console.log("Connecté à Prisms, veuillez cliquer sur 'Se connecter avec BaLex'...");
}
// Une fois sur la page du tableau de bord BaLex, récupérer le token
if (url.hostname === "prisms.lezinter.net" && url.pathname === "/fr/headquarters/balex") {
console.log("Tentative de récupération du token depuis Prisms...");
try {
await new Promise(resolve => setTimeout(resolve, 3000)); // Pause pour chargement complet
await browser.tabs.executeScript(details.tabId, {
code: `
(function() {
const tokenElement = document.getElementById("accesToken");
console.log("Token détecté :", tokenElement ? tokenElement.innerText : "Non trouvé");
return tokenElement ? tokenElement.innerText.trim() : null;
})();
`
}).then(async (results) => {
const token = results[0];
if (token) {
await browser.storage.local.set({ accessToken: token });
console.log("Token récupéré et stocké :", token);
alert("Connexion réussie !");
updateContextMenu();
} else {
console.error("Token non trouvé sur la page Prisms.");
}
});
} catch (error) {
console.error("Erreur lors de la récupération du token :", error);
}
}
}, { url: [{ hostContains: "prisms.lezinter.net" }] });
// === 6. Déconnexion ===
async function disconnectFromLexicalDB() {
await browser.storage.local.remove("accessToken");
console.log("Token supprimé, déconnexion réussie.");
alert("Déconnexion réussie.");
updateContextMenu();
}
// === 7. Vérifier si l'utilisateur est connecté ===
async function isUserConnected() {
const result = await browser.storage.local.get("accessToken");
return result.accessToken !== undefined;
}
// === 8. Mise à jour dynamique du menu contextuel ===
browser.runtime.onStartup.addListener(() => {
updateContextMenu();
});
async function updateContextMenu() {
const isConnected = await isUserConnected();
browser.contextMenus.update("toggle_connection", {
title: isConnected ? "Se déconnecter de la base lexicale" : "Se connecter à la base lexicale"
});
}
// === 9. Rafraîchissement périodique du token (désactivé) ===
function refreshToken() {
console.warn("Aucune API de rafraîchissement disponible. Rafraîchissement désactivé.");
}
setInterval(() => {
refreshToken();
}, 15 * 60 * 1000); // Désactivé faute d'API de rafraîchissement
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Connexion à BaLex</title>
<style>
body {
background-color: #323046;
color: white;
font-family: Arial, sans-serif;
text-align: center;
padding-top: 50px;
}
input {
width: 80%;
padding: 10px;
margin: 10px 0;
}
button {
padding: 10px 20px;
background-color: #94608a;
color: white;
border: none;
cursor: pointer;
}
</style>
</head>
<body>
<h2>Connexion à BaLex</h2>
<input type="text" id="username" placeholder="Nom d'utilisateur"><br>
<input type="password" id="password" placeholder="Mot de passe"><br>
<button id="loginButton">Se connecter</button>
<script src="login.js"></script>
</body>
</html>
document.getElementById('loginButton').addEventListener('click', async () => {
const username = document.getElementById('username').value;
const password = document.getElementById('password').value;
if (username && password) {
const apiUrl = "https://babalex.lezinter.net/login";
try {
const response = await fetch(apiUrl, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ username, password })
});
const data = await response.json();
if (data.accessToken && data.refreshToken) {
await browser.storage.local.set({
accessToken: data.accessToken,
refreshToken: data.refreshToken
});
alert("Connexion réussie !");
window.close(); // Ferme la fenêtre de connexion
} else {
alert("Identifiants incorrects.");
}
} catch (error) {
console.error("Erreur lors de la connexion :", error);
alert("Erreur de connexion.");
}
} else {
alert("Veuillez remplir tous les champs.");
}
});
\ No newline at end of file
...@@ -3,7 +3,15 @@ ...@@ -3,7 +3,15 @@
"name": "ff2BaLex", "name": "ff2BaLex",
"version": "1.0", "version": "1.0",
"description": "Extension Firefox avec paramètres personnalisés.", "description": "Extension Firefox avec paramètres personnalisés.",
"permissions": ["storage", "activeTab"], "permissions": [
"storage",
"activeTab",
"tabs",
"contextMenus",
"webNavigation",
"scripting",
"*://babalex.lezinter.net/*",
"*://prisms.lezinter.net/*"],
"background": { "background": {
"scripts": ["background.js"], "scripts": ["background.js"],
"persistent": true "persistent": true
...@@ -20,5 +28,6 @@ ...@@ -20,5 +28,6 @@
"128": "icon-128.png" "128": "icon-128.png"
}, },
"default_title": "ff2BaLex" "default_title": "ff2BaLex"
} },
"web_accessible_resources": ["login.html"]
} }
document.getElementById("connectBtn").addEventListener("click", () => { document.getElementById('connectBtn').addEventListener('click', () => {
alert("Fonctionnalité de connexion non encore implémentée."); browser.runtime.sendMessage({ action: "openLoginPage" });
}); });
document.getElementById("toggleExtensionBtn").addEventListener("click", async () => { document.getElementById('disconnectBtn').addEventListener('click', async () => {
const { extensionActive } = await browser.storage.local.get("extensionActive"); await browser.storage.local.remove(["accessToken", "refreshToken"]);
const newState = !extensionActive; alert("Déconnexion réussie.");
await browser.storage.local.set({ extensionActive: newState }); });
alert(`Extension ${newState ? "activée" : "désactivée"}.`);
});
document.getElementById("toggleStatsBtn").addEventListener("click", async () => {
const { statsActive } = await browser.storage.local.get("statsActive");
const newState = !statsActive;
await browser.storage.local.set({ statsActive: newState });
alert(`Statistiques ${newState ? "activées" : "désactivées"}.`);
});
document.getElementById("toggleExtensionBtn").addEventListener("click", async () => {
const { extensionActive } = await browser.storage.local.get("extensionActive");
const newState = !extensionActive;
await browser.storage.local.set({ extensionActive: newState });
alert(`Extension ${newState ? "activée" : "désactivée"}.`);
});
document.getElementById("toggleStatsBtn").addEventListener("click", async () => {
const { statsActive } = await browser.storage.local.get("statsActive");
const newState = !statsActive;
await browser.storage.local.set({ statsActive: newState });
alert(`Statistiques ${newState ? "activées" : "désactivées"}.`);
});
// === 1. Gestion du bouton unique Connexion/Déconnexion ===
async function updateConnectionButton() {
const { accessToken } = await browser.storage.local.get("accessToken");
const button = document.getElementById("connectBtn");
button.textContent = accessToken ? "Se déconnecter" : "Se connecter";
}
// Action au clic du bouton Connexion/Déconnexion
document.getElementById("connectBtn").addEventListener("click", () => { document.getElementById("connectBtn").addEventListener("click", () => {
alert("Fonctionnalité de connexion non encore implémentée."); console.log("Redirection vers la page de connexion...");
}); browser.runtime.sendMessage({ action: "connectToBaLex" });
});
document.getElementById("toggleExtensionBtn").addEventListener("click", async () => {
const { extensionActive } = await browser.storage.local.get("extensionActive"); browser.runtime.onMessage.addListener((message) => {
const newState = !extensionActive; if (message.action === "tokenSaved") {
await browser.storage.local.set({ extensionActive: newState }); alert("Connexion réussie !");
alert(`Extension ${newState ? "activée" : "désactivée"}.`); }
}); });
document.getElementById("toggleStatsBtn").addEventListener("click", async () => { // === 2. Activer/Désactiver l'extension ===
const { statsActive } = await browser.storage.local.get("statsActive"); document.getElementById("toggleExtensionBtn").addEventListener("click", async () => {
const newState = !statsActive; const { extensionActive } = await browser.storage.local.get("extensionActive");
await browser.storage.local.set({ statsActive: newState }); const newState = !extensionActive;
alert(`Statistiques ${newState ? "activées" : "désactivées"}.`); await browser.storage.local.set({ extensionActive: newState });
}); alert(`Extension ${newState ? "activée" : "désactivée"}.`);
});
// === 3. Activer/Désactiver les statistiques ===
document.getElementById("toggleStatsBtn").addEventListener("click", async () => {
const { statsActive } = await browser.storage.local.get("statsActive");
const newState = !statsActive;
await browser.storage.local.set({ statsActive: newState });
alert(`Statistiques ${newState ? "activées" : "désactivées"}.`);
});
// === 4. Mise à jour initiale du bouton Connexion/Déconnexion ===
updateConnectionButton();
// Vérification pour le bouton de connexion
document.addEventListener("DOMContentLoaded", () => {
const connectBtn = document.getElementById("connectBtn");
if (connectBtn) {
connectBtn.addEventListener("click", async () => {
console.log("Clic détecté sur le bouton Connexion");
try {
await browser.runtime.sendMessage({ action: "toggleConnection" });
console.log("Message envoyé au background.");
} catch (error) {
console.error("Erreur lors de l'envoi du message :", error);
}
});
} else {
console.error("Le bouton de connexion n'a pas été trouvé.");
}
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment