From acca98f70de7a99a804febda2c17e7ad70b0c79d Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@suma-ev.de>
Date: Fri, 22 Mar 2024 11:11:05 +0100
Subject: [PATCH] handle cookie responses properly

---
 build/js/Cookie.js          | 17 +++++++++++++++++
 build/js/SettingsManager.js | 24 ++++++++++++------------
 web/settings/index.css      |  4 ++--
 3 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/build/js/Cookie.js b/build/js/Cookie.js
index bd09200..92d3c34 100644
--- a/build/js/Cookie.js
+++ b/build/js/Cookie.js
@@ -100,4 +100,21 @@ export class Cookie {
             }
         });
     }
+
+    /**
+     * 
+     * @param {Cookie} cookie 
+     */
+    static async REMOVE_COOKIE(cookie) {
+        let response_promises = [];
+        response_promises.push(browser.cookie.remove({
+            url: "https://metager.de/",
+            name: cookie.key
+        }));
+        response_promises.push(browser.cookie.remove({
+            url: "https://metager.org/",
+            name: cookie.key
+        }));
+        return Promise.all(response_promises);
+    }
 }
\ No newline at end of file
diff --git a/build/js/SettingsManager.js b/build/js/SettingsManager.js
index f352314..af359e7 100644
--- a/build/js/SettingsManager.js
+++ b/build/js/SettingsManager.js
@@ -118,8 +118,8 @@ export class SettingsManager {
     if (!this.store_settings) return details.responseHeaders;
     await this.init();
     if (details.hasOwnProperty("responseHeaders")) {
-      let new_headers = []; // Cookie Array without set-cookie
       let settings_changed = false;
+      let cookies_to_remove = [];
       for (const header of details.responseHeaders) {
         if (header.name.match(/set-cookie/i)) {
           let cookie_responses = header.value.split("\n");
@@ -128,32 +128,32 @@ export class SettingsManager {
             let response_cookie = new Cookie(cookie);
 
             if (response_cookie.expired) {
-              new_cookies.push(cookie);
               delete this.settings[response_cookie.key];
+              // Remove cookie from browser
+              cookies_to_remove.push(response_cookie);
             } else if (response_cookie.key == "cost" || response_cookie.key == "tokens") {
               // Do not remove cost cookie as the token manager uses it
-              new_cookies.push(cookie);
               continue;
             } else {
               this.settings[response_cookie.key] = decodeURIComponent(
                 response_cookie.value
               );
+              cookies_to_remove.push(response_cookie);
             }
           }
-          if (new_cookies.length > 0) {
-            header.value = new_cookies.join("\n");
-            new_headers.push(header);
-          }
           settings_changed = true;
-        } else {
-          new_headers.push(header);
         }
       }
       if (settings_changed) {
-        await this.updateSettingRule();
-        await browser.storage.sync.set({ settings_settings: this.settings });
+        await this.sync().then(() => {
+          let removal_promises = [];
+          for (let cookie of cookies_to_remove) {
+            removal_promises.push(Cookie.REMOVE_COOKIE(cookie));
+          }
+          return Promise.all(removal_promises);
+        });
       }
-      return new_headers;
+      return;
     }
   }
 
diff --git a/web/settings/index.css b/web/settings/index.css
index 29fc409..cda1542 100644
--- a/web/settings/index.css
+++ b/web/settings/index.css
@@ -6,8 +6,8 @@ body {
 }
 
 body {
-    width: 100vw;
-    max-width: 780px;
+    width: 380px;
+    max-width: 100%;
     margin: 0 auto;
     margin-bottom: 1rem;
 }
-- 
GitLab