]> err.no Git - scalable-opengroupware.org/commitdiff
added Internet check
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 8 Jul 2005 10:33:00 +0000 (10:33 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Fri, 8 Jul 2005 10:33:00 +0000 (10:33 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@699 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Mailer/ChangeLog
SOGo/SoObjects/Mailer/README
SOGo/SoObjects/Mailer/SOGoMailAccounts.m
SOGo/SoObjects/Mailer/Version
SOGo/UI/MailerUI/UIxMailEditor.m

index 438b09cedf2f4ae1e35c20230f5cad3a312b7d97..498306a64b8fe7577c398373e4551401321e0407 100644 (file)
@@ -1,3 +1,10 @@
+2005-07-08  Helge Hess  <helge.hess@opengroupware.org>
+
+       * SOGoMailAccounts.m: only deliver share-names as subobjects if the
+         request is not coming from the Internet. Ensure that limitation in
+         -lookupName:. Can be enabled using SOGoInternetDetectQualifier just
+         like in UIxMailEditor (v0.9.93)
+
 2005-07-08  Helge Hess  <helge.hess@opengroupware.org>
 
        * v0.9.92
index bfccb5bb2575ca2851045abbcf7e0712aafbb1cd..31df555abd87599a44e8303a21441076f7126307 100644 (file)
@@ -39,3 +39,10 @@ SOGoNoDraftDeleteAfterSend YES|NO - makes the draft's -delete method a NOOP
 SOGoSpecialFoldersInRoot   YES|NO - do special folders live under INBOX?
   - corresponds to the Cyrus setting: "altnamespace: yes"
 SOGoEnableSieveFolder      YES|NO - should the Sieve folder be visible?
+
+SOGoInternetDetectQualifier
+- an EOQualifier to detect whether a set of HTTP headers is from the outside,
+  eg: "NOT (minequprovenance = 'intranet')"
+      -SOGoInternetDetectQualifier '"NOT (minequprovenance = \"intranet\")"'
+  Note: all header field names are lowercase
+  Testing: -SOGoInternetDetectQualifier '"host = \"agenor.opengroupware.org\""'
\ No newline at end of file
index d3e8d756c8dce859a7f78900cb171719571cb8fe..78a1b25a8ae81b2f4e7bf16ea764ffb3fd5a47a2 100644 (file)
 
 @implementation SOGoMailAccounts
 
+static EOQualifier *internetDetectQualifier = nil;
+static NSString    *AgenorShareLoginMarker  = @".-.";
+
++ (void)initialize {
+  NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
+  NSString *s;
+
+  if ((s = [ud stringForKey:@"SOGoInternetDetectQualifier"]) != nil) {
+    internetDetectQualifier = 
+      [[EOQualifier qualifierWithQualifierFormat:s] retain];
+    if (internetDetectQualifier == nil)
+      NSLog(@"ERROR: could not parse qualifier: '%@'", s);
+  }
+  if (internetDetectQualifier == nil)
+    NSLog(@"SOGoMailAccounts: no 'SOGoInternetDetectQualifier' configured.");
+  else {
+    NSLog(@"SOGoMailAccounts: detect Internet access using: %@", 
+         internetDetectQualifier);
+  }
+}
+
+/* detect webmail being accessed from the outside */
+
+- (BOOL)isInternetRequest {
+  WORequest *rq;
+  
+  rq = [[(WOApplication *)[WOApplication application] context] request];
+  if (rq == nil) {
+    [self logWithFormat:
+           @"ERROR: got no WORequest for checking Internet headers!"];
+    return NO;
+  }
+  
+  return [(id<EOQualifierEvaluation>)internetDetectQualifier
+                                    evaluateWithObject:[rq headers]];
+}
+
 /* listing the available mailboxes */
 
 - (NSArray *)toManyRelationshipKeys {
   
   uid     = [[self container] davDisplayName]; /* the uid part of the URL */
   account = [um getIMAPAccountStringForUID:uid];
-  shares  = [um getSharedMailboxAccountStringsForUID:uid];
-  
   if (account != nil) account = [NSArray arrayWithObject:account];
   
+  if ([self isInternetRequest]) /* only show primary mailbox in Internet */
+    return account;
+  
+  shares  = [um getSharedMailboxAccountStringsForUID:uid];
   return ([shares count] == 0)
     ? account
     : [account arrayByAddingObjectsFromArray:shares];
   if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]))
     return obj;
   
-  if ([self isValidMailAccountName:_key])
+  if ([self isValidMailAccountName:_key]) {
+    /* forbid shares for requests coming from the Internet */
+    if ([self isInternetRequest]) {
+      if ([_key rangeOfString:AgenorShareLoginMarker].length > 0) {
+       return [NSException exceptionWithHTTPStatus:403 /* Forbidden */
+                           reason:
+                             @"Access to shares forbidden from the Internet"];
+      }
+    }
+    
     return [self mailAccountWithName:_key inContext:_ctx];
+  }
 
   /* return 404 to stop acquisition */
   return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
index 8fcde6b1f497679e55ffb5a0cc2f3dc13c1dfc70..52b2edd859a9ae4a9693672cafecc91ff3722d13 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=92
+SUBMINOR_VERSION:=93
 
 # v0.9.91 requires libNGMime       v4.5.222
 # v0.9.69 requires libNGMime       v4.5.210
index 571bb62cc5bac879cd50de461e0c0847114942bc..a10dd378d8650eaff106a5843ad1b41f51e9dd71 100644 (file)
@@ -86,12 +86,14 @@ static NSArray      *infoKeys = nil;
     internetDetectQualifier = 
       [[EOQualifier qualifierWithQualifierFormat:s] retain];
     if (internetDetectQualifier == nil)
-      NSLog(@"ERROR: could not parse qualifier: '%@'", s);
+      NSLog(@"UIxMailEditor: could not parse qualifier: '%@'", s);
   }
   if (internetDetectQualifier == nil)
-    NSLog(@"Note: no 'SOGoInternetDetectQualifier' configured.");
-  else
-    NSLog(@"Note: detect Internet access using: %@", internetDetectQualifier);
+    NSLog(@"UIxMailEditor: no 'SOGoInternetDetectQualifier' configured.");
+  else {
+    NSLog(@"UIxMailEditor: detect Internet access using: %@", 
+         internetDetectQualifier);
+  }
   
   internetMailHeaders = 
     [[ud dictionaryForKey:@"SOGoInternetMailHeaders"] copy];
@@ -167,7 +169,6 @@ static NSArray      *infoKeys = nil;
 /* detect webmail being accessed from the outside */
 
 - (BOOL)isInternetRequest {
-  // TODO: make configurable! (eg allow specification of a qualifier)
   WORequest *rq;
   
   rq = [[self context] request];