]> err.no Git - sope/commitdiff
added a WebDAV property, added relative URLs to WebDAV
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Thu, 8 Feb 2007 18:39:39 +0000 (18:39 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Thu, 8 Feb 2007 18:39:39 +0000 (18:39 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1411 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/DAVPropMap.plist
sope-appserver/NGObjWeb/SoObjects/SoObject.m
sope-appserver/NGObjWeb/Version
sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m

index 56719c1aff87562483f4d89bd3872ee2ea240962..786b3c71d375502746805c2de456f7eac6391164 100644 (file)
@@ -1,5 +1,13 @@
 2007-02-08  Helge Hess  <helge.hess@opengroupware.org>
 
+       * v4.5.266
+
+       * SoObject.m, SoWebDAVRenderer.m: made the URL generation honour the
+         WOUseRelativeURLs default (which is on by default, so all generated
+         WebDAV URLs now do not include the hostname)
+
+       * DAVPropMap.plist: mapped calendar-color WebDAV property
+
        * WebDAV/SoWebDAVRenderer.m: added support for XML properties which
          contain values (v4.5.265)
 
index 541f8b164e5ca905412373f6d9f21930f58cfa6b..1f6b3622f0427a6b17c092d2fa1f4eb5512eb090 100644 (file)
     davDropboxHomeURL;
   "{http://apple.com/ns/calendarserver/}notifications-URL" =
     davNotificationsURL;
+  "{com.apple.ical:}calendarcolor" = davCalendarColor;
 }
index 6d75938802a5594816d07169d6b928a9125e6944..a01d0681e27651d6aa71e3043dde18ee48193c23 100644 (file)
@@ -38,6 +38,7 @@
 
 static int debugLookup  = -1;
 static int debugBaseURL = -1;
+static int useRelativeURLs = -1;
 static void _initialize(void) {
   if (debugLookup == -1) {
     debugLookup = [[NSUserDefaults standardUserDefaults]
@@ -49,6 +50,11 @@ static void _initialize(void) {
                                     boolForKey:@"SoDebugBaseURL"] ? 1 : 0;
     NSLog(@"Note(SoObject): SoDebugBaseURL is enabled!");
   }
+  if (useRelativeURLs == -1) {
+    useRelativeURLs = [[NSUserDefaults standardUserDefaults]
+                                      boolForKey:@"WOUseRelativeURLs"] ?1:0;
+    NSLog(@"Note(SoObject): relative base URLs are enabled.");
+  }
 }
 
 /* classes */
@@ -260,8 +266,10 @@ static void _initialize(void) {
     baseURL = [baseURL stringByAppendingString:name];
     
     if (debugBaseURL) {
-      [self logWithFormat:@"baseURL: name=%@ (container=%@)\n  container: %@\n  own: %@", 
-             [self nameInContainer], NSStringFromClass([[self container] class]),
+      [self logWithFormat:
+             @"baseURL: name=%@ (container=%@)\n  container: %@\n  own: %@", 
+             [self nameInContainer],
+             NSStringFromClass([[self container] class]),
              [[self container] baseURL], baseURL];
     }
   }
@@ -308,57 +316,59 @@ NSString *SoObjectRootURLInContext
   
   // TODO: this is somewhat weird, why don't we use WOContext for URL gen.?
   
-  rq   = [_ctx request];
-  port = [[rq headerForKey:@"x-webobjects-server-port"] intValue];
+  rq = [_ctx request];
+  ms = [[NSMutableString alloc] initWithCapacity:128];
+  
+  if (!useRelativeURLs) {
+    port = [[rq headerForKey:@"x-webobjects-server-port"] intValue];
   
-  /* this is actually a bug in Apache */
-  if (port == 0) {
-    static BOOL didWarn = NO;
-    if (!didWarn) {
-      [self warnWithFormat:@"(%s:%i): got an empty port from Apache!",
+    /* this is actually a bug in Apache */
+    if (port == 0) {
+      static BOOL didWarn = NO;
+      if (!didWarn) {
+       [self warnWithFormat:@"(%s:%i): got an empty port from Apache!",
               __PRETTY_FUNCTION__, __LINE__];
-      didWarn = YES;
+       didWarn = YES;
+      }
+      port = 80;
     }
-    port = 80;
-  }
-
-  ms = [[NSMutableString alloc] initWithCapacity:128];
   
-  if ((tmp = [rq headerForKey:@"host"]) != nil) { 
-    /* check whether we have a host header with port */
-    if ([tmp rangeOfString:@":"].length == 0)
-      tmp = nil;
-  }
-  if (tmp != nil) { /* we have a host header with port */
-    isHTTPS = 
-      [[rq headerForKey:@"x-webobjects-server-url"] hasPrefix:@"https"];
-    [ms appendString:isHTTPS ? @"https://" : @"http://"]; 
-    [ms appendString:tmp];
-  }
-  else if ((tmp = [rq headerForKey:@"x-webobjects-server-url"]) != nil) {
-    /* sometimes the URL is just wrong! (suggests port 80) */
-    if ([tmp hasSuffix:@":0"] && [tmp length] > 2) { // TODO: bad bad bad
-      [self warnWithFormat:@"%s: got incorrect URL from Apache: '%@'",
-             __PRETTY_FUNCTION__, tmp];
-      tmp = [tmp substringToIndex:([tmp length] - 2)];
+    if ((tmp = [rq headerForKey:@"host"]) != nil) { 
+      /* check whether we have a host header with port */
+      if ([tmp rangeOfString:@":"].length == 0)
+       tmp = nil;
+    }
+    if (tmp != nil) { /* we have a host header with port */
+      isHTTPS = 
+       [[rq headerForKey:@"x-webobjects-server-url"] hasPrefix:@"https"];
+      [ms appendString:isHTTPS ? @"https://" : @"http://"]; 
+      [ms appendString:tmp];
     }
-    else if ([tmp hasSuffix:@":443"] && [tmp hasPrefix:@"http://"]) {
-      /* see OGo bug #1435, Debian Apache hack */
-      [self warnWithFormat:@"%s: got 'http' protocol but 443 port, "
+    else if ((tmp = [rq headerForKey:@"x-webobjects-server-url"]) != nil) {
+      /* sometimes the URL is just wrong! (suggests port 80) */
+      if ([tmp hasSuffix:@":0"] && [tmp length] > 2) { // TODO: bad bad bad
+       [self warnWithFormat:@"%s: got incorrect URL from Apache: '%@'",
+             __PRETTY_FUNCTION__, tmp];
+       tmp = [tmp substringToIndex:([tmp length] - 2)];
+      }
+      else if ([tmp hasSuffix:@":443"] && [tmp hasPrefix:@"http://"]) {
+       /* see OGo bug #1435, Debian Apache hack */
+       [self warnWithFormat:@"%s: got 'http' protocol but 443 port, "
              @"assuming Debian/Apache bug (OGo #1435): '%@'",
              __PRETTY_FUNCTION__, tmp];
-      tmp = [tmp substringWithRange:NSMakeRange(4, [tmp length] - 4 - 4)];
-      tmp = [@"https" stringByAppendingString:tmp];
+       tmp = [tmp substringWithRange:NSMakeRange(4, [tmp length] - 4 - 4)];
+       tmp = [@"https" stringByAppendingString:tmp];
+      }
+      [ms appendString:tmp];
     }
-    [ms appendString:tmp];
-  }
-  else {
-    // TODO: isHTTPS always no in this case?
-    [ms appendString:isHTTPS ? @"https://" : @"http://"]; 
+    else {
+      // TODO: isHTTPS always no in this case?
+      [ms appendString:isHTTPS ? @"https://" : @"http://"]; 
   
-    [ms appendString:[rq headerForKey:@"x-webobjects-server-name"]];
-    if ((isHTTPS ? (port != 443) : (port != 80)) && port != 0)
-      [ms appendFormat:@":%i", port];
+      [ms appendString:[rq headerForKey:@"x-webobjects-server-name"]];
+      if ((isHTTPS ? (port != 443) : (port != 80)) && port != 0)
+       [ms appendFormat:@":%i", port];
+    }
   }
   
   if (withAppPart) {
@@ -399,7 +409,8 @@ NSString *SoObjectRootURLInContext
     return rootURL;
   }
   
-  rootURL = SoObjectRootURLInContext(_ctx, self, YES);
+  rootURL = SoObjectRootURLInContext
+    (_ctx, self /* logger */, YES /* withAppPart */);
   
   /* remember in cache */
   if (debugBaseURL) {
index b613fe435e4672aab757c1465728f54ca22ba16a..2a92e8b6734c48ffaacb738171b059e81b56dfba 100644 (file)
@@ -1,7 +1,7 @@
 # version file
 
 ifneq ($(GNUSTEP_HOST_VENDOR),apple) # linker overflow
-SUBMINOR_VERSION:=265
+SUBMINOR_VERSION:=266
 else
 SUBMINOR_VERSION:=255
 endif
index 6f61841ecfb64661386690b05f6bc456709fe717..94a801a48a3aa4db4cae66f50c66942b54e28c81 100644 (file)
@@ -60,6 +60,7 @@ static NSDictionary *predefinedNamespacePrefixes = nil;
 static NSTimeZone   *gmt         = nil;
 static BOOL         debugOn      = NO;
 static BOOL         formatOutput = NO;
+static BOOL         useRelativeURLs = YES;
 
 + (void)initialize {
   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
@@ -73,7 +74,8 @@ static BOOL         formatOutput = NO;
     predefinedNamespacePrefixes = 
       [[ud objectForKey:@"SoPreferredNamespacePrefixes"] copy];
   }
-  formatOutput = [ud boolForKey:@"SoWebDAVFormatOutput"];
+  formatOutput    = [ud boolForKey:@"SoWebDAVFormatOutput"];
+  useRelativeURLs = [ud boolForKey:@"WOUseRelativeURLs"];
   
   if ((debugOn = [ud boolForKey:@"SoRendererDebugEnabled"]))
     NSLog(@"enabled debugging in SoWebDAVRenderer (SoRendererDebugEnabled)");
@@ -545,6 +547,13 @@ static BOOL         formatOutput = NO;
   }
   else if (![href isAbsoluteURL]) { // maybe only check for http[s]:// ?
     // TODO: use "real" URL processing
+    if ([href hasPrefix:@"/"]) {
+      if (useRelativeURLs)
+       return href;
+      
+      [self warnWithFormat:@"href path is absolute:\n  base: %@\n  href: %@",
+             baseURL, href];
+    }
     href = [baseURL stringByAppendingPathComponent:href];
   }
   return href;