Monotone-Parent: 991fa5d50c1c078407d84332831b1f0c32190152

Monotone-Revision: c37bbff8f7a0f029635c72cfa745ff24e2b2220c

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-01-04T14:37:07
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2007-01-04 14:37:07 +00:00
parent 6e81fe733e
commit 7b8f76937c
6 changed files with 81 additions and 55 deletions

View File

@@ -1,3 +1,13 @@
2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentFolder.m
([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
([SOGoAppointmentFolder
-lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
lookupCalendarFolderForUID: method, which doesn't do security
checks.
2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new

View File

@@ -87,6 +87,7 @@
- (id) lookupHomeFolderForUID: (NSString *) _uid
inContext: (id) _ctx;
- (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid;
- (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids
inContext: (id) _ctx;
- (NSArray *) lookupFreeBusyObjectsForUIDs: (NSArray *) _uids

View File

@@ -903,6 +903,24 @@ static NSNumber *sharedYes = nil;
return result;
}
- (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid
{
SOGoFolder *upperContainer;
SOGoUserFolder *userFolder;
SOGoAppointmentFolder *calendarFolder;
upperContainer = [[self container] container];
userFolder = [SOGoUserFolder objectWithName: uid
inContainer: upperContainer];
calendarFolder = [SOGoAppointmentFolder objectWithName: @"Calendar"
inContainer: userFolder];
[calendarFolder
setOCSPath: [NSString stringWithFormat: @"/Users/%@/Calendar", uid]];
[calendarFolder setOwner: uid];
return calendarFolder;
}
- (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids
inContext: (id)_ctx
{
@@ -917,12 +935,7 @@ static NSNumber *sharedYes = nil;
while ((uid = [e nextObject])) {
id folder;
folder = [self lookupHomeFolderForUID:uid inContext:nil];
if ([folder isNotNull]) {
folder = [folder lookupName:@"Calendar" inContext:nil acquire:NO];
if ([folder isKindOfClass:[NSException class]])
folder = nil;
}
folder = [self lookupCalendarFolderForUID: uid];
if (![folder isNotNull])
[self logWithFormat:@"Note: did not find folder for uid: '%@'", uid];

View File

@@ -26,8 +26,10 @@
#import <Foundation/NSUserDefaults.h>
#import <Foundation/NSValue.h>
#import <NGObjWeb/SoSecurityManager.h>
#import <NGObjWeb/WOResponse.h>
#import <SOGo/SOGoPermissions.h>
#import <SOGo/SOGoUser.h>
#import "UIxCalMainView.h"
@@ -128,15 +130,49 @@ static NSMutableArray *yearMenuItems = nil;
return response;
}
- (NSString *) _rightsForUIDs: (NSString *) uids
{
NSEnumerator *ids;
NSString *uid;
NSMutableString *rights;
SOGoAppointmentFolder *refFolder, *currentFolder;
SoSecurityManager *securityManager;
BOOL result;
securityManager = [SoSecurityManager sharedSecurityManager];
refFolder = [self clientObject];
rights = [NSMutableString string];
if ([uids length] > 0)
{
ids = [[uids componentsSeparatedByString: @","] objectEnumerator];
uid = [ids nextObject];
while (uid)
{
currentFolder
= [refFolder
lookupCalendarFolderForUID: (([uid hasPrefix: @"-"])
? [uid substringFromIndex: 1]
: uid)];
result = (![securityManager validatePermission: SoPerm_AccessContentsInformation
onObject: currentFolder
inContext: context]);
if ([rights length] == 0)
[rights appendFormat: @"%d", result];
else
[rights appendFormat: @",%d", result];
uid = [ids nextObject];
}
}
return rights;
}
- (id <WOActionResults>) checkRightsAction
{
WOResponse *response;
NSUserDefaults *ud;
NSString *uids, *uid;
NSMutableString *rights;
NSArray *ids;
unsigned int count, max;
BOOL result;
NSString *uids, *rights;
ud = [[context activeUser] userDefaults];
uids = [ud stringForKey: @"calendaruids"];
@@ -145,23 +181,8 @@ static NSMutableArray *yearMenuItems = nil;
[response setStatus: 200];
[response setHeader: @"text/plain; charset=\"utf-8\""
forKey: @"content-type"];
rights = [NSMutableString string];
if ([uids length] > 0)
{
ids = [uids componentsSeparatedByString: @","];
max = [ids count];
for (count = 0; count < max; count++)
{
uid = [ids objectAtIndex: count];
if ([uid hasPrefix: @"-"])
uid = [uid substringFromIndex: 1];
result = ([self calendarFolderForUID: uid] != nil);
if (count == 0)
[rights appendFormat: @"%d", result];
else
[rights appendFormat: @",%d", result];
}
}
rights = [self _rightsForUIDs: uids];
[response appendContentString: rights];
return response;

View File

@@ -102,7 +102,6 @@
/* calendarUIDs */
- (NSString *)formattedCalendarUIDs;
- (SOGoAppointmentFolder *) calendarFolderForUID: (NSString *) uid;
/* CSS related */

View File

@@ -440,30 +440,6 @@ static BOOL shouldDisplayWeekend = NO;
return [[self startDate] tomorrow];
}
- (SOGoAppointmentFolder *) calendarFolderForUID: (NSString *) uid
{
SOGoFolder *upperContainer;
SOGoUserFolder *userFolder;
SOGoAppointmentFolder *calendarFolder;
SoSecurityManager *securityManager;
upperContainer = [[[self clientObject] container] container];
userFolder = [SOGoUserFolder objectWithName: uid
inContainer: upperContainer];
calendarFolder = [SOGoAppointmentFolder objectWithName: @"Calendar"
inContainer: userFolder];
[calendarFolder
setOCSPath: [NSString stringWithFormat: @"/Users/%@/Calendar", uid]];
[calendarFolder setOwner: uid];
securityManager = [SoSecurityManager sharedSecurityManager];
return (([securityManager validatePermission: SoPerm_AccessContentsInformation
onObject: calendarFolder
inContext: context] == nil)
? calendarFolder : nil);
}
- (NSArray *) activeCalendarFolders
{
NSUserDefaults *ud;
@@ -471,6 +447,9 @@ static BOOL shouldDisplayWeekend = NO;
SOGoAppointmentFolder *currentFolder;
NSMutableArray *folders;
NSString *currentUID;
SoSecurityManager *securityManager;
securityManager = [SoSecurityManager sharedSecurityManager];
folders = [NSMutableArray array];
ud = [[context activeUser] userDefaults];
@@ -481,8 +460,11 @@ static BOOL shouldDisplayWeekend = NO;
{
if (![currentUID hasPrefix: @"-"])
{
currentFolder = [self calendarFolderForUID: currentUID];
if (currentFolder)
currentFolder = [[self clientObject] lookupCalendarFolderForUID: currentUID];
if (currentFolder
&& ![securityManager validatePermission: SoPerm_AccessContentsInformation
onObject: currentFolder
inContext: context])
[folders addObject: currentFolder];
}
currentUID = [calendarUIDs nextObject];