mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 19:57:41 +00:00
143 lines
6.7 KiB
Swift
143 lines
6.7 KiB
Swift
//
|
|
// OAuth1Swift.swift
|
|
// OAuthSwift
|
|
//
|
|
// Created by Dongri Jin on 6/22/14.
|
|
// Copyright (c) 2014 Dongri Jin. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
public class OAuth1Swift: OAuthSwift {
|
|
|
|
// If your oauth provider doesn't provide `oauth_verifier`
|
|
// set value to true (default: false)
|
|
public var allowMissingOauthVerifier: Bool = false
|
|
|
|
var consumer_key: String
|
|
var consumer_secret: String
|
|
var request_token_url: String
|
|
var authorize_url: String
|
|
var access_token_url: String
|
|
|
|
// MARK: init
|
|
public init(consumerKey: String, consumerSecret: String, requestTokenUrl: String, authorizeUrl: String, accessTokenUrl: String){
|
|
self.consumer_key = consumerKey
|
|
self.consumer_secret = consumerSecret
|
|
self.request_token_url = requestTokenUrl
|
|
self.authorize_url = authorizeUrl
|
|
self.access_token_url = accessTokenUrl
|
|
super.init(consumerKey: consumerKey, consumerSecret: consumerSecret)
|
|
self.client.credential.version = .OAuth1
|
|
}
|
|
|
|
public convenience init?(parameters: [String:String]){
|
|
guard let consumerKey = parameters["consumerKey"], consumerSecret = parameters["consumerSecret"],
|
|
requestTokenUrl = parameters["requestTokenUrl"], authorizeUrl = parameters["authorizeUrl"], accessTokenUrl = parameters["accessTokenUrl"] else {
|
|
return nil
|
|
}
|
|
self.init(consumerKey:consumerKey, consumerSecret: consumerSecret,
|
|
requestTokenUrl: requestTokenUrl,
|
|
authorizeUrl: authorizeUrl,
|
|
accessTokenUrl: accessTokenUrl)
|
|
}
|
|
|
|
public var parameters: [String: String] {
|
|
return [
|
|
"consumerKey": consumer_key,
|
|
"consumerSecret": consumer_secret,
|
|
"requestTokenUrl": request_token_url,
|
|
"authorizeUrl": authorize_url,
|
|
"accessTokenUrl": access_token_url
|
|
]
|
|
}
|
|
|
|
// MARK: functions
|
|
// 0. Start
|
|
public func authorizeWithCallbackURL(callbackURL: NSURL, success: TokenSuccessHandler, failure: FailureHandler?) {
|
|
self.postOAuthRequestTokenWithCallbackURL(callbackURL, success: { [unowned self]
|
|
credential, response, _ in
|
|
|
|
self.observeCallback { [unowned self] url in
|
|
var responseParameters = [String: String]()
|
|
if let query = url.query {
|
|
responseParameters += query.parametersFromQueryString()
|
|
}
|
|
if let fragment = url.fragment where !fragment.isEmpty {
|
|
responseParameters += fragment.parametersFromQueryString()
|
|
}
|
|
if let token = responseParameters["token"] {
|
|
responseParameters["oauth_token"] = token
|
|
}
|
|
if (responseParameters["oauth_token"] != nil && (self.allowMissingOauthVerifier || responseParameters["oauth_verifier"] != nil)) {
|
|
//var credential: OAuthSwiftCredential = self.client.credential
|
|
self.client.credential.oauth_token = responseParameters["oauth_token"]!.safeStringByRemovingPercentEncoding
|
|
if (responseParameters["oauth_verifier"] != nil) {
|
|
self.client.credential.oauth_verifier = responseParameters["oauth_verifier"]!.safeStringByRemovingPercentEncoding
|
|
}
|
|
self.postOAuthAccessTokenWithRequestToken(success, failure: failure)
|
|
} else {
|
|
let userInfo = [NSLocalizedDescriptionKey: "Oauth problem. oauth_token or oauth_verifier not returned"]
|
|
failure?(error: NSError(domain: OAuthSwiftErrorDomain, code: -1, userInfo: userInfo))
|
|
return
|
|
}
|
|
}
|
|
// 2. Authorize
|
|
let urlString = self.authorize_url + (self.authorize_url.has("?") ? "&" : "?") + "oauth_token=\(credential.oauth_token)"
|
|
if let queryURL = NSURL(string: urlString) {
|
|
self.authorize_url_handler.handle(queryURL)
|
|
}
|
|
else {
|
|
let errorInfo = [NSLocalizedFailureReasonErrorKey: NSLocalizedString("Failed to create URL", comment: "\(urlString) not convertible to URL, please encode.")]
|
|
failure?(error: NSError(domain: OAuthSwiftErrorDomain, code: -1, userInfo: errorInfo))
|
|
}
|
|
}, failure: failure)
|
|
}
|
|
|
|
// 1. Request token
|
|
func postOAuthRequestTokenWithCallbackURL(callbackURL: NSURL, success: TokenSuccessHandler, failure: FailureHandler?) {
|
|
var parameters = Dictionary<String, AnyObject>()
|
|
if let callbackURLString: String = callbackURL.absoluteString {
|
|
parameters["oauth_callback"] = callbackURLString
|
|
}
|
|
self.client.post(self.request_token_url, parameters: parameters, success: {
|
|
data, response in
|
|
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as String!
|
|
let parameters = responseString.parametersFromQueryString()
|
|
if let oauthToken=parameters["oauth_token"] {
|
|
self.client.credential.oauth_token = oauthToken.safeStringByRemovingPercentEncoding
|
|
}
|
|
if let oauthTokenSecret=parameters["oauth_token_secret"] {
|
|
self.client.credential.oauth_token_secret = oauthTokenSecret.safeStringByRemovingPercentEncoding
|
|
}
|
|
success(credential: self.client.credential, response: response, parameters: parameters)
|
|
}, failure: failure)
|
|
}
|
|
|
|
// 3. Get Access token
|
|
func postOAuthAccessTokenWithRequestToken(success: TokenSuccessHandler, failure: FailureHandler?) {
|
|
var parameters = Dictionary<String, AnyObject>()
|
|
parameters["oauth_token"] = self.client.credential.oauth_token
|
|
parameters["oauth_verifier"] = self.client.credential.oauth_verifier
|
|
self.client.post(self.access_token_url, parameters: parameters, success: {
|
|
data, response in
|
|
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as String!
|
|
let parameters = responseString.parametersFromQueryString()
|
|
if let oauthToken=parameters["oauth_token"] {
|
|
self.client.credential.oauth_token = oauthToken.safeStringByRemovingPercentEncoding
|
|
}
|
|
if let oauthTokenSecret=parameters["oauth_token_secret"] {
|
|
self.client.credential.oauth_token_secret = oauthTokenSecret.safeStringByRemovingPercentEncoding
|
|
}
|
|
success(credential: self.client.credential, response: response, parameters: parameters)
|
|
}, failure: failure)
|
|
}
|
|
|
|
@available(*, deprecated=0.5.0, message="Use OAuthSwift.handleOpenURL()")
|
|
public override class func handleOpenURL(url: NSURL) {
|
|
super.handleOpenURL(url)
|
|
}
|
|
|
|
}
|