From 6817f61e3b3b4741c17fbe75a79d6eec10443bc5 Mon Sep 17 00:00:00 2001 From: Danny Moesch Date: Sat, 1 Dec 2018 15:52:01 +0100 Subject: [PATCH] Split PasswordHelpers and move components into Parser --- pass.xcodeproj/project.pbxproj | 20 +++++++++++------- .../OtpType.swift} | 21 ++++++++++++------- passKit/Parser/PasswordChange.swift | 13 ++++++++++++ .../OtpTypeTest.swift} | 18 ++++++++++++---- 4 files changed, 52 insertions(+), 20 deletions(-) rename passKit/{Helpers/PasswordHelpers.swift => Parser/OtpType.swift} (56%) create mode 100644 passKit/Parser/PasswordChange.swift rename passKitTests/{Helpers/PasswordHelpersTest.swift => Parser/OtpTypeTest.swift} (58%) diff --git a/pass.xcodeproj/project.pbxproj b/pass.xcodeproj/project.pbxproj index 96c8606..0412134 100644 --- a/pass.xcodeproj/project.pbxproj +++ b/pass.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 18F19A67B0C07F13C17169E0 /* Pods_pass.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A5620D17DF5E86B61761D0E /* Pods_pass.framework */; }; 23B82F0228254275DBA609E7 /* Pods_passExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B975797E0F0B7476CADD6A7D /* Pods_passExtension.framework */; }; 301F6463216162550071A4CE /* AdditionField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6462216162550071A4CE /* AdditionField.swift */; }; - 301F6466216164830071A4CE /* PasswordHelpersTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6465216164830071A4CE /* PasswordHelpersTest.swift */; }; 301F6468216165290071A4CE /* ConstantsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6467216165290071A4CE /* ConstantsTest.swift */; }; 301F646A216166000071A4CE /* StringExtensionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F6469216166000071A4CE /* StringExtensionTest.swift */; }; 301F646D216166AA0071A4CE /* AdditionFieldTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301F646C216166AA0071A4CE /* AdditionFieldTest.swift */; }; @@ -18,7 +17,9 @@ 302E85632125EE550031BA64 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302E85622125EE550031BA64 /* Constants.swift */; }; 30A1D29C21AF451E00E2D1F7 /* PasswordGeneratorFlavourTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D29B21AF451E00E2D1F7 /* PasswordGeneratorFlavourTest.swift */; }; 30A1D29E21AF468F00E2D1F7 /* PasswordGeneratorFlavour.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D29D21AF468E00E2D1F7 /* PasswordGeneratorFlavour.swift */; }; - 30AAC05321989DCE00F656CE /* PasswordHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30AAC05221989DCE00F656CE /* PasswordHelpers.swift */; }; + 30A1D2A621B2D46100E2D1F7 /* OtpType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A521B2D46100E2D1F7 /* OtpType.swift */; }; + 30A1D2A821B2D53200E2D1F7 /* PasswordChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */; }; + 30A1D2AA21B32A0100E2D1F7 /* OtpTypeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */; }; 30B04860209A5141001013CA /* PasswordTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0485F209A5141001013CA /* PasswordTest.swift */; }; 30FD2F78214D9E0E005E0A92 /* ParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30FD2F77214D9E0E005E0A92 /* ParserTest.swift */; }; 61326CDA7A73757FB68DCB04 /* Pods_passKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAB3F5541E51ADC8C6B56642 /* Pods_passKit.framework */; }; @@ -186,7 +187,6 @@ /* Begin PBXFileReference section */ 301F6462216162550071A4CE /* AdditionField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionField.swift; sourceTree = ""; }; - 301F6465216164830071A4CE /* PasswordHelpersTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordHelpersTest.swift; sourceTree = ""; }; 301F6467216165290071A4CE /* ConstantsTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantsTest.swift; sourceTree = ""; }; 301F6469216166000071A4CE /* StringExtensionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtensionTest.swift; sourceTree = ""; }; 301F646C216166AA0071A4CE /* AdditionFieldTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionFieldTest.swift; sourceTree = ""; }; @@ -194,7 +194,9 @@ 302E85622125EE550031BA64 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 30A1D29B21AF451E00E2D1F7 /* PasswordGeneratorFlavourTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordGeneratorFlavourTest.swift; sourceTree = ""; }; 30A1D29D21AF468E00E2D1F7 /* PasswordGeneratorFlavour.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PasswordGeneratorFlavour.swift; path = Helpers/PasswordGeneratorFlavour.swift; sourceTree = ""; }; - 30AAC05221989DCE00F656CE /* PasswordHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PasswordHelpers.swift; path = Helpers/PasswordHelpers.swift; sourceTree = ""; }; + 30A1D2A521B2D46100E2D1F7 /* OtpType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OtpType.swift; sourceTree = ""; }; + 30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordChange.swift; sourceTree = ""; }; + 30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OtpTypeTest.swift; sourceTree = ""; }; 30B0485F209A5141001013CA /* PasswordTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordTest.swift; sourceTree = ""; }; 30FD2F77214D9E0E005E0A92 /* ParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParserTest.swift; sourceTree = ""; }; 31C3033E8868D05B2C55C8B1 /* Pods-passExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-passExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-passExtension/Pods-passExtension.debug.xcconfig"; sourceTree = ""; }; @@ -384,7 +386,6 @@ 301F6464216164670071A4CE /* Helpers */ = { isa = PBXGroup; children = ( - 301F6465216164830071A4CE /* PasswordHelpersTest.swift */, 301F6469216166000071A4CE /* StringExtensionTest.swift */, 30A1D29B21AF451E00E2D1F7 /* PasswordGeneratorFlavourTest.swift */, ); @@ -396,7 +397,9 @@ children = ( 301F6462216162550071A4CE /* AdditionField.swift */, 302E85622125EE550031BA64 /* Constants.swift */, + 30A1D2A521B2D46100E2D1F7 /* OtpType.swift */, 302E85602125ECC70031BA64 /* Parser.swift */, + 30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */, ); path = Parser; sourceTree = ""; @@ -406,6 +409,7 @@ children = ( 301F646C216166AA0071A4CE /* AdditionFieldTest.swift */, 301F6467216165290071A4CE /* ConstantsTest.swift */, + 30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */, 30FD2F77214D9E0E005E0A92 /* ParserTest.swift */, ); path = Parser; @@ -534,7 +538,6 @@ A2F4E21A1EED80160011986E /* Globals.swift */, A2F4E21B1EED80160011986E /* NotificationNames.swift */, 30A1D29D21AF468E00E2D1F7 /* PasswordGeneratorFlavour.swift */, - 30AAC05221989DCE00F656CE /* PasswordHelpers.swift */, A239F51E2157B72700576CBF /* StringExtension.swift */, A2F4E21C1EED80160011986E /* UITextFieldExtension.swift */, A2BEC1BA207D2EFE00F3051C /* UIViewExtension.swift */, @@ -1156,6 +1159,7 @@ A2F4E2151EED800F0011986E /* Password.swift in Sources */, A26075AD1EEC7125005DB03E /* pass.xcdatamodeld in Sources */, 30A1D29E21AF468F00E2D1F7 /* PasswordGeneratorFlavour.swift in Sources */, + 30A1D2A821B2D53200E2D1F7 /* PasswordChange.swift in Sources */, A239F51F2157B72700576CBF /* StringExtension.swift in Sources */, A239F5212157B75E00576CBF /* FileManagerExtension.swift in Sources */, A2F4E21E1EED80160011986E /* AppError.swift in Sources */, @@ -1165,10 +1169,10 @@ A2F4E2221EED80160011986E /* UITextFieldExtension.swift in Sources */, A2C532BF201E5AA100DB9F53 /* PasscodeLockPresenter.swift in Sources */, A2C532BE201E5AA100DB9F53 /* PasscodeLockViewController.swift in Sources */, - 30AAC05321989DCE00F656CE /* PasswordHelpers.swift in Sources */, A2F4E2201EED80160011986E /* Globals.swift in Sources */, A2F4E2231EED80160011986E /* Utils.swift in Sources */, A2F4E21F1EED80160011986E /* DefaultsKeys.swift in Sources */, + 30A1D2A621B2D46100E2D1F7 /* OtpType.swift in Sources */, A2F4E2141EED800F0011986E /* GitCredential.swift in Sources */, A2F4E2161EED800F0011986E /* PasswordEntity.swift in Sources */, ); @@ -1179,10 +1183,10 @@ buildActionMask = 2147483647; files = ( 301F646A216166000071A4CE /* StringExtensionTest.swift in Sources */, - 301F6466216164830071A4CE /* PasswordHelpersTest.swift in Sources */, 301F646D216166AA0071A4CE /* AdditionFieldTest.swift in Sources */, 30FD2F78214D9E0E005E0A92 /* ParserTest.swift in Sources */, 30B04860209A5141001013CA /* PasswordTest.swift in Sources */, + 30A1D2AA21B32A0100E2D1F7 /* OtpTypeTest.swift in Sources */, 301F6468216165290071A4CE /* ConstantsTest.swift in Sources */, 30A1D29C21AF451E00E2D1F7 /* PasswordGeneratorFlavourTest.swift in Sources */, A26075881EEC6F34005DB03E /* passKitTests.swift in Sources */, diff --git a/passKit/Helpers/PasswordHelpers.swift b/passKit/Parser/OtpType.swift similarity index 56% rename from passKit/Helpers/PasswordHelpers.swift rename to passKit/Parser/OtpType.swift index 3cd1236..79d6c9c 100644 --- a/passKit/Helpers/PasswordHelpers.swift +++ b/passKit/Parser/OtpType.swift @@ -1,8 +1,8 @@ // -// PasswordHelpers.swift +// OtpType.swift // passKit // -// Created by Danny Moesch on 17.08.18. +// Created by Danny Moesch on 01.12.2018. // Copyright © 2018 Bob Sun. All rights reserved. // @@ -10,7 +10,7 @@ import OneTimePassword public enum OtpType { case totp, hotp, none - + init(token: Token?) { switch token?.generator.factor { case .some(.counter): @@ -21,10 +21,15 @@ public enum OtpType { self = .none } } -} -enum PasswordChange: Int { - case path = 0x01 - case content = 0x02 - case none = 0x00 + init(name: String?) { + switch name?.lowercased() { + case Constants.HOTP: + self = .hotp + case Constants.TOTP: + self = .totp + default: + self = .none + } + } } diff --git a/passKit/Parser/PasswordChange.swift b/passKit/Parser/PasswordChange.swift new file mode 100644 index 0000000..9eb2dc8 --- /dev/null +++ b/passKit/Parser/PasswordChange.swift @@ -0,0 +1,13 @@ +// +// PasswordChange.swift +// passKit +// +// Created by Danny Moesch on 01.12.2018. +// Copyright © 2018 Bob Sun. All rights reserved. +// + +enum PasswordChange: Int { + case path = 0x01 + case content = 0x02 + case none = 0x00 +} diff --git a/passKitTests/Helpers/PasswordHelpersTest.swift b/passKitTests/Parser/OtpTypeTest.swift similarity index 58% rename from passKitTests/Helpers/PasswordHelpersTest.swift rename to passKitTests/Parser/OtpTypeTest.swift index 5d9ca87..329de42 100644 --- a/passKitTests/Helpers/PasswordHelpersTest.swift +++ b/passKitTests/Parser/OtpTypeTest.swift @@ -1,8 +1,8 @@ // -// PasswordHelpersTest.swift +// OtpTypeTest.swift // passKitTests // -// Created by Danny Moesch on 30.09.18. +// Created by Danny Moesch on 01.12.18. // Copyright © 2018 Bob Sun. All rights reserved. // @@ -11,9 +11,9 @@ import XCTest @testable import passKit -class PasswordHelpersTest: XCTestCase { +class OtpTypeTest: XCTestCase { - func testOtpType() { + func testInitFromToken() { let secret = "secret".data(using: .utf8)! let totpGenerator = Generator(factor: .timer(period: 30.0), secret: secret, algorithm: .sha1, digits: 6)! @@ -26,4 +26,14 @@ class PasswordHelpersTest: XCTestCase { XCTAssertEqual(OtpType(token: nil), .none) } + + func testInitFromString() { + XCTAssertEqual(OtpType(name: "totp"), .totp) + XCTAssertEqual(OtpType(name: "tOtP"), .totp) + XCTAssertEqual(OtpType(name: "hotp"), .hotp) + XCTAssertEqual(OtpType(name: "HoTp"), .hotp) + XCTAssertEqual(OtpType(name: nil), .none) + XCTAssertEqual(OtpType(name: ""), .none) + XCTAssertEqual(OtpType(name: "something"), .none) + } }