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

Merge branch 'connexion_extension' into 'main'

Connexion/Déconnexion de l'utilisateur

See merge request !1
parents 5e423bb9 90df322b
No related branches found
No related tags found
1 merge request!1Connexion/Déconnexion de l'utilisateur
......@@ -3,10 +3,19 @@ let areStatsActive = false;
console.log("ff2BaLex est chargé.");
// === 1. Installation de l'extension ===
browser.runtime.onInstalled.addListener(() => {
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) => {
if (changes.extensionActive) {
isExtensionActive = changes.extensionActive.newValue;
......@@ -18,3 +27,96 @@ browser.storage.onChanged.addListener((changes) => {
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 @@
"name": "ff2BaLex",
"version": "1.0",
"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": {
"scripts": ["background.js"],
"persistent": true
......@@ -20,5 +28,6 @@
"128": "icon-128.png"
},
"default_title": "ff2BaLex"
}
},
"web_accessible_resources": ["login.html"]
}
document.getElementById("connectBtn").addEventListener("click", () => {
alert("Fonctionnalité de connexion non encore implémentée.");
});
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"}.`);
});
document.getElementById('connectBtn').addEventListener('click', () => {
browser.runtime.sendMessage({ action: "openLoginPage" });
});
document.getElementById('disconnectBtn').addEventListener('click', async () => {
await browser.storage.local.remove(["accessToken", "refreshToken"]);
alert("Déconnexion réussie.");
});
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", () => {
alert("Fonctionnalité de connexion non encore implémentée.");
});
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"}.`);
});
console.log("Redirection vers la page de connexion...");
browser.runtime.sendMessage({ action: "connectToBaLex" });
});
browser.runtime.onMessage.addListener((message) => {
if (message.action === "tokenSaved") {
alert("Connexion réussie !");
}
});
// === 2. Activer/Désactiver l'extension ===
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"}.`);
});
// === 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