From a1a98f50b5ae8fc32236770282b8e722554ed1c6 Mon Sep 17 00:00:00 2001 From: Okechi Onyeje Date: Wed, 1 Jun 2016 17:57:12 -0400 Subject: [PATCH] Oauth complete for etsy, deauthorization complete as well, except need to put an alert that or make a webview that lets user deauthorize app from etsy --- .../UserInterfaceState.xcuserstate | Bin 46992 -> 46697 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 390 +++++++++++++++++- Vendoo/EtsyRESTAPIManager.swift | 145 +++++-- Vendoo/NetworksTableViewController.swift | 21 +- 4 files changed, 503 insertions(+), 53 deletions(-) diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index a990e79fd293dbee339b84e4a701fd4475d7c44d..a1603182257fa0b086c6e3df4b7aba4e863c6a0b 100644 GIT binary patch delta 18080 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 delta 18252 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 E1B`z*Qvd(} diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 6dc9aa6..0a85477 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -74,13 +74,45 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/NetworksTableViewController.swift" - timestampString = "486467691.902354" + timestampString = "486495491.668853" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "399" - endingLineNumber = "399" + startingLineNumber = "406" + endingLineNumber = "406" landmarkName = "tableView(_:didSelectRowAtIndexPath:)" landmarkType = "5"> + + + + + + @@ -106,11 +138,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EtsyRESTAPIManager.swift" - timestampString = "486489301.995309" + timestampString = "486509277.070357" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "145" - endingLineNumber = "145" + startingLineNumber = "156" + endingLineNumber = "156" landmarkName = "authorizeApp(_:)" landmarkType = "5"> @@ -122,11 +154,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EtsyRESTAPIManager.swift" - timestampString = "486489301.995309" + timestampString = "486509277.070357" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "147" - endingLineNumber = "147" + startingLineNumber = "158" + endingLineNumber = "158" landmarkName = "authorizeApp(_:)" landmarkType = "5"> @@ -138,7 +170,199 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EtsyRESTAPIManager.swift" - timestampString = "486489480.473889" + timestampString = "486509277.070357" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "119" + endingLineNumber = "119" + landmarkName = "authorizeApp(_:)" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -170,14 +394,142 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EtsyRESTAPIManager.swift" - timestampString = "486489552.994372" + timestampString = "486509277.070357" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "99" - endingLineNumber = "99" + startingLineNumber = "134" + endingLineNumber = "134" landmarkName = "authorizeApp(_:)" landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/EtsyRESTAPIManager.swift b/Vendoo/EtsyRESTAPIManager.swift index b82e628..cea9802 100644 --- a/Vendoo/EtsyRESTAPIManager.swift +++ b/Vendoo/EtsyRESTAPIManager.swift @@ -22,6 +22,8 @@ class EtsyRESTAPIManager: NSObject { //----------------------------------------------// static let sharedInstance = EtsyRESTAPIManager() + + let baseURL = "https://openapi.etsy.com/v2/private" private var apiKey: String! @@ -32,8 +34,7 @@ class EtsyRESTAPIManager: NSObject { //User specific class variables private var etsyUser: String! - private var oauth_token: String! - private var oauth_secret: String! + private var oauthswift: OAuth1Swift! //private let oauthswift = OAuth1Swift(parameters: ["consumerKey":"snbs78qkfy3yqq6yhe6yv49b","consumerSecret":"4sbva4oqb6", "requestTokenUrl": "https://openapi.etsy.com/v2/oauth/request_token?scope=listings_w%20listings_r%20listings_d%20transactions_r%20transactions_w%20"]) override init(){ @@ -42,12 +43,16 @@ class EtsyRESTAPIManager: NSObject { self.apiKey = ((dict["Etsy"] as! Dictionary)["consumerKey"] as! String) self.apiSecret = ((dict["Etsy"] as! Dictionary)["consumerSecret"] as! String) + oauthswift = OAuth1Swift(parameters: ["consumerKey":self.apiKey,"consumerSecret":self.apiSecret, "requestTokenUrl" : "https://openapi.etsy.com/v2/oauth/request_token?scope=listings_w%20listings_r%20listings_d%20transactions_r%20transactions_w", + "authorizeUrl": "https://www.etsy.com/oauth/signin?", + "accessTokenUrl": "https://openapi.etsy.com/v2/oauth/access_token?"]) if(self.isAuthorized){ - let dictionary = Locksmith.loadDataForUserAccount(self.userEmail) + let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy") let oauthDictionary = dictionary?["etsy_oauth"] as? Dictionary - self.oauth_token = oauthDictionary?["token"] as? String! - self.oauth_secret = oauthDictionary?["secret"] as? String! + print((oauthDictionary?["token"] as? String!)!) + self.oauthswift.client.credential.oauth_token = (oauthDictionary?["token"] as? String!)! + self.oauthswift.client.credential.oauth_token_secret = (oauthDictionary?["secret"] as? String!)! } @@ -65,12 +70,10 @@ extension EtsyRESTAPIManager { //makes application ready for use with users etsy account func authorizeApp(viewcontroller: UIViewController){ - + var boolResult: Bool! if(!isAuthorized){ - let oauthswift = OAuth1Swift(parameters: ["consumerKey":self.apiKey,"consumerSecret":self.apiSecret, "requestTokenUrl" : "https://openapi.etsy.com/v2/oauth/request_token?scope=listings_w%20listings_r%20listings_d%20transactions_r%20transactions_w", - "authorizeUrl": "https://www.etsy.com/oauth/signin?", - "accessTokenUrl": "https://openapi.etsy.com/v2/oauth/access_token?"]) + oauthswift!.authorize_url_handler = SafariURLHandler(viewController: viewcontroller) @@ -94,47 +97,55 @@ extension EtsyRESTAPIManager { ) dispatch_async(dispatch_get_main_queue(), {() -> Void in - oauthswift!.authorizeWithCallbackURL( NSURL(string: "vendoo://oauth-callback/etsy")!, success: { + + + self.oauthswift!.authorizeWithCallbackURL( NSURL(string: "vendoo://oauth-callback/etsy")!, success: { credential, response, parameters in print(credential.oauth_token) print(credential.oauth_token_secret) print(response) - + boolResult = false }, failure: { error in print(error) dispatch_async(dispatch_get_main_queue(), {() -> Void in - print(oauthswift!.client.credential.oauth_token) - print(oauthswift!.client.credential.oauth_token_secret) + print(self.oauthswift!.client.credential.oauth_token) + print(self.oauthswift!.client.credential.oauth_token_secret) //save data to keychain - let creds = oauthswift?.client.credential + let creds = self.oauthswift?.client.credential let oauth: Dictionary? = [ "token" : creds!.oauth_token, "secret" : creds!.oauth_token_secret ] do{ - try Locksmith.saveData(["etsy_oauth" : oauth!], forUserAccount: self.userEmail) + try Locksmith.saveData(["etsy_oauth" : oauth!], forUserAccount: self.userEmail, inService: "vendoo_oauth_etsy") print("account credentials saved") NSUserDefaults.standardUserDefaults().setBool(true, forKey: "etsyAuthorized") self.isAuthorized = true + boolResult = true + + self.oauthswift!.client.get("https://openapi.etsy.com/v2/oauth/scopes", + success: { + data, response in + let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) + print(dataString) + boolResult = true + } + , failure: { error in + print(error) + boolResult = true + } + ) } catch{ (error) print(error) //could not save data to keychain print("account credentials could not be saved") + boolResult = false } - oauthswift!.client.get(self.baseURL, - success: { - data, response in - let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) - print(dataString) - } - , failure: { error in - print(error) - } - ) + //return boolResult }) }) @@ -147,6 +158,7 @@ extension EtsyRESTAPIManager { + //once everything is authorized save true value to the authorization boolean /* NSUserDefaults.standardUserDefaults().setBool(true, forKey: "etsyAuthorized") @@ -155,13 +167,90 @@ extension EtsyRESTAPIManager { } - func deAuthorizeApp(viewcontroller: UIViewController) -> Bool { + func deAuthorizeApp(viewcontroller: UIViewController){ + + + + + + oauthswift!.authorize_url_handler = SafariURLHandler(viewController: viewcontroller) + + oauthswift!.client.get("https://openapi.etsy.com/v2/oauth/request_token?scope=listings_w%20listings_r%20listings_d%20transactions_r%20transactions_w", + success: { + data, response in + let dataString = NSString(data: data, encoding: NSUTF8StringEncoding) + print(dataString!) + print(response) + + + + + //getting error here when trying to retrieve the login url from the response + //var dataDictionary = self.convertStringToDictionary(dataString! as String) + //print(dataDictionary!["login_url"]) + } + , failure: { error in + print(error) + } + ) + + dispatch_async(dispatch_get_main_queue(), {() -> Void in + + + self.oauthswift!.authorizeWithCallbackURL( NSURL(string: "vendoo://oauth-callback/etsy")!, success: { + credential, response, parameters in + print(credential.oauth_token) + print(credential.oauth_token_secret) + print(response) + + //erase all authorization variables + do { + try Locksmith.deleteDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy") + self.oauthswift.client.credential.oauth_token = "" + self.oauthswift.client.credential.oauth_token_secret = "" + NSUserDefaults.standardUserDefaults().setBool(false, forKey: "etsyAuthorized") + self.isAuthorized = false + + print("oauth credentials deleted and app deauthorized from etsy") + }catch{ + (error) + print(error) + ("failed to delete credentails and deauthorize app") + } + + + }, failure: { error in + print(error) + + dispatch_async(dispatch_get_main_queue(), {() -> Void in + + //erase all authorization variables + do { + try Locksmith.deleteDataForUserAccount(self.userEmail, inService: "vendoo_oauth_etsy") + self.oauthswift.client.credential.oauth_token = "" + self.oauthswift.client.credential.oauth_token_secret = "" + NSUserDefaults.standardUserDefaults().setBool(false, forKey: "etsyAuthorized") + self.isAuthorized = false + + print("oauth credentials deleted and app deauthorized from etsy") + }catch{ + (error) + print(error) + ("failed to delete credentails and deauthorize app") + } + + }) + + }) + }) + - return true } - } + + + //MARK: - Request Methods extension EtsyRESTAPIManager { diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index c1d830c..f4a92d9 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -27,6 +27,7 @@ class NetworksTableViewController: UIViewController { private var networksDictionary: Dictionary = ["ebay":false, "amazon":false,"etsy":false,"facebook":false] private var itemListingDictionary: Dictionary! = Dictionary() private var graphManager: FacebookGraphAPIManager! = nil + private var etsyManager: EtsyRESTAPIManager! = nil @@ -149,13 +150,19 @@ extension NetworksTableViewController: UITableViewDataSource { case 2: //loads network cell for etsy cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) + + let tabBar = self.tabBarController + if(((tabBar as? HomeViewController)?.etsyManager.isAuthorized)!){ + + (cell as! EtsyTableViewCell).networkToggle.setOn(true, animated: false) + } break default: //loads network cell for facebook cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) let tabBar = self.tabBarController - if((tabBar as? HomeViewController)?.fbGraphManager.isAuthorized == true){ + if(((tabBar as? HomeViewController)?.fbGraphManager.isAuthorized)!){ (cell as! FBTableViewCell).networkToggle.setOn(true, animated: false) } @@ -396,7 +403,7 @@ extension NetworksTableViewController: UITableViewDelegate { //OAuthorization code for etsy - if(((self.tabBarController as? HomeViewController)?.fbGraphManager.isAuthorized)!){ + if(((self.tabBarController as? HomeViewController)?.etsyManager.isAuthorized)!){ dispatch_async(dispatch_get_main_queue(), { () -> Void in cell.networkToggle.setOn(false, animated: true) @@ -405,8 +412,8 @@ extension NetworksTableViewController: UITableViewDelegate { //code to deauthorize network let tabBar = self.tabBarController - let didSucceed:Bool = ((tabBar as? HomeViewController)?.etsyManager.deAuthorizeApp(self))! - cell.networkToggle.on = !didSucceed + ((tabBar as? HomeViewController)?.etsyManager.deAuthorizeApp(self))! + cell.networkToggle.on = ((tabBar as? HomeViewController)?.etsyManager.isAuthorized)! } else{ @@ -418,8 +425,10 @@ extension NetworksTableViewController: UITableViewDelegate { //this is the type of code desired to access the rest management classes - let tabBar = self.tabBarController - (tabBar as? HomeViewController)?.etsyManager.authorizeApp(self) + let tabBar = self.tabBarController + ((tabBar as? HomeViewController)?.etsyManager.authorizeApp(self))! + + cell.networkToggle.on = ((tabBar as? HomeViewController)?.etsyManager.isAuthorized)! //self.etsyManager.authorizeApp(self)