From 41c94c2d5fd2502adbc82376b89b009643d1a7e4 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 20 Feb 2008 17:35:11 +0000 Subject: [PATCH] Monotone-Parent: 6a7c72685c7b5bfafc6f0bf0d1ade1f9f302961a Monotone-Revision: 65fe3a97b90cbf5428d1a613f449d9f3c48527a8 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2008-02-20T17:35:11 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++ SoObjects/SOGo/SOGoFolder.m | 2 +- SoObjects/SOGo/SOGoGCSFolder.m | 59 ++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 38ab62f18..c175d605f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-02-20 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davInverseACL]): + first implementation of a DAV interface to SOGo roles. Returns the + result in JSON. + 2008-02-14 Wolfgang Sourdeau * GNUmakefile: migrated to GNUstep Make 2. diff --git a/SoObjects/SOGo/SOGoFolder.m b/SoObjects/SOGo/SOGoFolder.m index 61986119d..91dc0773a 100644 --- a/SoObjects/SOGo/SOGoFolder.m +++ b/SoObjects/SOGo/SOGoFolder.m @@ -257,7 +257,7 @@ { return [NSArray arrayWithObjects: SoRole_Owner, SOGoRole_ObjectViewer, SOGoRole_ObjectEditor, SOGoRole_ObjectCreator, - SOGoRole_ObjectEraser, nil]; + SOGoRole_ObjectEraser, nil]; } - (NSArray *) aclsForUser: (NSString *) uid diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index b7c81f96a..fa2bebda8 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -682,6 +682,65 @@ static BOOL sendFolderAdvisories = NO; return defaultUserID; } +- (void) _appendACLUserData: (NSString *) user + toString: (NSMutableString *) aclAnswer +{ + SOGoUser *aclUser; + + [aclAnswer appendFormat: @"%@", user]; + aclUser = [SOGoUser userWithLogin: user roles: nil]; + [aclAnswer appendFormat: @"%@", + [aclUser cn]]; +} + +- (void) _appendACL: (NSArray *) userAcl + toString: (NSMutableString *) aclAnswer +{ + NSEnumerator *aclForUser; + NSString *currentAcl; + + [aclAnswer appendString: @""]; + aclForUser = [userAcl objectEnumerator]; + while ((currentAcl = [aclForUser nextObject])) + [aclAnswer appendFormat: @"<%@/>", currentAcl]; + [aclAnswer appendString: @""]; +} + +- (NSString *) davInverseACL +{ + NSMutableArray *aclAnswer; + NSEnumerator *aclUsers; + NSMutableDictionary *data; + NSString *currentUser, *cn; + SOGoUser *sogoUser; + + aclAnswer = [NSMutableArray array]; + currentUser = [self defaultUserID]; + + data = [NSMutableDictionary new]; + [data setObject: [self aclsForUser: currentUser] + forKey: @"acl"]; + [aclAnswer addObject: [NSDictionary dictionaryWithObject: data forKey: @"defaultUser"]]; + [data release]; + + aclUsers = [[self aclUsers] objectEnumerator]; + while ((currentUser = [aclUsers nextObject])) + { + data = [NSMutableDictionary new]; + [data setObject: currentUser forKey: @"id"]; + sogoUser = [SOGoUser userWithLogin: currentUser roles: nil]; + cn = [sogoUser cn]; + if (!cn) + cn = currentUser; + [data setObject: cn forKey: @"displayName"]; + [data setObject: [self aclsForUser: currentUser] forKey: @"acl"]; + [aclAnswer addObject: [NSDictionary dictionaryWithObject: data forKey: @"user"]]; + [data release]; + } + + return [aclAnswer jsonRepresentation]; +} + /* description */ - (void) appendAttributesToDescription: (NSMutableString *) _ms