]> err.no Git - scalable-opengroupware.org/commitdiff
added automatic redirect on login
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 21 Jul 2005 09:51:19 +0000 (09:51 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Thu, 21 Jul 2005 09:51:19 +0000 (09:51 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@865 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/Main/ChangeLog
SOGo/Main/README
SOGo/Main/SOGoRootPage.m
SOGo/Main/Version
SOGo/Main/product.plist

index 9253a79b530ed20f13bd353633585b20fb0b16a7..4b5b564e1b17c1cb8285ebabb5a135e60a09808e 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-21  Helge Hess  <helge.hess@opengroupware.org>
+
+       * SOGoRootPage.m: redirect authenticated users to their login page
+         (v0.9.37)
+
 2005-07-21  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * homepage.js: fixed post to send an empty string instead of null -
index a1972b4f468fc792c474f54e71da71463a0b4659..36c80043356b3a02844bef2b7ba8dad0b4e2f31d 100644 (file)
@@ -30,10 +30,14 @@ SOGoInternetDetectQualifier
   Note: all header field names are lowercase
   Testing: -SOGoInternetDetectQualifier '"host = \"agenor.opengroupware.org\""'
 
-AgenorProfileURL
+AgenorProfileURL - URL
 - configure database location of the user profile
   eg: http://postgres:@agenor-db:5432/test/sogo_user_profile
 
+SOGoDoNotRedirectRootPage - YES|NO
+- do not redirect to home-folder for authenticated users but show the
+  root page (with the login name)
+
 What it does
 ============
 - provides locale support
index 506856d2afd3bc22014020a6fa46b533a1d0e32d..788662f3e57d45b3988fea55e5468b852672287d 100644 (file)
@@ -1,4 +1,23 @@
-// $Id$
+/*
+  Copyright (C) 2004-2005 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
 
 #include <NGObjWeb/SoComponent.h>
 
 
 @end
 
+#include <SOGo/SOGoAuthenticator.h>
 #include "common.h"
 
 @implementation SOGoRootPage
 
-- (id)initWithContext:(id)_ctx {
-  if ((self = [super initWithContext:_ctx])) {
-  }
-  return self;
+static BOOL doNotRedirect = NO;
+
++ (void)initialize {
+  NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
+  
+  if ((doNotRedirect = [ud boolForKey:@"SOGoDoNotRedirectRootPage"]))
+    NSLog(@"SOGoRootPage: home-page redirect is disabled.");
 }
 
 - (void)dealloc {
   return [self redirectToLocation:url];
 }
 
+- (id)defaultAction {
+  WOResponse *r;
+  NSString *login, *rhk;
+  id auth, user;
+  id home, base;
+
+  if (doNotRedirect)
+    return self;
+  
+  /* 
+     Note: ctx.activeUser is NOT set here. Don't know why, so we retrieve
+           the user from the authenticator.
+  */
+  
+  auth  = [[self clientObject] authenticatorInContext:[self context]];
+  user  = [auth userInContext:[self context]];
+  login = [user login];
+  
+  if ([login isEqualToString:@"anonymous"]) {
+    /* use root page for unauthenticated users */
+    return self;
+  }
+
+  /* check base */
+  
+  base = [self application];
+  rhk = [[[self context] request] requestHandlerKey];
+  if (([rhk length] == 0) || ([base requestHandlerForKey:rhk] == nil)) {
+    base = [base lookupName:@"so" inContext:[self context] acquire:NO];
+    
+    if (![base isNotNull] || [base isKindOfClass:[NSException class]]) {
+      /* use root page if home could not be found */
+      [self errorWithFormat:@"Did not find 'so' request handler!"];
+      return self;
+    }
+  }
+  
+  /* lookup home-page */
+
+  home = [base lookupName:login inContext:[self context] acquire:NO];
+  if (![home isNotNull] || [home isKindOfClass:[NSException class]]) {
+    /* use root page if home could not be found */
+    return self;
+  }
+  
+  /* redirect to home-page */
+  
+  r = [[self context] response];
+  [r setStatus:302 /* moved */];
+  [r setHeader:[home baseURLInContext:[self context]] forKey:@"location"];
+  return r;
+}
+
 /* response generation */
 
 - (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx {
index b991595c0e26e9832a2cce7e9c5159c9cf35c268..3dff6564fdb1b086044a176381a43eb7424bdd0d 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=36
+SUBMINOR_VERSION:=37
 
 # v0.9.32 requires libSOGo         v0.9.57
 # v0.9.24 requires libWEExtensions v4.5.67
index fb29d2e7e0273de97522df4ac30b217f0ed8aa97..c0bc30bdcdade41f91ceb4e78aad95e3fdc4836e 100644 (file)
       };
     };
 
+    SOGoRootPage = {
+      superclass    = "SoComponent";
+      protectedBy   = "View";
+      defaultRoles = {
+        "View" = "Authenticated";
+      };
+    };
+
     SOGoObject = {
       protectedBy   = "View";
       defaultAccess = "allow";