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