diff --git a/ChangeLog b/ChangeLog index fd48855a5..02654f345 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2010-09-02 Wolfgang Sourdeau + + * UI/WebServerResources/generic.js: (recoverRequest): removed + obsolete function. + (onAjaxRequestStateChange): when a recovery request is required, + we now use the new "createCASRecoveryIFrame" function and the + "onCASRecoverIFrameLoaded" to handle the request. + + * UI/MainUI/SOGoUserHomePage.m (-recoverAction): new method, + returning a simple text-based response with HTTP code 200, + ensuring that the CAS authentication process has succeeded. + + * UI/MainUI/SOGoRootPage.m (-recoverAction): removed method. + 2010-09-02 Francis Lachapelle * UI/WebServerResources/generic.js (openMailTo): replaced calls to diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 18cba979e..842da7402 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -435,9 +435,4 @@ return response; } -- (id) recoverAction -{ - return [self jsCloseWithRefreshMethod: @"recoverRequest();"]; -} - @end /* SOGoRootPage */ diff --git a/UI/MainUI/SOGoUserHomePage.m b/UI/MainUI/SOGoUserHomePage.m index 6bf8a8e57..27f83d2b1 100644 --- a/UI/MainUI/SOGoUserHomePage.m +++ b/UI/MainUI/SOGoUserHomePage.m @@ -399,4 +399,10 @@ return result; } +- (id) recoverAction +{ + return [self responseWithStatus: 200 + andString: @"Full recovery in place."]; +} + @end diff --git a/UI/MainUI/product.plist b/UI/MainUI/product.plist index 0def5f8f3..e5942c8bb 100644 --- a/UI/MainUI/product.plist +++ b/UI/MainUI/product.plist @@ -110,11 +110,6 @@ protectedBy = ""; pageName = "SOGoRootPage"; }; - recover = { - protectedBy = "View"; - pageName = "SOGoRootPage"; - actionName = "recover"; - }; index = { protectedBy = ""; pageName = "SOGoRootPage"; @@ -163,6 +158,11 @@ protectedBy = ""; pageName = "SOGoUserHomePage"; }; + recover = { + protectedBy = "View"; + pageName = "SOGoUserHomePage"; + actionName = "recover"; + }; logoff = { protectedBy = ""; pageName = "SOGoUserHomePage"; diff --git a/UI/WebServerResources/generic.css b/UI/WebServerResources/generic.css index 964fd10e0..a39cfa927 100644 --- a/UI/WebServerResources/generic.css +++ b/UI/WebServerResources/generic.css @@ -843,6 +843,7 @@ DIV.tabsContainer > DIV.tabs > DIV.tab right: 5px; overflow: hidden; } +IFRAME.hidden, DIV.tab { display: none; } diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 531e6ebef..fec9a604c 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -23,7 +23,6 @@ var logConsole; var logWindow = null; var queryParameters; -var recoveryRequest = null; var menus = new Array(); var search = {}; @@ -208,7 +207,7 @@ function openMailComposeWindow(url, wId) { function openMailTo(senderMailTo) { var addresses = senderMailTo.split(","); var sanitizedAddresses = new Array(); - var subject = extractSubject(senderMailTo); + var subject = extractSubject(senderMailTo); for (var i = 0; i < addresses.length; i++) { var sanitizedAddress = sanitizeMailTo(addresses[i]); if (sanitizedAddress.length > 0) @@ -246,18 +245,38 @@ function createHTTPClient() { return new XMLHttpRequest(); } +function createCASRecoveryIFrame(http) { + var urlstr = UserFolderURL; + if (!urlstr.endsWith('/')) + urlstr += '/'; + urlstr += "recover"; + + var newIFrame = createElement("iframe", null, "hidden", + { src: urlstr }); + newIFrame.request = http; + newIFrame.observe("load", onCASRecoverIFrameLoaded); + document.body.appendChild(newIFrame); +} + +function onCASRecoverIFrameLoaded(event) { + if (this.request) { + var request = this.request; + triggerAjaxRequest(request.url, + request.callback, + request.callbackData, + request.paramHeaders); + this.request = null; + } + this.parentNode.removeChild(this); +} + function onAjaxRequestStateChange(http) { try { if (http.readyState == 4) { if (http.status == 0 && usesCASAuthentication) { activeAjaxRequests--; checkAjaxRequestsState(); - recoveryRequest = http; - var urlstr = ApplicationBaseURL; - if (!urlstr.endsWith('/')) - urlstr += '/'; - urlstr += ("../../recover"); - window.open(urlstr, "_blank"); + createCASRecoveryIFrame(http); } else if (activeAjaxRequests > 0) { if (!http.aborted) @@ -289,16 +308,6 @@ function onAjaxRequestStateChange(http) { } } -function recoverRequest() { - if (recoveryRequest) { - triggerAjaxRequest(recoveryRequest.url, - recoveryRequest.callback, - recoveryRequest.callbackData, - recoveryRequest.paramHeaders); - recoveryRequest = null; - } -} - /* taken from Lightning */ function getContrastingTextColor(bgColor) { var calcColor = bgColor.substring(1); @@ -1694,7 +1703,7 @@ AIM = { frame: function(c) { var d = new Element ('div'); var n = d.identify (); - d.innerHTML = ''; document.body.appendChild(d); var i = $(n); // TODO: useful?