+2005-02-10 Helge Hess <helge.hess@skyrix.com>
+
+ * sogod.m: moved application class to own file, started to work on
+ daemon/product separation (v0.9.19)
+
2004-01-07 Marcus Mueller <znek@mulle-kybernetik.com>
* {English/French}.lproj/default.strings: changed encoding from
include $(GNUSTEP_MAKEFILES)/common.make
-WOAPP_NAME = sogod
+WOAPP_NAME = sogod
+BUNDLE_NAME = MainUI
+BUNDLE_EXTENSION = .SOGo
+BUNDLE_INSTALL_DIR = $(GNUSTEP_USER_ROOT)/Library/SOGo
-sogod_LANGUAGES = English French
+# daemon tool
sogod_OBJC_FILES += \
sogod.m \
+ SOGo.m \
SOGoProductLoader.m \
SOGoAuthenticator.m \
- \
+
+# product
+
+MainUI_PRINCIPAL_CLASS = MainUIProduct
+
+sogod_LANGUAGES = English French
+
+sogod_OBJC_FILES += \
+ MainUIProduct.m \
SOGoRootPage.m \
SOGoUserHomePage.m \
SOGoGroupPage.m \
sogod_LOCALIZED_RESOURCE_FILES += \
Locale default.strings
-sogod_WEBSERVER_RESOURCE_FILES +=
-
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/woapp.make
+#include $(GNUSTEP_MAKEFILES)/bundle.make
-include GNUmakefile.postamble
--- /dev/null
+/*
+ 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.
+*/
+
+#import <Foundation/NSObject.h>
+
+@interface MainUIProduct : NSObject
+{
+}
+
+@end
+
+@implementation MainUIProduct
+@end /* MainUIProduct */
-# $Id$
-
SOGo
====
SOGoCrashOnSessionCreate - bool - crash the server if a session is created
=> useful for debugging
+
+What it does
+============
+- provides locale support
+- preloads the SOGo products (SOGoProductLoader)
+- provides the root object (the application object with user lookup)
+- sets the authenticator
+- does some process limits and restart support
--- /dev/null
+/*
+ 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/SoApplication.h>
+
+@interface SOGo : SoApplication
+{
+ NSMutableDictionary *localeLUT;
+}
+
+- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs;
+- (NSDictionary *)localeForLanguageNamed:(NSString *)_name;
+
+@end
+
+#include "SOGoAuthenticator.h"
+#include "SOGoProductLoader.h"
+#include <SOGo/SOGoUserFolder.h>
+#include "common.h"
+
+@implementation SOGo
+
+static unsigned int vMemSizeLimit = 0;
+static BOOL doCrashOnSessionCreate = NO;
+
++ (void)initialize {
+ NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
+ id tmp;
+
+ doCrashOnSessionCreate = [ud boolForKey:@"SOGoCrashOnSessionCreate"];
+
+ /* vMem size check - default is 200MB */
+
+ tmp = [ud objectForKey:@"SxVMemLimit"];
+ vMemSizeLimit = (tmp != nil)
+ ? [tmp intValue]
+ : 200;
+ if (vMemSizeLimit > 0) {
+ NSLog(@"Note: vmem size check enabled: shutting down app when "
+ @"vmem > %d MB", vMemSizeLimit);
+ }
+}
+
+- (id)init {
+ if ((self = [super init])) {
+ self->localeLUT = [[NSMutableDictionary alloc] initWithCapacity:2];
+ [[SOGoProductLoader productLoader] loadProducts];
+
+#if 0 /* enable, if we added the value class */
+ /* setup some WebDAV type mappings required for Evolution */
+ [EOQualifier registerValueClass:NSClassFromString(@"dateTime")
+ forTypeName:@"dateTime"];
+ [EOQualifier registerValueClass:NSClassFromString(@"dateTime")
+ forTypeName:@"dateTime.tz"];
+#endif
+
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [self->localeLUT release];
+ [super dealloc];
+}
+
+/* authenticator */
+
+- (id)authenticatorInContext:(WOContext *)_ctx {
+ return [SOGoAuthenticator sharedSOGoAuthenticator];
+}
+
+/* name lookup */
+
+- (BOOL)isUserName:(NSString *)_key inContext:(id)_ctx {
+ if ([_key length] < 1)
+ return NO;
+
+ if (isdigit([_key characterAtIndex:0]))
+ return NO;
+
+ return YES;
+}
+
+- (id)lookupUser:(NSString *)_key inContext:(id)_ctx {
+ return [[[SOGoUserFolder alloc] initWithName:_key inContainer:self]
+ autorelease];
+}
+
+- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
+ id obj;
+
+ /* put locale info into the context in case it's not there */
+ if (![_ctx valueForKey:@"locale"]) {
+ NSArray *langs;
+ NSDictionary *locale;
+
+ langs = [[(WOContext *)_ctx request] browserLanguages];
+ locale = [self currentLocaleConsideringLanguages:langs];
+ [_ctx takeValue:locale forKey:@"locale"];
+ }
+
+#if 0 // znek: explain why you did that?
+ /* set SoRootURL */
+ if ([_ctx valueForKey:@"SoRootURL"] == nil) {
+ [_ctx takeValue:@"/sogod.woa/so/" forKey:@"SoRootURL"];
+ }
+#endif
+
+ /* first check attributes directly bound to the application */
+ if ((obj = [super lookupName:_key inContext:_ctx acquire:_flag]))
+ return obj;
+
+ /*
+ The problem is, that at this point we still get request for resources,
+ eg 'favicon.ico'.
+
+ Addition: we also get queries for various other methods, like "GET" if
+ no method was provided in the query path.
+ */
+
+ if ([_key isEqualToString:@"favicon.ico"])
+ return nil;
+
+ if ([self isUserName:_key inContext:_ctx])
+ return [self lookupUser:_key inContext:_ctx];
+
+ return nil;
+}
+
+/* WebDAV */
+
+- (NSString *)davDisplayName {
+ /* this is used in the UI, eg in the navigation */
+ return @"SOGo";
+}
+
+/* exception handling */
+
+- (WOResponse *)handleException:(NSException *)_exc
+ inContext:(WOContext *)_ctx
+{
+ printf("EXCEPTION: %s\n", [[_exc description] cString]);
+ abort();
+}
+
+/* runtime maintenance */
+
+- (void)checkIfDaemonHasToBeShutdown {
+ unsigned int limit, vmem;
+
+ if ((limit = vMemSizeLimit) == 0)
+ return;
+
+ vmem = [[NSProcessInfo processInfo] virtualMemorySize]/1048576;
+
+ if (vmem > limit) {
+ [self logWithFormat:
+ @"terminating app, vMem size limit (%d MB) has been reached"
+ @" (currently %d MB)",
+ limit, vmem];
+ [self terminate];
+ }
+}
+
+- (WOResponse *)dispatchRequest:(WORequest *)_request {
+ static NSArray *runLoopModes = nil;
+ WOResponse *resp;
+
+ resp = [super dispatchRequest:_request];
+
+ if ([self isTerminating])
+ return resp;
+
+ if (runLoopModes == nil)
+ runLoopModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, nil];
+
+ // TODO: a bit complicated? (-perform:afterDelay: doesn't work?)
+ [[NSRunLoop currentRunLoop] performSelector:
+ @selector(checkIfDaemonHasToBeShutdown)
+ target:self argument:nil
+ order:1 modes:runLoopModes];
+ return resp;
+}
+
+/* session management */
+
+- (WOSession *)createSessionForRequest:(WORequest *)_request {
+ [self warnWithFormat:@"session creation requested!"];
+ if (doCrashOnSessionCreate)
+ abort();
+ return [super createSessionForRequest:_request];
+}
+
+/* localization */
+
+- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs {
+ unsigned i, count;
+
+ /* assume _langs is ordered by priority */
+ count = [_langs count];
+ for (i = 0; i < count; i++) {
+ NSString *lname;
+ NSDictionary *locale;
+
+ lname = [_langs objectAtIndex:i];
+ locale = [self localeForLanguageNamed:lname];
+ if (locale)
+ return locale;
+ }
+ /* no appropriate language, fallback to default */
+ return [self localeForLanguageNamed:@"English"];
+}
+
+- (NSDictionary *)localeForLanguageNamed:(NSString *)_name {
+ NSString *lpath;
+ id data;
+ NSDictionary *locale;
+
+ NSAssert(_name != nil, @"_name MUST NOT be nil!");
+ if((locale = [self->localeLUT objectForKey:_name]) != nil)
+ return locale;
+ lpath = [[self resourceManager]
+ pathForResourceNamed:@"Locale"
+ inFramework:nil
+ languages:[NSArray arrayWithObject:_name]];
+
+ data = [NSData dataWithContentsOfFile:lpath];
+ if(data == nil) {
+ NSLog(@"%s didn't find locale with name:%@",
+ __PRETTY_FUNCTION__,
+ _name);
+ return nil;
+ }
+ data = [[[NSString alloc] initWithData:data
+ encoding:NSUTF8StringEncoding] autorelease];
+ locale = [data propertyList];
+ if(locale == nil) {
+ NSLog(@"%s couldn't load locale with name:%@",
+ __PRETTY_FUNCTION__,
+ _name);
+ return nil;
+ }
+ [self->localeLUT setObject:locale forKey:_name];
+ return locale;
+}
+
+@end /* SOGo */
-# $Id$
+# Version file
-SUBMINOR_VERSION:=18
+SUBMINOR_VERSION:=19
# v0.9.16 requires NGExtensions v4.5.136
/*
- Copyright (C) 2004 SKYRIX Software AG
+ Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
-// $Id$
-#include <NGObjWeb/SoApplication.h>
-
-@interface SOGo : SoApplication
-{
- NSMutableDictionary *localeLUT;
-}
-
-- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs;
-- (NSDictionary *)localeForLanguageNamed:(NSString *)_name;
-
-@end
-
-#include "SOGoAuthenticator.h"
-#include "SOGoProductLoader.h"
-#include <SOGo/SOGoUserFolder.h>
+#include <NGObjWeb/NGObjWeb.h>
#include "common.h"
-@implementation SOGo
-
-static unsigned int vMemSizeLimit = 0;
-static BOOL doCrashOnSessionCreate = NO;
-
-+ (void)initialize {
- NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
- id tmp;
-
- doCrashOnSessionCreate = [ud boolForKey:@"SOGoCrashOnSessionCreate"];
-
- /* vMem size check - default is 200MB */
-
- tmp = [ud objectForKey:@"SxVMemLimit"];
- vMemSizeLimit = (tmp != nil)
- ? [tmp intValue]
- : 200;
- if (vMemSizeLimit > 0) {
- NSLog(@"Note: vmem size check enabled: shutting down app when "
- @"vmem > %d MB", vMemSizeLimit);
- }
-}
-
-- (id)init {
- if ((self = [super init])) {
- self->localeLUT = [[NSMutableDictionary alloc] initWithCapacity:2];
- [[SOGoProductLoader productLoader] loadProducts];
-
-#if 0 /* enable, if we added the value class */
- /* setup some WebDAV type mappings required for Evolution */
- [EOQualifier registerValueClass:NSClassFromString(@"dateTime")
- forTypeName:@"dateTime"];
- [EOQualifier registerValueClass:NSClassFromString(@"dateTime")
- forTypeName:@"dateTime.tz"];
-#endif
-
- }
- return self;
-}
-
-- (void)dealloc {
- [self->localeLUT release];
- [super dealloc];
-}
-
-/* authenticator */
-
-- (id)authenticatorInContext:(WOContext *)_ctx {
- return [SOGoAuthenticator sharedSOGoAuthenticator];
-}
-
-/* name lookup */
-
-- (BOOL)isUserName:(NSString *)_key inContext:(id)_ctx {
- if ([_key length] < 1)
- return NO;
-
- if (isdigit([_key characterAtIndex:0]))
- return NO;
-
- return YES;
-}
-
-- (id)lookupUser:(NSString *)_key inContext:(id)_ctx {
- return [[[SOGoUserFolder alloc] initWithName:_key inContainer:self]
- autorelease];
-}
-
-- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
- id obj;
-
- /* put locale info into the context in case it's not there */
- if (![_ctx valueForKey:@"locale"]) {
- NSArray *langs;
- NSDictionary *locale;
-
- langs = [[(WOContext *)_ctx request] browserLanguages];
- locale = [self currentLocaleConsideringLanguages:langs];
- [_ctx takeValue:locale forKey:@"locale"];
- }
-
-#if 0 // znek: explain why you did that?
- /* set SoRootURL */
- if ([_ctx valueForKey:@"SoRootURL"] == nil) {
- [_ctx takeValue:@"/sogod.woa/so/" forKey:@"SoRootURL"];
- }
-#endif
-
- /* first check attributes directly bound to the application */
- if ((obj = [super lookupName:_key inContext:_ctx acquire:_flag]))
- return obj;
-
- /*
- The problem is, that at this point we still get request for resources,
- eg 'favicon.ico'.
-
- Addition: we also get queries for various other methods, like "GET" if
- no method was provided in the query path.
- */
-
- if ([_key isEqualToString:@"favicon.ico"])
- return nil;
-
- if ([self isUserName:_key inContext:_ctx])
- return [self lookupUser:_key inContext:_ctx];
-
- return nil;
-}
-
-/* WebDAV */
-
-- (NSString *)davDisplayName {
- /* this is used in the UI, eg in the navigation */
- return @"SOGo";
-}
-
-/* exception handling */
-
-- (WOResponse *)handleException:(NSException *)_exc
- inContext:(WOContext *)_ctx
-{
- printf("EXCEPTION: %s\n", [[_exc description] cString]);
- abort();
-}
-
-/* runtime maintenance */
-
-- (void)checkIfDaemonHasToBeShutdown {
- unsigned int limit, vmem;
-
- if ((limit = vMemSizeLimit) == 0)
- return;
-
- vmem = [[NSProcessInfo processInfo] virtualMemorySize]/1048576;
-
- if (vmem > limit) {
- [self logWithFormat:
- @"terminating app, vMem size limit (%d MB) has been reached"
- @" (currently %d MB)",
- limit, vmem];
- [self terminate];
- }
-}
-
-- (WOResponse *)dispatchRequest:(WORequest *)_request {
- static NSArray *runLoopModes = nil;
- WOResponse *resp;
-
- resp = [super dispatchRequest:_request];
-
- if ([self isTerminating])
- return resp;
-
- if (runLoopModes == nil)
- runLoopModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, nil];
-
- // TODO: a bit complicated? (-perform:afterDelay: doesn't work?)
- [[NSRunLoop currentRunLoop] performSelector:
- @selector(checkIfDaemonHasToBeShutdown)
- target:self argument:nil
- order:1 modes:runLoopModes];
- return resp;
-}
-
-/* session management */
-
-- (WOSession *)createSessionForRequest:(WORequest *)_request {
- [self warnWithFormat:@"session creation requested!"];
- if (doCrashOnSessionCreate)
- abort();
- return [super createSessionForRequest:_request];
-}
-
-/* localization */
-
-- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs {
- unsigned i, count;
-
- /* assume _langs is ordered by priority */
- count = [_langs count];
- for (i = 0; i < count; i++) {
- NSString *lname;
- NSDictionary *locale;
-
- lname = [_langs objectAtIndex:i];
- locale = [self localeForLanguageNamed:lname];
- if (locale)
- return locale;
- }
- /* no appropriate language, fallback to default */
- return [self localeForLanguageNamed:@"English"];
-}
-
-- (NSDictionary *)localeForLanguageNamed:(NSString *)_name {
- NSString *lpath;
- id data;
- NSDictionary *locale;
-
- NSAssert(_name != nil, @"_name MUST NOT be nil!");
- if((locale = [self->localeLUT objectForKey:_name]) != nil)
- return locale;
- lpath = [[self resourceManager]
- pathForResourceNamed:@"Locale"
- inFramework:nil
- languages:[NSArray arrayWithObject:_name]];
-
- data = [NSData dataWithContentsOfFile:lpath];
- if(data == nil) {
- NSLog(@"%s didn't find locale with name:%@",
- __PRETTY_FUNCTION__,
- _name);
- return nil;
- }
- data = [[[NSString alloc] initWithData:data
- encoding:NSUTF8StringEncoding] autorelease];
- locale = [data propertyList];
- if(locale == nil) {
- NSLog(@"%s couldn't load locale with name:%@",
- __PRETTY_FUNCTION__,
- _name);
- return nil;
- }
- [self->localeLUT setObject:locale forKey:_name];
- return locale;
-}
-
-@end /* SOGo */
-
-
int main(int argc, char **argv, char **env) {
NSAutoreleasePool *pool;
/*
- Copyright (C) 2000-2003 SKYRIX Software AG
+ Copyright (C) 2004-2005 SKYRIX Software AG
- This file is part of OGo
+ 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, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
-// $Id: CommonUIProduct.m,v 1.1 2003/11/24 01:24:40 helge Exp $
#import <Foundation/NSObject.h>
@end
-#include "common.h"
-
@implementation CommonUIProduct
@end /* CommonUIProduct */
-# $Id: GNUmakefile,v 1.2 2003/12/09 17:38:42 helge Exp $
+# GNUstep makefile
include $(GNUSTEP_MAKEFILES)/common.make