]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1380 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 25 Feb 2008 22:02:29 +0000 (22:02 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 25 Feb 2008 22:02:29 +0000 (22:02 +0000)
ChangeLog
NEWS
SoObjects/SOGo/SOGoDAVRendererTypes.m
SoObjects/SOGo/SOGoGCSFolder.m

index 9a67f429b5bbcb572e933e713ce4c4ab700f2464..7742fdb827a56f15197a344a191e96b79aa99f0d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-02-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
+
+       * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
+       -davSubscribe:queryContext]): implemented subscribing users other
+       that the current one, if the user doing the operation is a superuser.
+       ([SOGoGCSFolder -davUnsubscribe:queryContext]): same as above for
+       unsubscription.
+
 2008-02-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
 
        * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
diff --git a/NEWS b/NEWS
index c06cfa8c0f5c78c0da5be396ce09aac27190506e..415ca7fbfb9543e34f4061063054fb70772329b3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+0.9.0-2008xxxx (1.0 rc6)
+- retrieving the freebusy DAV object was causing SOGo to crash
+- converted to use the gnustep-make 2 build framework
+- added custom DAV methods for managing user permissions from the SOGo Integrator
+
 0.9.0-20080208 (1.0 rc5)
 ------------------------
 - improved validation in the custom recurrence window
index cdbb00b2408b8aad193d6144fa30bbc579652172..5d74a9c59ee92df59bdf94d34c7491dbc17d158d 100644 (file)
@@ -1,6 +1,6 @@
 /* SOGoDAVRendererTypes.m - this file is part of SOGo
  *
- * Copyright (C) 2006 Inverse groupe conseil
+ * Copyright (C) 2006, 2008 Inverse groupe conseil
  *
  * Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
  *
@@ -24,6 +24,8 @@
 #import <Foundation/NSEnumerator.h>
 #import <Foundation/NSString.h>
 
+#import <NGExtensions/NSString+misc.h>
+
 #import "SOGoDAVRendererTypes.h"
 
 @implementation SOGoDAVSet
index 3ff9e041d81f051f80eb9a91d1f0aad371e64a7d..38a0c90d971636e3f9cee465b693f5d99e05aa9b 100644 (file)
@@ -41,6 +41,7 @@
 #import <NGExtensions/NSString+misc.h>
 #import <NGExtensions/NSNull+misc.h>
 #import <NGExtensions/NSObject+Logs.h>
+#import <DOM/DOMProtocols.h>
 #import <EOControl/EOQualifier.h>
 #import <GDLAccess/EOAdaptorChannel.h>
 #import <GDLContentStore/GCSChannelManager.h>
@@ -408,25 +409,22 @@ static BOOL sendFolderAdvisories = NO;
 
 #warning this code should be cleaned up
 #warning this code is a dup of UIxFolderActions,\
-         we should remove the methods there instead
-- (WOResponse *) _subscribe: (BOOL) reallyDo
-                 inContext: (WOContext *) localContext
+         we should remove the methods there
+- (void) _subscribeUser: (SOGoUser *) subscribingUser
+              reallyDo: (BOOL) reallyDo
+            inResponse: (WOResponse *) response
 {
-  WOResponse *response;
   NSMutableArray *folderSubscription;
   NSString *subscriptionPointer, *baseFolder, *folder;
-  SOGoUser *activeUser;
   NSUserDefaults *ud;
   NSArray *realFolderPath;
   NSMutableDictionary *moduleSettings;
 
-  activeUser = [localContext activeUser];
-  ud = [activeUser userSettings];
+  ud = [subscribingUser userSettings];
   baseFolder = [container nameInContainer];
   moduleSettings = [ud objectForKey: baseFolder];
 
-  response = [localContext response];
-  if ([owner isEqualToString: [activeUser login]])
+  if ([owner isEqualToString: [subscribingUser login]])
     {
       [response setStatus: 403];
       [response appendContentString:
@@ -461,18 +459,68 @@ static BOOL sendFolderAdvisories = NO;
 
       [response setStatus: 204];
     }
+}
+
+- (WOResponse *) _subscribe: (BOOL) reallyDo
+               inTheNameOf: (NSString *) delegatedUser
+                 inContext: (WOContext *) localContext
+{
+  WOResponse *response;
+  SOGoUser *currentUser, *subscriptionUser;
+  BOOL validRequest;
+
+  response = [localContext response];
+  currentUser = [localContext activeUser];
+
+  if ([delegatedUser length])
+    {
+      validRequest = ([currentUser isSuperUser]);
+      subscriptionUser = [SOGoUser userWithLogin: delegatedUser roles: nil];
+    }
+  else
+    {
+      validRequest = YES;
+      subscriptionUser = currentUser;
+    }
+
+  if (validRequest)
+    [self _subscribeUser: subscriptionUser
+         reallyDo: reallyDo
+         inResponse: response];
+  else
+    {
+      [response setStatus: 403];
+      [response appendContentString:
+                @"You cannot subscribe another user to any folder"
+               @" unless you are a super-user."];
+    }
 
   return response;
 }
 
-- (id <WOActionResults>) davSubscribe: (WOContext *) localContext
+- (NSString *) _parseDAVDelegatedUser: (WOContext *) queryContext
+{
+  id <DOMDocument> document;
+  id <DOMNamedNodeMap> attrs;
+
+  document = [[queryContext request] contentAsDOMDocument];
+  attrs = [[document documentElement] attributes];
+
+  return [[attrs namedItem: @"user"] nodeValue];
+}
+
+- (id <WOActionResults>) davSubscribe: (WOContext *) queryContext
 {
-  return [self _subscribe: YES inContext: localContext];
+  return [self _subscribe: YES
+              inTheNameOf: [self _parseDAVDelegatedUser: queryContext]
+              inContext: queryContext];
 }
 
-- (id <WOActionResults>) davUnsubscribe: (WOContext *) localContext
+- (id <WOActionResults>) davUnsubscribe: (WOContext *) queryContext
 {
-  return [self _subscribe: NO inContext: localContext];
+  return [self _subscribe: NO
+              inTheNameOf: [self _parseDAVDelegatedUser: queryContext]
+              inContext: queryContext];
 }
 
 - (NSException *) davSetProperties: (NSDictionary *) setProps