From 9fc4ddfd62d750098f6ee4b5cbd09eac7d44d31d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Le=20Ninivin?= <cedric.leninivin@tiolive.com>
Date: Fri, 14 Oct 2016 10:00:10 +0000
Subject: [PATCH] erp5_officejs: Handle ERP5 redirection when getting 401 code
 in a jIO request

---
 .../web_page_module/gadget_officejs_jio_js.js | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_js.js b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_js.js
index 4a471baa7c..f0f6b0e6dc 100644
--- a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_js.js
+++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_js.js
@@ -12,22 +12,36 @@
     return storage[method_name].apply(storage, argument_list)
       .push(undefined, function (error) {
         if ((error.target !== undefined) && (error.target.status === 401)) {
+          var regexp,
+            site,
+            auth_page;
           if (gadget.state_parameter_dict.jio_storage_name === "ERP5") {
-            return gadget.redirect({ page: "login" });
+            regexp = /^X-Delegate uri=\"(http[s]?:\/\/[\/\-\[\]{}()*+=:?&.,\\\^$|#\s\w%]+)\"$/;
+            auth_page = error.target.getResponseHeader('WWW-Authenticate');
+            if (regexp.test(auth_page)) {
+              site = UriTemplate.parse(
+                regexp.exec(auth_page)[1]
+              ).expand({
+                came_from: window.location.href,
+                cors_origin: window.location.origin,
+                });
+            }
           }
           if (gadget.state_parameter_dict.jio_storage_name === "DAV") {
-            var regexp = /^Nayookie login_url=(http[s]?:\/\/[\/\-\[\]{}()*+=:?&.,\\\^$|#\s\w%]+)$/,
-              auth_page = error.target.getResponseHeader('WWW-Authenticate'),
-              site;
+            regexp = /^Nayookie login_url=(http[s]?:\/\/[\/\-\[\]{}()*+=:?&.,\\\^$|#\s\w%]+)$/;
+            auth_page = error.target.getResponseHeader('WWW-Authenticate');
             if (regexp.test(auth_page)) {
               site = UriTemplate.parse(
                 regexp.exec(auth_page)[1]
-              ).expand({back_url: window.location.href,
-                        origin: window.location.protocol + '//' +
-                                window.location.host});
-              return gadget.redirect({ toExternal: true, url: site});
+              ).expand({
+                back_url: window.location.href,
+                origin: window.location.origin,
+                });
             }
           }
+          if (site) {
+            return gadget.redirect({ toExternal: true, url: site});
+          }
         }
         throw error;
       });
-- 
2.30.9