Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions backend/src/controllers/plugin_controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,9 @@ pub async fn save_monitored_website_data(session: Session, State(pool): State<My

let mut user_full: UserFull = session.get("user_full").await
.map_err(|_| AppError::InternalServerError("Session error".to_string()))?
.ok_or(AppError::BadRequest("User not found in session".to_string()))?; // Keeping BadRequest as per original code, though Unauthorized might be better?
.ok_or(AppError::BadRequest("User not found in session".to_string()))?;

let current = user_full.user.total_carbon_footprint;
// logic from original code. save_monitored_website_data returns Result<Option<f64>, Error>.
// If it fails, new_total_footprint is Err.
let new_value = match new_total_footprint {
Ok(Some(val)) => val,
Ok(None) => current + monitored_website.carbon_footprint,
Expand Down
68 changes: 50 additions & 18 deletions plugin/chrome/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,22 @@ function extractDomain(url) {
}
}

function resolveAccountData(payload) {
if (!payload || payload.success === false) {
return null;
}

return payload.account || payload.user_full || payload.user || null;
}

function resolveUserId(accountData) {
if (!accountData) {
return null;
}

return accountData.id ?? accountData.user?.id ?? null;
}

async function getUserId() {
try {
const sessionCookie = await chrome.cookies.get({
Expand Down Expand Up @@ -203,8 +219,12 @@ async function getUserId() {
}

const userData = await response.json();
// Compat backend: certains endpoints renvoient `user_full` au lieu de `account`.
const accountData = userData.account || userData.user_full || null;
const accountData = resolveAccountData(userData);
const userId = resolveUserId(accountData);

if (!accountData || !userId) {
throw new Error("Invalid get-account payload");
}

userCache.data = accountData;
userCache.timestamp = now;
Expand Down Expand Up @@ -234,9 +254,11 @@ function showSessionExpiredNotification() {
async function getUserData() {
try {
const userData = await getUserId();
const userId = resolveUserId(userData);

return {
isLoggedIn: !!userData,
userId: userData ? userData.id : null,
isLoggedIn: !!userId,
userId,
};
} catch (error) {
console.error(
Expand Down Expand Up @@ -268,8 +290,17 @@ async function processAndSendData(tabId, tabData, isFinal = false) {
sendInProgress = true;

try {
const { isLoggedIn, userId } = await getUserData();
if (!isLoggedIn || !userId) {
let isLoggedIn = false;
let userId = null;

if (userCache.data != null) {
userId = resolveUserId(userCache.data);
isLoggedIn = !!userId;
} else {
({ isLoggedIn, userId } = await getUserData());
}

if ((!isLoggedIn || !userId) && userCache.data === null) {
return;
}

Expand All @@ -281,18 +312,19 @@ async function processAndSendData(tabId, tabData, isFinal = false) {
const emissionsData = calculateCarbonEmissions(tabData);

const dataToSend = {
tabId,
domain,
totalTransferredSize: tabData.totalTransferredSize,
totalResourceSize: tabData.totalResourceSize,
totalRequests: tabData.totalRequests,
totalEmissions: emissionsData.totalEmissions,
loadTime: (tabData.endTime - tabData.startTime) / 1000,
url: tabData.currentUrl,
country: tabData.country,
userId: userId,
carbonIntensity,
isFinal,
id: 0,
url_domain: domain,
user_id: userId,
queries_quantity: tabData.totalRequests || 0,
data_transferred: tabData.totalTransferredSize || 0,
resources: tabData.totalResourceSize || 0,
loading_time:
tabData.startTime && tabData.endTime
? (tabData.endTime - tabData.startTime) / 1000
: 0,
carbon_footprint: emissionsData.totalEmissions || 0,
url_full: tabData.currentUrl || "",
country: tabData.country || "Unknown",
};

await sendDataToServer(dataToSend);
Expand Down
69 changes: 51 additions & 18 deletions plugin/firefox/src/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,22 @@ function extractDomain(url) {
}
}

function resolveAccountData(payload) {
if (!payload || payload.success === false) {
return null;
}

return payload.account || payload.user_full || payload.user || null;
}

function resolveUserId(accountData) {
if (!accountData) {
return null;
}

return accountData.id ?? accountData.user?.id ?? null;
}

async function getUserId() {
try {
const sessionCookie = await browser.cookies.get({
Expand Down Expand Up @@ -203,7 +219,12 @@ async function getUserId() {
}

const userData = await response.json();
const accountData = userData.account || userData.user_full || null;
const accountData = resolveAccountData(userData);
const userId = resolveUserId(accountData);

if (!accountData || !userId) {
throw new Error("Invalid get-account payload");
}

userCache.data = accountData;
userCache.timestamp = now;
Expand Down Expand Up @@ -233,9 +254,11 @@ function showSessionExpiredNotification() {
async function getUserData() {
try {
const userData = await getUserId();
const userId = resolveUserId(userData);

return {
isLoggedIn: !!userData,
userId: userData ? userData.id : null,
isLoggedIn: !!userId,
userId,
};
} catch (error) {
console.error(
Expand Down Expand Up @@ -267,8 +290,18 @@ async function processAndSendData(tabId, tabData, isFinal = false) {
sendInProgress = true;

try {
const { isLoggedIn, userId } = await getUserData();
if (!isLoggedIn || !userId) {
let isLoggedIn = false;
let userId = null;

if (userCache.data != null) {
userId = resolveUserId(userCache.data);
isLoggedIn = !!userId;

} else {
({ isLoggedIn, userId } = await getUserData());
}

if ((!isLoggedIn || !userId) && userCache.data === null) {
return;
}

Expand All @@ -280,20 +313,20 @@ async function processAndSendData(tabId, tabData, isFinal = false) {
const emissionsData = calculateCarbonEmissions(tabData);

const dataToSend = {
tabId,
domain,
totalTransferredSize: tabData.totalTransferredSize,
totalResourceSize: tabData.totalResourceSize,
totalRequests: tabData.totalRequests,
totalEmissions: emissionsData.totalEmissions,
loadTime: (tabData.endTime - tabData.startTime) / 1000,
url: tabData.currentUrl,
country: tabData.country,
userId: userId,
carbonIntensity,
isFinal,
id: 0,
url_domain: domain,
user_id: userId,
queries_quantity: tabData.totalRequests || 0,
data_transferred: tabData.totalTransferredSize || 0,
resources: tabData.totalResourceSize || 0,
loading_time:
tabData.startTime && tabData.endTime
? (tabData.endTime - tabData.startTime) / 1000
: 0,
carbon_footprint: emissionsData.totalEmissions || 0,
url_full: tabData.currentUrl || "",
country: tabData.country || "Unknown",
};

await sendDataToServer(dataToSend);
lastSendTime = now;
} catch (error) {
Expand Down
Loading