Skip to content

Commit 3761125

Browse files
author
Joris Timmerman
committed
Unified query building
1 parent 4eeb4f2 commit 3761125

File tree

1 file changed

+22
-26
lines changed

1 file changed

+22
-26
lines changed

Sources/Keychain/Keychain.swift

+22-26
Original file line numberDiff line numberDiff line change
@@ -30,36 +30,14 @@ public class KeychainHandler {
3030
public static let shared = KeychainHandler()
3131

3232
fileprivate func data(for key: String, additionalQuery: [String: AnyObject]?) -> Data? {
33-
var query: [String: AnyObject] = [
34-
kSecClass as String: kSecClassGenericPassword as NSString,
35-
kSecMatchLimit as String: kSecMatchLimitOne,
36-
kSecReturnData as String: kCFBooleanTrue,
37-
kSecAttrService as String: (serviceIdentifier ?? "") as AnyObject,
38-
kSecAttrAccount as String: key as AnyObject
39-
]
40-
if let accessGroupName = self.accessGroupName {
41-
query[kSecAttrAccessGroup as String] = accessGroupName as AnyObject
42-
}
43-
// Set additional query values when given.
44-
if let additionalQuery = additionalQuery {
45-
additionalQuery.forEach { key, value in query[key] = value }
46-
}
33+
var query = self.query(for: key, additionalQuery: additionalQuery)
34+
query[kSecMatchLimit as String] = kSecMatchLimitOne
35+
query[kSecReturnData as String] = kCFBooleanTrue
4736
return self.secItemCopy(query).data as? Data
4837
}
4938

5039
fileprivate func set(_ data: Data?, for key: String, additionalQuery: [String: AnyObject]?) -> Bool {
51-
var query: [String: AnyObject] = [
52-
kSecClass as String: (kSecClassGenericPassword as NSString),
53-
kSecAttrAccount as String: key as AnyObject,
54-
kSecAttrService as String: (serviceIdentifier ?? "") as AnyObject
55-
]
56-
if let accessGroupName = self.accessGroupName {
57-
query[kSecAttrAccessGroup as String] = accessGroupName as AnyObject
58-
}
59-
// Set additional query values when given.
60-
if let additionalQuery = additionalQuery {
61-
additionalQuery.forEach { key, value in query[key] = value }
62-
}
40+
var query = self.query(for: key, additionalQuery: additionalQuery)
6341
if let data = data {
6442
query[kSecValueData as String] = data as AnyObject
6543
return self.secItemAdd(query) == noErr
@@ -83,6 +61,24 @@ public class KeychainHandler {
8361
return try JSONDecoder().decode(T.self, from: data)
8462
}
8563

64+
private func query(for key: String, additionalQuery: [String: AnyObject]?) -> [String: AnyObject] {
65+
var query: [String: AnyObject] = [
66+
kSecClass as String: (kSecClassGenericPassword as NSString),
67+
kSecAttrAccount as String: key as AnyObject
68+
]
69+
if let service = self.serviceIdentifier {
70+
query[kSecAttrService as String] = service as AnyObject
71+
}
72+
if let accessGroupName = self.accessGroupName {
73+
query[kSecAttrAccessGroup as String] = accessGroupName as AnyObject
74+
}
75+
// Set additional query values when given.
76+
if let additionalQuery = additionalQuery {
77+
additionalQuery.forEach { key, value in query[key] = value }
78+
}
79+
return query
80+
}
81+
8682
private func secItemCopy(_ query: [String: AnyObject]) -> (status: OSStatus, data: AnyObject?) {
8783
var result: AnyObject?
8884
let status: OSStatus = withUnsafeMutablePointer(to: &result) {

0 commit comments

Comments
 (0)