Monotone-Parent: 2e584005bb3d904920fa4bd08e149b6029d41c59
Monotone-Revision: 33a155bb9aa78b5b1566316b90bfe31c482dc6a2 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-02-18T21:39:25 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
c4e242069f
commit
4584652626
|
@ -1,5 +1,12 @@
|
|||
2010-02-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||
|
||||
* UI/MainUI/SOGoRootPage.m (-_casDefaultAction): when the local
|
||||
cache has expired, we create a "cas-location" cookie before
|
||||
redirecting to the CAS login page and we redirect the user back to
|
||||
that page when the login has been completed. This way, the
|
||||
event creation window or any AJAX request would seamlessly restart
|
||||
where "interrupted" by the login process.
|
||||
|
||||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||||
(-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:):
|
||||
added a few headers to the ical attachment that could help
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/NSCalendarDate.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSException.h>
|
||||
#import <Foundation/NSTimeZone.h>
|
||||
#import <Foundation/NSURL.h>
|
||||
|
||||
#import <NGObjWeb/NSException+HTTP.h>
|
||||
|
@ -31,6 +33,7 @@
|
|||
#import <NGObjWeb/WOResponse.h>
|
||||
|
||||
#import <NGExtensions/NGBase64Coding.h>
|
||||
#import <NGExtensions/NSCalendarDate+misc.h>
|
||||
#import <NGExtensions/NSNull+misc.h>
|
||||
#import <NGExtensions/NSString+misc.h>
|
||||
#import <NGExtensions/NSObject+Logs.h>
|
||||
|
@ -81,6 +84,27 @@
|
|||
return authCookie;
|
||||
}
|
||||
|
||||
- (WOCookie *) _casLocationCookie: (BOOL) cookieReset
|
||||
{
|
||||
WOCookie *locationCookie;
|
||||
NSString *appName;
|
||||
WORequest *rq;
|
||||
NSCalendarDate *date;
|
||||
|
||||
rq = [context request];
|
||||
locationCookie = [WOCookie cookieWithName: @"cas-location" value: [rq uri]];
|
||||
appName = [rq applicationName];
|
||||
[locationCookie setPath: [NSString stringWithFormat: @"/%@/", appName]];
|
||||
if (cookieReset)
|
||||
{
|
||||
date = [NSCalendarDate calendarDate];
|
||||
[date setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"GMT"]];
|
||||
[locationCookie setExpires: [date yesterday]];
|
||||
}
|
||||
|
||||
return locationCookie;
|
||||
}
|
||||
|
||||
/* actions */
|
||||
- (id <WOActionResults>) connectAction
|
||||
{
|
||||
|
@ -161,16 +185,21 @@
|
|||
NSString *login, *newLocation, *oldLocation, *ticket;
|
||||
SOGoCASSession *casSession;
|
||||
SOGoWebAuthenticator *auth;
|
||||
WOCookie *casCookie;
|
||||
WOCookie *casCookie, *casLocationCookie;
|
||||
WORequest *rq;
|
||||
|
||||
casCookie = nil;
|
||||
casLocationCookie = nil;
|
||||
|
||||
newLocation = nil;
|
||||
|
||||
login = [[context activeUser] login];
|
||||
if ([login isEqualToString: @"anonymous"])
|
||||
login = nil;
|
||||
if (!login)
|
||||
{
|
||||
ticket = [[context request] formValueForKey: @"ticket"];
|
||||
rq = [context request];
|
||||
ticket = [rq formValueForKey: @"ticket"];
|
||||
if ([ticket length])
|
||||
{
|
||||
casSession = [SOGoCASSession CASSessionWithTicket: ticket];
|
||||
|
@ -183,22 +212,40 @@
|
|||
andPassword: [casSession identifier]
|
||||
forAuthenticator: auth];
|
||||
[casSession updateCache];
|
||||
newLocation = [rq cookieValueForKey: @"cas-location"];
|
||||
/* login callback, we expire the "cas-location" cookie, created
|
||||
below */
|
||||
casLocationCookie = [self _casLocationCookie: YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
ticket = nil;
|
||||
|
||||
if (login)
|
||||
{
|
||||
oldLocation = [[self clientObject] baseURLInContext: context];
|
||||
newLocation = [NSString stringWithFormat: @"%@%@",
|
||||
oldLocation, [login stringByEscapingURL]];
|
||||
/* We redirect the user to his "homepage" when newLocation could not be
|
||||
deduced from the "cas-location" cookie and the current action is not a
|
||||
login callback (ticket != nil). */
|
||||
if (!newLocation || !ticket)
|
||||
{
|
||||
oldLocation = [[self clientObject] baseURLInContext: context];
|
||||
newLocation = [NSString stringWithFormat: @"%@%@",
|
||||
oldLocation, [login stringByEscapingURL]];
|
||||
}
|
||||
}
|
||||
else
|
||||
newLocation = [SOGoCASSession CASURLWithAction: @"login"
|
||||
andParameters: [self _casRedirectKeys]];
|
||||
{
|
||||
newLocation
|
||||
= [SOGoCASSession CASURLWithAction: @"login"
|
||||
andParameters: [self _casRedirectKeys]];
|
||||
casLocationCookie = [self _casLocationCookie: NO];
|
||||
}
|
||||
response = [self redirectToLocation: newLocation];
|
||||
if (casCookie)
|
||||
[response addCookie: casCookie];
|
||||
if (casLocationCookie)
|
||||
[response addCookie: casLocationCookie];
|
||||
|
||||
return response;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue