diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index f2935183..28f13685 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -72,6 +72,10 @@ 4C245BF1176E1E3D0086100E /* DispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C245B72176E1E3D0086100E /* DispatchQueueLogFormatter.m */; }; 4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C25D58616CF0FAA00F6806C /* EntryView.xib */; }; 4C2671AD17A7D8FC00F3A645 /* HNHColorWell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2671AC17A7D8FC00F3A645 /* HNHColorWell.m */; }; + 4C26C33F18D8C92100CF1A1C /* MPTemporaryFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C26C33E18D8C92100CF1A1C /* MPTemporaryFileStorage.m */; }; + 4C26C34718D8C9C400CF1A1C /* KPKBinary+Quickook.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C26C34618D8C9C400CF1A1C /* KPKBinary+Quickook.m */; }; + 4C26C34B18D8D5A300CF1A1C /* MPPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C26C34918D8D5A300CF1A1C /* MPPreviewViewController.m */; }; + 4C26C34C18D8D5A300CF1A1C /* PreviewView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C26C34A18D8D5A300CF1A1C /* PreviewView.xib */; }; 4C2724D71778FF1A00FD8456 /* NSUUID+KeePassKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2724D61778FF1A00FD8456 /* NSUUID+KeePassKit.m */; }; 4C2C8B341787500E009649F3 /* UnprotectedWarningView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */; }; 4C2E381D16D11FF900037A9D /* 03_ServerTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4C2E381A16D11FF900037A9D /* 03_ServerTemplate.pdf */; }; @@ -480,6 +484,13 @@ 4C25D58616CF0FAA00F6806C /* EntryView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EntryView.xib; sourceTree = ""; }; 4C2671AB17A7D8FC00F3A645 /* HNHColorWell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HNHColorWell.h; sourceTree = ""; }; 4C2671AC17A7D8FC00F3A645 /* HNHColorWell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HNHColorWell.m; sourceTree = ""; }; + 4C26C33D18D8C92100CF1A1C /* MPTemporaryFileStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTemporaryFileStorage.h; sourceTree = ""; }; + 4C26C33E18D8C92100CF1A1C /* MPTemporaryFileStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTemporaryFileStorage.m; sourceTree = ""; }; + 4C26C34518D8C9C400CF1A1C /* KPKBinary+Quickook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKBinary+Quickook.h"; sourceTree = ""; }; + 4C26C34618D8C9C400CF1A1C /* KPKBinary+Quickook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKBinary+Quickook.m"; sourceTree = ""; }; + 4C26C34818D8D5A300CF1A1C /* MPPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPreviewViewController.h; sourceTree = ""; }; + 4C26C34918D8D5A300CF1A1C /* MPPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPreviewViewController.m; sourceTree = ""; }; + 4C26C34A18D8D5A300CF1A1C /* PreviewView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PreviewView.xib; sourceTree = ""; }; 4C2724D51778FF1A00FD8456 /* NSUUID+KeePassKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSUUID+KeePassKit.h"; sourceTree = ""; }; 4C2724D61778FF1A00FD8456 /* NSUUID+KeePassKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSUUID+KeePassKit.m"; sourceTree = ""; }; 4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UnprotectedWarningView.xib; sourceTree = ""; }; @@ -951,6 +962,7 @@ 4C2C8B331787500E009649F3 /* UnprotectedWarningView.xib */, 4C4B7EE817A45EC5000234C7 /* DatePickingView.xib */, 4C0728BE17B68ED0005A7DD9 /* SavePanelAccessoryView.xib */, + 4C26C34A18D8D5A300CF1A1C /* PreviewView.xib */, 4C74DD05177BD1640034A9DB /* MPCustomFieldView.h */, 4C74DD06177BD1640034A9DB /* MPCustomFieldView.m */, 4CE8247316E2F2B900573141 /* MPOverlayView.h */, @@ -982,6 +994,8 @@ 4CC6DB7917D23719002C6091 /* KPKNode+IconImage.m */, 4CEED1C417D7BD0E007180F1 /* NSError+Messages.h */, 4CEED1C517D7BD0E007180F1 /* NSError+Messages.m */, + 4C26C34518D8C9C400CF1A1C /* KPKBinary+Quickook.h */, + 4C26C34618D8C9C400CF1A1C /* KPKBinary+Quickook.m */, ); name = Categories; sourceTree = ""; @@ -1191,6 +1205,8 @@ 4CB63A6018986530002DEC4C /* MPFlagsHelper.h */, 4C3C4EAD18D7039300153127 /* MPValueTransformerHelper.h */, 4C3C4EAE18D7039300153127 /* MPValueTransformerHelper.m */, + 4C26C33D18D8C92100CF1A1C /* MPTemporaryFileStorage.h */, + 4C26C33E18D8C92100CF1A1C /* MPTemporaryFileStorage.m */, ); name = Helper; sourceTree = ""; @@ -1532,6 +1548,8 @@ 4C0F647A17B6BC9C00D9522A /* MPSavePanelAccessoryViewController.m */, 4C1E9883185F71A800943563 /* MPContextBarViewController.h */, 4C1E9884185F71A800943563 /* MPContextBarViewController.m */, + 4C26C34818D8D5A300CF1A1C /* MPPreviewViewController.h */, + 4C26C34918D8D5A300CF1A1C /* MPPreviewViewController.m */, ); name = "View Controller"; sourceTree = ""; @@ -2028,6 +2046,7 @@ 4C7615681764C0C40015A1A6 /* PasswordInputView.xib in Resources */, 4C25D58716CF0FAA00F6806C /* EntryView.xib in Resources */, 4C586F9E16D07ABD00E7DB57 /* 00_PasswordTemplate.pdf in Resources */, + 4C26C34C18D8D5A300CF1A1C /* PreviewView.xib in Resources */, 4C586FA016D07D7200E7DB57 /* 01_PackageNetworkTemplate.pdf in Resources */, 4C586FA216D07F6A00E7DB57 /* 02_MessageBoxWarningTemplate.pdf in Resources */, 4C2E381D16D11FF900037A9D /* 03_ServerTemplate.pdf in Resources */, @@ -2232,6 +2251,7 @@ 4CD5D705177A5F3300100649 /* MPDatabaseSettingsWindowController.m in Sources */, 4C74DD07177BD1640034A9DB /* MPCustomFieldView.m in Sources */, 4C4FCE15177CFE6B00BBF7AE /* MPCustomFieldTableCellView.m in Sources */, + 4C26C34B18D8D5A300CF1A1C /* MPPreviewViewController.m in Sources */, 4C52A244177D7B9F0000D88F /* HNHScrollView.m in Sources */, 4CC7EA1B17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m in Sources */, 4C5FE9AE17843CE20001D5A8 /* MPSelectedAttachmentTableCellView.m in Sources */, @@ -2241,6 +2261,7 @@ 4C10412C178CDD44001B5239 /* NSDate+Humanized.m in Sources */, 4CD3ABBA178F71B50073F5C5 /* KPKTree.m in Sources */, 4CD3ABBF178F72610073F5C5 /* KPKEntry.m in Sources */, + 4C26C34718D8C9C400CF1A1C /* KPKBinary+Quickook.m in Sources */, 4CD3ABC2178F72720073F5C5 /* KPKGroup.m in Sources */, 4C591B57178F897A0080B16B /* KPKBinary.m in Sources */, 4C0C59F118B17F10009C7B76 /* DDHotKeyUtilities.m in Sources */, @@ -2270,6 +2291,7 @@ 4C1842BC179B434C00E2F5BC /* KPKXmlHeaderReader.m in Sources */, 4C1842C0179B5BFD00E2F5BC /* NSData+CommonCrypto.m in Sources */, 4C1842C3179B69E700E2F5BC /* NSData+HashedData.m in Sources */, + 4C26C33F18D8C92100CF1A1C /* MPTemporaryFileStorage.m in Sources */, 4C1842C6179BF52100E2F5BC /* KPKLegacyHeaderReader.m in Sources */, 4C1842D0179C64DD00E2F5BC /* KPKLegacyTreeCryptor.m in Sources */, 4CD2B9061849424B0051B395 /* MPAutotypeContext.m in Sources */, diff --git a/MacPass/KPKBinary+Quickook.h b/MacPass/KPKBinary+Quickook.h new file mode 100644 index 00000000..d9c5af73 --- /dev/null +++ b/MacPass/KPKBinary+Quickook.h @@ -0,0 +1,15 @@ +// +// KPKBinary+Quickook.h +// MacPass +// +// Created by Michael Starke on 18/03/14. +// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. +// + +#import "KPKBinary.h" + +@interface KPKBinary (Quickook) + +- (void)quicklock; + +@end diff --git a/MacPass/KPKBinary+Quickook.m b/MacPass/KPKBinary+Quickook.m new file mode 100644 index 00000000..826be3f0 --- /dev/null +++ b/MacPass/KPKBinary+Quickook.m @@ -0,0 +1,17 @@ +// +// KPKBinary+Quickook.m +// MacPass +// +// Created by Michael Starke on 18/03/14. +// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. +// + +#import "KPKBinary+Quickook.h" +#import "MPTemporaryFileStorage.h" +@implementation KPKBinary (Quickook) + +- (void)quicklock { + +} + +@end diff --git a/MacPass/MPPreviewViewController.h b/MacPass/MPPreviewViewController.h new file mode 100644 index 00000000..73b1d698 --- /dev/null +++ b/MacPass/MPPreviewViewController.h @@ -0,0 +1,13 @@ +// +// MPPreviewViewController.h +// MacPass +// +// Created by Michael Starke on 18/03/14. +// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. +// + +#import "MPViewController.h" + +@interface MPPreviewViewController : MPViewController + +@end diff --git a/MacPass/MPPreviewViewController.m b/MacPass/MPPreviewViewController.m new file mode 100644 index 00000000..fc9cfcad --- /dev/null +++ b/MacPass/MPPreviewViewController.m @@ -0,0 +1,22 @@ +// +// MPPreviewViewController.m +// MacPass +// +// Created by Michael Starke on 18/03/14. +// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. +// + +#import "MPPreviewViewController.h" + +@interface MPPreviewViewController () + +@end + +@implementation MPPreviewViewController + +- (instancetype)init { + self = [self initWithNibName:@"PreviewView" bundle:nil]; + return self; +} + +@end diff --git a/MacPass/MPTemporaryFileStorage.h b/MacPass/MPTemporaryFileStorage.h new file mode 100644 index 00000000..98b0ff8c --- /dev/null +++ b/MacPass/MPTemporaryFileStorage.h @@ -0,0 +1,23 @@ +// +// MPTemporaryFileStorage.h +// MacPass +// +// Created by Michael Starke on 18/03/14. +// Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. +// + +#import +/** + * Instance to handle a temporary file storage. Quicklook support uses this as a means to vent attachments to the system + * After using the file, the storage is removed. + */ + +@class KPKBinary; + +@interface MPTemporaryFileStorage : NSObject + +- (instancetype)initWithBinary:(KPKBinary *)binary; + +- (void)quicklook; + +@end diff --git a/MacPass/MPTemporaryFileStorage.m b/MacPass/MPTemporaryFileStorage.m new file mode 100644 index 00000000..44b9cfa0 --- /dev/null +++ b/MacPass/MPTemporaryFileStorage.m @@ -0,0 +1,50 @@ +;// + // MPTemporaryFileStorage.m + // MacPass + // + // Created by Michael Starke on 18/03/14. + // Copyright (c) 2014 HicknHack Software GmbH. All rights reserved. + // + +#import "MPTemporaryFileStorage.h" +#import "KPKBinary.h" + +#import + +@interface MPTemporaryFileStorage () + +@property (strong) KPKBinary *binary; + +@end + +@implementation MPTemporaryFileStorage + +- (instancetype)initWithBinary:(KPKBinary *)binary { + self = [super init]; + if(self) { + _binary = binary; + } + return self; +} + +- (void)quicklook { + + NSString *fileName = [NSString stringWithFormat:@"%@_%@", [[NSProcessInfo processInfo] globallyUniqueString], self.binary.name]; + NSURL *fileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]]; + + NSError *error; + BOOL success = [self.binary.data writeToURL:fileURL options:0 error:&error]; + if(!success) { + if(error) { + [NSApp presentError:error]; + } + return; + } + + NSTask *task = [[NSTask alloc] init]; + [task setLaunchPath:@"srm"]; + [task setArguments:@[@"-m", fileName]]; +} + + +@end diff --git a/MacPass/PreviewView.xib b/MacPass/PreviewView.xib new file mode 100644 index 00000000..e45dea5a --- /dev/null +++ b/MacPass/PreviewView.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +