(feat) added S/MIME file download support

This commit is contained in:
Ludovic Marcotte 2017-12-23 06:06:23 -05:00
parent 64a7b8a797
commit 6294d91180

View file

@ -1,14 +1,15 @@
/* /*
Copyright (C) 2005-2017 Inverse inc.
Copyright (C) 2004-2005 SKYRIX Software AG Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org. This file is part of SOGo.
OGo is free software; you can redistribute it and/or modify it under SOGo 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 the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any Free Software Foundation; either version 2, or (at your option) any
later version. later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY SOGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details. License for more details.
@ -32,12 +33,15 @@
#import <NGExtensions/NGBase64Coding.h> #import <NGExtensions/NGBase64Coding.h>
#import <NGExtensions/NGQuotedPrintableCoding.h> #import <NGExtensions/NGQuotedPrintableCoding.h>
#import <NGImap4/NGImap4Connection.h> #import <NGImap4/NGImap4Connection.h>
#import <NGMail/NGMimeMessage.h>
#import <NGMime/NGMimeMultipartBody.h>
#import <SoObjects/SOGo/NSDictionary+Utilities.h> #import <SoObjects/SOGo/NSDictionary+Utilities.h>
#import "NSData+SMIME.h"
#import "NSDictionary+Mail.h" #import "NSDictionary+Mail.h"
#import "SOGoMailObject.h" #import "SOGoMailObject.h"
#import "SOGoMailAccount.h"
#import "SOGoMailBodyPart.h" #import "SOGoMailBodyPart.h"
@implementation SOGoMailBodyPart @implementation SOGoMailBodyPart
@ -250,10 +254,9 @@ static BOOL debugOn = NO;
NSString *enc; NSString *enc;
NSData *data; NSData *data;
data = [[self imap4Connection] fetchContentOfBodyPart: data = [[self imap4Connection] fetchContentOfBodyPart: [self bodyPartIdentifier]
[self bodyPartIdentifier] atURL: [self imap4URL]
atURL:[self imap4URL] withPeek: withPeek];
withPeek: withPeek];
if (data == nil) return nil; if (data == nil) return nil;
/* check for content encodings */ /* check for content encodings */
@ -289,6 +292,26 @@ static BOOL debugOn = NO;
- (NSData *) fetchBLOB - (NSData *) fetchBLOB
{ {
if ([[self container] isEncrypted])
{
NSData *certificate;
certificate = [[self mailAccountFolder] certificate];
// If we got a user certificate, let's use it. Otherwise we fallback
// to the current BLOB fetching code.
if (certificate)
{
NGMimeMessage *m;
id part;
m = [[container content] messageFromEncryptedDataAndCertificate: certificate];
part = [[[m body] parts] objectAtIndex: ([[self nameInContainer] intValue]-1)];
return [part body];
}
}
return [self fetchBLOBWithPeek: NO]; return [self fetchBLOBWithPeek: NO];
} }