From b2f012cae21339a290af2fd6f57a32871062a6b8 Mon Sep 17 00:00:00 2001 From: Jean Raby Date: Tue, 27 Aug 2013 12:56:07 -0400 Subject: [PATCH] Add SOGoCredentialsFile New class to read credentials files as used by sogo-tool and sogo-ealarm-notify --- SoObjects/SOGo/GNUmakefile | 9 ++- SoObjects/SOGo/SOGoCredentialsFile.h | 43 ++++++++++ SoObjects/SOGo/SOGoCredentialsFile.m | 113 +++++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 SoObjects/SOGo/SOGoCredentialsFile.h create mode 100644 SoObjects/SOGo/SOGoCredentialsFile.m diff --git a/SoObjects/SOGo/GNUmakefile b/SoObjects/SOGo/GNUmakefile index 43bce3e54..ca342a038 100644 --- a/SoObjects/SOGo/GNUmakefile +++ b/SoObjects/SOGo/GNUmakefile @@ -67,7 +67,9 @@ SOGo_HEADER_FILES = \ WORequest+SOGo.h \ WOResourceManager+SOGo.h \ WOResponse+SOGo.h \ - WOContext+SOGo.h + WOContext+SOGo.h \ + \ + SOGoCredentialsFile.h # daemon tool all:: @@ -136,7 +138,10 @@ SOGo_OBJC_FILES = \ WORequest+SOGo.m \ WOResourceManager+SOGo.m \ WOResponse+SOGo.m \ - WOContext+SOGo.m + WOContext+SOGo.m \ + \ + SOGoCredentialsFile.m + SOGo_RESOURCE_FILES = \ SOGoDefaults.plist \ diff --git a/SoObjects/SOGo/SOGoCredentialsFile.h b/SoObjects/SOGo/SOGoCredentialsFile.h new file mode 100644 index 000000000..b6946faba --- /dev/null +++ b/SoObjects/SOGo/SOGoCredentialsFile.h @@ -0,0 +1,43 @@ +/* SOGoCredentialsFile.h - this file is part of SOGo + * + * Copyright (C) 2013 Inverse inc. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef SOGOCREDENTIALSFILE_H +#define SOGOCREDENTIALSFILE_H + +#import + +@interface SOGoCredentialsFile : NSObject +{ + NSString *_credentialsFile; + NSString *_username, *_password; +} + ++ (id) credentialsFromFile: (NSString *) file; + +- (id) initFromFile: (NSString *) file + withEncoding: (NSStringEncoding) enc; + +- (NSString *) username; +- (NSString *) password; +- (NSString *) credentialsFile; + +@end + +#endif /* SOGOCREDENTIALSFILE_H */ diff --git a/SoObjects/SOGo/SOGoCredentialsFile.m b/SoObjects/SOGo/SOGoCredentialsFile.m new file mode 100644 index 000000000..a13a7483e --- /dev/null +++ b/SoObjects/SOGo/SOGoCredentialsFile.m @@ -0,0 +1,113 @@ +/* SOGoCredentialsFile.m - this file is part of SOGo + * + * Copyright (C) 2013 Inverse inc. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import +#import +#import + +#import "SOGoCredentialsFile.h" + +@implementation SOGoCredentialsFile + ++ (id) credentialsFromFile: (NSString *) file +{ + SOGoCredentialsFile *newCreds; + newCreds = [[self alloc] initFromFile: file + withEncoding: NSUTF8StringEncoding]; + [newCreds autorelease]; + return newCreds; +} + + +- (id) init +{ + if ((self = [super init])) + { + _username = nil; + _password = nil; + _credentialsFile = nil; + } + return self; +} + +- (void) dealloc +{ + [_username release]; + [_password release]; + [_credentialsFile release]; + [super dealloc]; +} + +- (id) initFromFile: (NSString *) file + withEncoding: (NSStringEncoding) enc +{ + id ret; + NSData *credentialsData; + NSRange r; + NSString *creds; + + ret = nil; + if (file) + { + if ((self = [self init])) + { + credentialsData = [NSData dataWithContentsOfFile: file]; + if (credentialsData == nil) + NSLog(@"Failed to load credentials file: %@", file); + else + { + creds = [[NSString alloc] initWithData: credentialsData + encoding: enc]; + [creds autorelease]; + creds = [creds stringByTrimmingCharactersInSet: + [NSCharacterSet characterSetWithCharactersInString: @"\r\n"]]; + r = [creds rangeOfString: @":"]; + if (r.location == NSNotFound) + NSLog(@"Invalid credentials file content, missing ':' separator (%@)", file); + else + { + _username = [[creds substringToIndex: r.location] retain]; + _password = [[creds substringFromIndex: r.location+1] retain]; + _credentialsFile = [file retain]; + ret = self; + } + } + } + } + return ret; +} + + +- (NSString *) username +{ + return self->_username; +} + +- (NSString *) password +{ + return self->_password; +} + +- (NSString *) credentialsFile +{ + return self->_credentialsFile; +} + +@end