See ChangeLog

Monotone-Parent: 5016da15e7302739b395754fe5a9d170409343ae
Monotone-Revision: f6a0b62965278336b461dac36045bfae5fc07f0a

Monotone-Author: ludovic@Sophos.ca
Monotone-Date: 2010-08-12T17:56:18
maint-2.0.2
Ludovic Marcotte 2010-08-12 17:56:18 +00:00
parent a6df60d4d8
commit 89d3d4b413
7 changed files with 78 additions and 11 deletions

View File

@ -1,3 +1,21 @@
2010-08-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/WebServerResources/generic.js: (onAjaxRequestStateChange):
when using CAS authentication and when the return code is 0 and
when the request status is 4, chances are that the initial ajax
request failed due to the expiration of the CAS ticket entry in
memcached. In FF 3.5 and above, a bug prevents the initial cookie
from being given back to the reauthentication redirect from an
AJAX request. Therefore we open a window that will do this for us
and will close one the authentication has succeeded again.
* UI/MainUI/SOGoRootPage.m (-revoverAction): new fake action that
perform the CAS redirection and then trigger the respawn of the
initial request.
* UI/Common/UIxPageFrame.m (-usesCASAuthentication): new accessor
used for recovery of redirected requests.
2010-08-11 Francis Lachapelle <flachapelle@inverse.ca>
* UI/WebServerResources/MailerUI.js (refreshMessage): if the

1
NEWS
View File

@ -4,6 +4,7 @@
- added Polish translation
- added crypt support to SQL sources
- updated Ukrainian translation
- added the caldav-auto-schedule capability
1.3-20100721 (1.3.0)
--------------------

View File

@ -400,6 +400,15 @@
&& [user isSuperUser]);
}
- (BOOL) usesCASAuthentication
{
SOGoSystemDefaults *sd;
sd = [SOGoSystemDefaults sharedSystemDefaults];
return [[sd authenticationType] isEqualToString: @"cas"];
}
- (NSString *) userIdentification
{
/* The "identification" term is used in the human sense here. */

View File

@ -435,4 +435,9 @@
return response;
}
- (id) recoverAction
{
return [self jsCloseWithRefreshMethod: @"recoverRequest();"];
}
@end /* SOGoRootPage */

View File

@ -106,10 +106,15 @@
};
};
methods = {
view = {
view = {
protectedBy = "<public>";
pageName = "SOGoRootPage";
};
recover = {
protectedBy = "View";
pageName = "SOGoRootPage";
actionName = "recover";
};
index = {
protectedBy = "<public>";
pageName = "SOGoRootPage";

View File

@ -122,6 +122,12 @@
<var:if condition="isSuperUser" const:negate="YES"
>var IsSuperUser = false;
</var:if>
<var:if condition="usesCASAuthentication"
>var usesCASAuthentication = true;
</var:if>
<var:if condition="usesCASAuthentication" const:negate="YES"
>var usesCASAuthentication = false;
</var:if>
<var:if condition="shortUserNameForDisplay" const:value="anonymous"
const:negate="YES"
>var UserFolderURL = '<var:string value="userFolderPath" const:escapeHTML="NO"/>';

View File

@ -27,6 +27,7 @@ var logConsole;
var logWindow = null;
var queryParameters;
var recoveryRequest = null;
var menus = new Array();
var search = {};
@ -246,15 +247,26 @@ function createHTTPClient() {
function onAjaxRequestStateChange(http) {
try {
if (http.readyState == 4
&& activeAjaxRequests > 0) {
if (!http.aborted)
http.callback(http);
activeAjaxRequests--;
checkAjaxRequestsState();
http.onreadystatechange = Prototype.emptyFunction;
http.callback = Prototype.emptyFunction;
http.callbackData = null;
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");
}
else if (activeAjaxRequests > 0) {
if (!http.aborted)
http.callback(http);
activeAjaxRequests--;
checkAjaxRequestsState();
http.onreadystatechange = Prototype.emptyFunction;
http.callback = Prototype.emptyFunction;
http.callbackData = null;
}
}
}
catch(e) {
@ -276,6 +288,16 @@ 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);
@ -299,9 +321,10 @@ function triggerAjaxRequest(url, callback, userdata, content, headers) {
http.open("POST", url, true);
http.url = url;
http.paramHeaders = headers;
http.callback = callback;
http.callbackData = userdata;
http.onreadystatechange = function() { onAjaxRequestStateChange(http);};
http.onreadystatechange = function() { onAjaxRequestStateChange(http); };
// = function() {
// // log ("state changed (" + http.readyState + "): " + url);
// };