From 6f1ec15d4858bfe7841e113345ae2dc777a077f6 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Tue, 25 Apr 2017 15:00:29 +0300 Subject: [PATCH] TouchID service added --- .../project.pbxproj | 4 ++ .../Services/TouchIDService.swift | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 LeadKitAdditions/LeadKitAdditions/Services/TouchIDService.swift diff --git a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj index 8536952..8fc15cd 100644 --- a/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj +++ b/LeadKitAdditions/LeadKitAdditions.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ EF05EDC01EAF706200CAE7B6 /* ApiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDBD1EAF706200CAE7B6 /* ApiResponse.swift */; }; EF05EDC11EAF706200CAE7B6 /* BaseDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDBE1EAF706200CAE7B6 /* BaseDateFormatter.swift */; }; EF05EDC21EAF706200CAE7B6 /* DefaultNetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDBF1EAF706200CAE7B6 /* DefaultNetworkService.swift */; }; + EF05EDC61EAF70EB00CAE7B6 /* TouchIDService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF05EDC51EAF70EB00CAE7B6 /* TouchIDService.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -34,6 +35,7 @@ EF05EDBD1EAF706200CAE7B6 /* ApiResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiResponse.swift; sourceTree = ""; }; EF05EDBE1EAF706200CAE7B6 /* BaseDateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseDateFormatter.swift; sourceTree = ""; }; EF05EDBF1EAF706200CAE7B6 /* DefaultNetworkService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultNetworkService.swift; sourceTree = ""; }; + EF05EDC51EAF70EB00CAE7B6 /* TouchIDService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TouchIDService.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,6 +103,7 @@ isa = PBXGroup; children = ( EF05EDB31EAF703A00CAE7B6 /* BaseUserService.swift */, + EF05EDC51EAF70EB00CAE7B6 /* TouchIDService.swift */, ); path = Services; sourceTree = ""; @@ -278,6 +281,7 @@ buildActionMask = 2147483647; files = ( EF05EDB81EAF704800CAE7B6 /* UserDefaults+UserService.swift in Sources */, + EF05EDC61EAF70EB00CAE7B6 /* TouchIDService.swift in Sources */, EF05EDC21EAF706200CAE7B6 /* DefaultNetworkService.swift in Sources */, EF05EDBB1EAF705500CAE7B6 /* ApiError.swift in Sources */, EF05EDB71EAF704800CAE7B6 /* Observable+Extensions.swift in Sources */, diff --git a/LeadKitAdditions/LeadKitAdditions/Services/TouchIDService.swift b/LeadKitAdditions/LeadKitAdditions/Services/TouchIDService.swift new file mode 100644 index 0000000..6eaa96e --- /dev/null +++ b/LeadKitAdditions/LeadKitAdditions/Services/TouchIDService.swift @@ -0,0 +1,45 @@ +// +// Copyright (c) 2017 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import LocalAuthentication + +public typealias TouchIDServiceAuthHandler = (Bool) -> Void + +public class TouchIDService { + + private lazy var laContext: LAContext = { + return LAContext() + }() + + public var canAuthenticateByTouchId: Bool { + return laContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) + } + + public func authenticateByTouchId(description: String, authHandler: @escaping TouchIDServiceAuthHandler) { + laContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, + localizedReason: description) { success, _ in + + authHandler(success) + } + } + +}