@@ -166,15 +166,10 @@ public struct KeychainAuthorizationProvider: AuthorizationProvider {
166
166
let `protocol` = self . `protocol` ( for: url)
167
167
168
168
do {
169
- try self . update ( server: server, protocol: `protocol`, account: user, password: passwordData)
170
- callback ( . success( ( ) ) )
171
- } catch AuthorizationProviderError . notFound {
172
- do {
169
+ if !( try self . update ( server: server, protocol: `protocol`, account: user, password: passwordData) ) {
173
170
try self . create ( server: server, protocol: `protocol`, account: user, password: passwordData)
174
- callback ( . success( ( ) ) )
175
- } catch {
176
- callback ( . failure( error) )
177
171
}
172
+ callback ( . success( ( ) ) )
178
173
} catch {
179
174
callback ( . failure( error) )
180
175
}
@@ -219,7 +214,7 @@ public struct KeychainAuthorizationProvider: AuthorizationProvider {
219
214
}
220
215
}
221
216
222
- private func update( server: String , `protocol`: CFString , account: String , password: Data ) throws {
217
+ private func update( server: String , `protocol`: CFString , account: String , password: Data ) throws -> Bool {
223
218
let query : [ String : Any ] = [ kSecClass as String : kSecClassInternetPassword,
224
219
kSecAttrServer as String : server,
225
220
kSecAttrProtocol as String : `protocol`]
@@ -228,11 +223,12 @@ public struct KeychainAuthorizationProvider: AuthorizationProvider {
228
223
229
224
let status = SecItemUpdate ( query as CFDictionary , attributes as CFDictionary )
230
225
guard status != errSecItemNotFound else {
231
- throw AuthorizationProviderError . notFound
226
+ return false
232
227
}
233
228
guard status == errSecSuccess else {
234
229
throw AuthorizationProviderError . other ( " Failed to update credentials for server \( server) in keychain: status \( status) " )
235
230
}
231
+ return true
236
232
}
237
233
238
234
private func search( server: String , `protocol`: CFString ) throws -> CFTypeRef ? {
0 commit comments