]> git.immae.eu Git - github/bastienwirtz/homer.git/commitdiff
Allow any service to override the credentials option
authorBastien Wirtz <bastien.wirtz@gmail.com>
Sun, 10 Oct 2021 08:16:18 +0000 (10:16 +0200)
committerBastien Wirtz <bastien.wirtz@gmail.com>
Sun, 10 Oct 2021 08:16:18 +0000 (10:16 +0200)
docs/configuration.md
src/mixins/service.js

index b1cce56a2cdccd14ec51c8b44499385b3706eb89..0dd0a85b8e466c21149ea89a185653e7fed50d26 100644 (file)
@@ -26,7 +26,7 @@ connectivityCheck: true # whether you want to display a message when the apps ar
 
 # Optional: Proxy / hosting option
 proxy:
-  useCredentials: false # send cookies & authorization headers when fetching service specific data. Set to `true` if you use an authentication proxy.
+  useCredentials: false # send cookies & authorization headers when fetching service specific data. Set to `true` if you use an authentication proxy. Can be overrided on service level.
 
 # Optional theming
 theme: default # 'default' or one of the themes available in 'src/assets/themes'.
index 99d8c0187b21791bf728f126a01afc2a82ec6dfd..ae23a2742bc5130fc4f08b9a16ab92192afa3f85 100644 (file)
@@ -6,6 +6,10 @@ export default {
     // custom service often consume info from an API using the item link (url) as a base url,
     // but sometimes the base url is different. An optional alternative URL can be provided with the "endpoint" key.
     this.endpoint = this.item.endpoint || this.item.url;
+
+    if (this.endpoint.endsWith("/")) {
+      this.endpoint = this.endpoint.slice(0, -1);
+    }
   },
   methods: {
     fetch: function (path, init) {
@@ -15,8 +19,18 @@ export default {
         options.credentials = "include";
       }
 
+      // Each item can override the credential settings
+      if (this.item.useCredentials !== undefined) {
+        options.credentials =
+          this.item.useCredentials === true ? "include" : "omit";
+      }
+
       options = Object.assign(options, init);
 
+      if (path.startsWith("/")) {
+        path = path.slice(1);
+      }
+
       return fetch(`${this.endpoint}/${path}`, options).then((response) => {
         if (!response.ok) {
           throw new Error("Not 2xx response");