diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 3d5bece1..6c1c02bb 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -215,6 +215,7 @@ 4CA4B3461FC8833A007DF507 /* PickcharView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4CA4B3451FC88339007DF507 /* PickcharView.xib */; }; 4CA78C001FD58C92003C8560 /* MPPluginRepository.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA78BFF1FD58C92003C8560 /* MPPluginRepository.m */; }; 4CAAA8271D787B8B00CDE977 /* MPAutotypeBuilderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAAA8251D787B8B00CDE977 /* MPAutotypeBuilderViewController.m */; }; + 4CAD338F205169D30068587E /* MPPluginRepositoryItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CAD338E205169D30068587E /* MPPluginRepositoryItem.m */; }; 4CAD748C15B889B700104512 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748B15B889B700104512 /* Security.framework */; }; 4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748D15B88AC100104512 /* libz.dylib */; }; 4CB33F861EAF54A000C9341E /* KPKNode+MPIsHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CB33F851EAF54A000C9341E /* KPKNode+MPIsHistory.m */; }; @@ -726,6 +727,8 @@ 4CA78BFF1FD58C92003C8560 /* MPPluginRepository.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginRepository.m; sourceTree = ""; }; 4CAAA8241D787B8B00CDE977 /* MPAutotypeBuilderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAutotypeBuilderViewController.h; sourceTree = ""; }; 4CAAA8251D787B8B00CDE977 /* MPAutotypeBuilderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAutotypeBuilderViewController.m; sourceTree = ""; }; + 4CAD338D205169D30068587E /* MPPluginRepositoryItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPluginRepositoryItem.h; sourceTree = ""; }; + 4CAD338E205169D30068587E /* MPPluginRepositoryItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPPluginRepositoryItem.m; sourceTree = ""; }; 4CAD748B15B889B700104512 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 4CAD748D15B88AC100104512 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; 4CB33F841EAF54A000C9341E /* KPKNode+MPIsHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKNode+MPIsHistory.h"; sourceTree = ""; }; @@ -1623,6 +1626,8 @@ 4C8F0C6D1FCEE9B900BE157F /* MPPluginConstants.m */, 4CA78BFE1FD58C92003C8560 /* MPPluginRepository.h */, 4CA78BFF1FD58C92003C8560 /* MPPluginRepository.m */, + 4CAD338D205169D30068587E /* MPPluginRepositoryItem.h */, + 4CAD338E205169D30068587E /* MPPluginRepositoryItem.m */, 4C735FBE2035FCBF00708D53 /* MPPluginEntryActionContext.h */, 4C735FBF2035FCBF00708D53 /* MPPluginEntryActionContext.m */, ); @@ -1953,6 +1958,7 @@ 4C6F228919A4A7F90012310C /* MPAutotypeClear.m in Sources */, 4C0B038C18E36DA400B9F9C9 /* MPFixAutotypeWindowController.m in Sources */, 4C7679BF1D76D6D8001F33D6 /* MPErrorRecoveryAttempter.m in Sources */, + 4CAD338F205169D30068587E /* MPPluginRepositoryItem.m in Sources */, 4C9BFFFB1FD19B5400264B16 /* MPPrettyPasswordTransformer.m in Sources */, 4CA0F3ED1A3074B50067C0E5 /* MPWindowTitleComboBoxDelegate.m in Sources */, 4CF78064176E75AD0032EE71 /* MPIntegrationSettingsController.m in Sources */, diff --git a/MacPass/MPConstants.m b/MacPass/MPConstants.m index da7107f4..15ecb541 100644 --- a/MacPass/MPConstants.m +++ b/MacPass/MPConstants.m @@ -28,6 +28,6 @@ NSString *const MPKdbxDocumentUTI = @"com.hicknhack.macpass.kdbx"; NSString *const MPPluginUTI = @"com.hicknhack.macpass.plugin"; NSString *const MPBundleHelpURLKey = @"MPHelpURL"; -NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURL"; -NSString *const MPBundlePluginCompaibilityURLKey = @"MPPluginCompaibilityURL"; +NSString *const MPBundlePluginRepositoryURLKey = @"MPPluginRepositoryURLKey"; +NSString *const MPBundlePluginCompadibilityURLKey = @"MPPluginCompadibilityURLKey"; diff --git a/MacPass/MPPluginConstants.h b/MacPass/MPPluginConstants.h index d00a36ff..ef3cfed6 100644 --- a/MacPass/MPPluginConstants.h +++ b/MacPass/MPPluginConstants.h @@ -13,7 +13,4 @@ FOUNDATION_EXPORT NSString *const MPPluginFileExtension; -FOUNDATION_EXPORT NSString *const MPPluginMinimumHostVersionKey; -FOUNDATION_EXPORT NSString *const MPPluginMaxiumHostVersoinKey; - #endif /* MPPluginConstants_h */ diff --git a/MacPass/MPPluginRepository.h b/MacPass/MPPluginRepository.h index 9c037df2..ecc72ba0 100644 --- a/MacPass/MPPluginRepository.h +++ b/MacPass/MPPluginRepository.h @@ -6,26 +6,14 @@ // Copyright © 2017 HicknHack Software GmbH. All rights reserved. // -#import +@import Foundation; -@interface MPPluginRespositoryItem : NSObject - -@property (copy) NSString *name; -@property (copy) NSString *version; -@property (copy) NSString *descriptionText; -@property (copy) NSURL *sourceURL; -@property (copy) NSURL *downloadURL; -@property (readonly, nonatomic, getter=isVaid) BOOL valid; - -+ (instancetype)pluginItemFromDictionary:(NSDictionary *)dict; -- (instancetype)initWithDictionary:(NSDictionary *)dict; - -@end +@class MPPluginRepositoryItem; @interface MPPluginRepository : NSObject -@property (nonatomic, copy) NSArray *availablePlugins; +@property (class, strong, readonly) MPPluginRepository *sharedRespoitory; +@property (nonatomic, copy) NSArray *availablePlugins; -+ (instancetype)sharedRespoitory; @end diff --git a/MacPass/MPPluginRepository.m b/MacPass/MPPluginRepository.m index 456405a9..a2bc9256 100644 --- a/MacPass/MPPluginRepository.m +++ b/MacPass/MPPluginRepository.m @@ -8,39 +8,7 @@ #import "MPPluginRepository.h" #import "MPConstants.h" - -NSString *const MPPluginItemNameKey = @"name"; -NSString *const MPPluginItemDescriptionKey = @"description"; -NSString *const MPPluginItemDownloadURLKey = @"download"; -NSString *const MPPluginItemSourceURLKey = @"source"; -NSString *const MPPluginItemVersionKey = @"version"; - -@implementation MPPluginRespositoryItem - -@dynamic valid; - -+ (instancetype)pluginItemFromDictionary:(NSDictionary *)dict { - return [[MPPluginRespositoryItem alloc] initWithDictionary:dict]; -} - -- (instancetype)initWithDictionary:(NSDictionary *)dict { - self = [super init]; - if(self) { - self.name = dict[MPPluginItemNameKey]; - self.descriptionText = dict[MPPluginItemDescriptionKey]; - self.downloadURL = [NSURL URLWithString:dict[MPPluginItemDownloadURLKey]]; - self.sourceURL = [NSURL URLWithString:dict[MPPluginItemSourceURLKey]]; - self.version = dict[MPPluginItemVersionKey]; - } - return self; -} - -- (BOOL)isVaid { - /* name and download seems ok */ - return (self.name.length > 0 && self.downloadURL); -} - -@end +#import "MPPluginRepositoryItem.h" @implementation MPPluginRepository @@ -60,7 +28,7 @@ NSString *const MPPluginItemVersionKey = @"version"; return self; } -- (NSArray *)availablePlugins { +- (NSArray *)availablePlugins { NSString *urlString = NSBundle.mainBundle.infoDictionary[MPBundlePluginRepositoryURLKey]; if(!urlString) { return @[]; @@ -83,7 +51,7 @@ NSString *const MPPluginItemVersionKey = @"version"; if(![item isKindOfClass:NSDictionary.class]) { continue; } - MPPluginRespositoryItem *pluginItem = [MPPluginRespositoryItem pluginItemFromDictionary:item]; + MPPluginRepositoryItem *pluginItem = [MPPluginRepositoryItem pluginItemFromDictionary:item]; if(pluginItem.isVaid) { [items addObject:pluginItem]; } diff --git a/MacPass/MPPluginRepositoryItem.h b/MacPass/MPPluginRepositoryItem.h new file mode 100644 index 00000000..b5f083b6 --- /dev/null +++ b/MacPass/MPPluginRepositoryItem.h @@ -0,0 +1,25 @@ +// +// MPPluginRepositoryItem.h +// MacPass +// +// Created by Michael Starke on 08.03.18. +// Copyright © 2018 HicknHack Software GmbH. All rights reserved. +// + +#import + +@interface MPPluginRepositoryItem : NSObject + +@property (copy,readonly) NSString *name; +@property (copy,readonly) NSString *currentVersion; +@property (copy,readonly) NSString *descriptionText; +@property (copy,readonly) NSURL *sourceURL; +@property (copy,readonly) NSURL *downloadURL; +@property (copy,readonly) NSURL *bundleIdentifier; + +@property (readonly, nonatomic, getter=isVaid) BOOL valid; + ++ (instancetype)pluginItemFromDictionary:(NSDictionary *)dict; +- (instancetype)initWithDictionary:(NSDictionary *)dict; + +@end diff --git a/MacPass/MPPluginRepositoryItem.m b/MacPass/MPPluginRepositoryItem.m new file mode 100644 index 00000000..837bd4b7 --- /dev/null +++ b/MacPass/MPPluginRepositoryItem.m @@ -0,0 +1,54 @@ +// +// MPPluginRepositoryItem.m +// MacPass +// +// Created by Michael Starke on 08.03.18. +// Copyright © 2018 HicknHack Software GmbH. All rights reserved. +// + +#import "MPPluginRepositoryItem.h" + + +NSString *const MPPluginItemNameKey = @"name"; +NSString *const MPPluginItemDescriptionKey = @"description"; +NSString *const MPPluginItemDownloadURLKey = @"download"; +NSString *const MPPluginItemSourceURLKey = @"source"; +NSString *const MPPluginItemCurrentVersionKey = @"currentVersion"; + +@interface MPPluginRepositoryItem () + +@property (copy) NSString *name; +@property (copy) NSString *currentVersion; +@property (copy) NSString *descriptionText; +@property (copy) NSURL *sourceURL; +@property (copy) NSURL *downloadURL; +@property (copy) NSURL *bundleIdentifier; + +@end + +@implementation MPPluginRepositoryItem + +@dynamic valid; + ++ (instancetype)pluginItemFromDictionary:(NSDictionary *)dict { + return [[MPPluginRepositoryItem alloc] initWithDictionary:dict]; +} + +- (instancetype)initWithDictionary:(NSDictionary *)dict { + self = [super init]; + if(self) { + self.name = dict[MPPluginItemNameKey]; + self.descriptionText = dict[MPPluginItemDescriptionKey]; + self.downloadURL = [NSURL URLWithString:dict[MPPluginItemDownloadURLKey]]; + self.sourceURL = [NSURL URLWithString:dict[MPPluginItemSourceURLKey]]; + self.currentVersion = dict[MPPluginItemCurrentVersionKey]; + } + return self; +} + +- (BOOL)isVaid { + /* name and download seems ok */ + return (self.name.length > 0 && self.downloadURL); +} + +@end