Merge pull request #4 from rinold/develop

Update to version 0.3.1
This commit is contained in:
Mikhail Churbanov 2018-07-24 22:54:02 +03:00 committed by GitHub
commit 3eef3cb2fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 34 deletions

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -6,6 +6,7 @@
// Copyright © 2018 CocoaPods. All rights reserved. // Copyright © 2018 CocoaPods. All rights reserved.
// //
import Foundation
@testable import ProxyResolver @testable import ProxyResolver
typealias ProxyConfigDict = [CFString: AnyObject] typealias ProxyConfigDict = [CFString: AnyObject]

View File

@ -8,15 +8,9 @@
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'ProxyResolver' s.name = 'ProxyResolver'
s.version = '0.3.0' s.version = '0.3.1'
s.summary = 'Simple resolution of user proxy settings for macOS' s.summary = 'Simple resolution of user proxy settings for macOS'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC s.description = <<-DESC
ProxyResolver allows simply resolve the actual proxy information from users ProxyResolver allows simply resolve the actual proxy information from users
system configuration and could be used for setting up Stream-based connections, system configuration and could be used for setting up Stream-based connections,
@ -24,13 +18,12 @@ Pod::Spec.new do |s|
DESC DESC
s.homepage = 'https://github.com/rinold/ProxyResolver' s.homepage = 'https://github.com/rinold/ProxyResolver'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'rinold' => 'mihail.churbanov@gmail.com' } s.author = { 'rinold' => 'mihail.churbanov@gmail.com' }
s.source = { :git => 'https://github.com/rinold/ProxyResolver.git', :tag => s.version.to_s } s.source = { :git => 'https://github.com/rinold/ProxyResolver.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>' s.social_media_url = 'https://twitter.com/rinold_nn'
s.platform = :osx s.ios.deployment_target = "10.0"
s.osx.deployment_target = "10.10" s.osx.deployment_target = "10.10"
s.source_files = 'ProxyResolver/Classes/**/*' s.source_files = 'ProxyResolver/Classes/**/*'

View File

@ -21,13 +21,37 @@ public struct Credentials {
public let password: String public let password: String
} }
extension Credentials {
public static func get(for host: String) -> Credentials? {
let query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
kSecAttrServer as String: host,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecReturnAttributes as String: true,
kSecReturnData as String: true]
var item: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &item)
guard status == errSecSuccess else { return nil }
guard let existingItem = item as? [String : Any],
let passwordData = existingItem[kSecValueData as String] as? Data,
let password = String(data: passwordData, encoding: .utf8),
let account = existingItem[kSecAttrAccount as String] as? String
else {
return nil
}
return Credentials(username: account, password: password)
}
}
public struct Proxy { public struct Proxy {
public let type: ProxyType public let type: ProxyType
public let host: String public let host: String
public let port: UInt32 public let port: UInt32
public var credentials: Credentials? { public var credentials: Credentials? {
return ProxyResolver.getCredentials(for: host) return Credentials.get(for: host)
} }
} }
@ -92,7 +116,7 @@ public protocol ProxyResolverDelegate: class {
public final class ProxyResolver { public final class ProxyResolver {
private let config: ProxyResolverConfig public var config: ProxyResolverConfig
public weak var delegate: ProxyResolverDelegate? public weak var delegate: ProxyResolverDelegate?
@ -284,26 +308,4 @@ public final class ProxyResolver {
return urlComponents.url return urlComponents.url
} }
class func getCredentials(for host: String) -> Credentials? {
let query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
kSecAttrServer as String: host,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecReturnAttributes as String: true,
kSecReturnData as String: true]
var item: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &item)
guard status == errSecSuccess else { return nil }
guard let existingItem = item as? [String : Any],
let passwordData = existingItem[kSecValueData as String] as? Data,
let password = String(data: passwordData, encoding: .utf8),
let account = existingItem[kSecAttrAccount as String] as? String
else {
return nil
}
return Credentials(username: account, password: password)
}
} }