From 734bc8d26b4dffbc934cf2184aaa325ae2535578 Mon Sep 17 00:00:00 2001 From: Okechi Onyeje Date: Tue, 31 May 2016 18:39:27 -0400 Subject: [PATCH] FBAuthorization is done, but deauthorization is a little buggy due to threading will address later, starting item listing process --- .DS_Store | Bin 10244 -> 10244 bytes .../UserInterfaceState.xcuserstate | Bin 42075 -> 42627 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 420 ++++++++++-------- Vendoo/.DS_Store | Bin 10244 -> 10244 bytes Vendoo/FacebookGraphAPIManager.swift | 188 +++++--- Vendoo/Info.plist | 5 +- Vendoo/NetworksTableViewController.swift | 20 +- 7 files changed, 387 insertions(+), 246 deletions(-) diff --git a/.DS_Store b/.DS_Store index b176e5fe00fe9d4ef18be4141c9e02d8328629e0..9e4265367ef7197c4b002962b9c9d4349721d951 100644 GIT binary patch delta 19 acmZn(XbIR5DarI~`Q-Z&8k?IX8~FfI*9YnV delta 19 acmZn(XbIR5Damy6!{qxC8k?IX8~FfLA_yh` diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index c557fa405fac83283cbf2d3e84ab8f07977bcc8d..34db35600dc8a5f4de13b0cba0a7cc580e680f64 100644 GIT binary patch delta 21523 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 S{Qn^Mk3U}t`22IU=>G#8WG(3c delta 20924 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�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 diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 95ed704..7e02f3d 100644 --- a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -10,27 +10,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/FacebookGraphAPIManager.swift" - timestampString = "486227901.505474" + timestampString = "486403080.878544" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "73" - endingLineNumber = "73" - landmarkName = "authorizeApp(_:)" - landmarkType = "5"> - - - - @@ -38,16 +22,16 @@ shouldBeEnabled = "Yes" ignoreCount = "0" continueAfterRunningActions = "No" - symbolName = "Vendoo.FacebookGraphAPIManager.isAuthorized.getter : Swift.Bool" + symbolName = "Vendoo.FacebookGraphAPIManager.isAuthorized.setter : Swift.Bool" moduleName = "Vendoo" usesParentBreakpointCondition = "Yes" urlString = "file:///Users/okechi/Documents/iOs%20Practice/Vendoo/Vendoo_bb/Vendoo/Vendoo/FacebookGraphAPIManager.swift" - timestampString = "486227901.651867" + timestampString = "486426967.061218" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "27" - endingLineNumber = "27" - offsetFromSymbolStart = "11"> + startingLineNumber = "35" + endingLineNumber = "35" + offsetFromSymbolStart = "27"> + startingLineNumber = "35" + endingLineNumber = "35" + offsetFromSymbolStart = "584"> @@ -74,187 +58,187 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/FacebookGraphAPIManager.swift" - timestampString = "486227622.356175" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "59" - endingLineNumber = "59" - landmarkName = "authorizeApp(_:)" - landmarkType = "5"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + startingLineNumber = "149" + endingLineNumber = "149" + offsetFromSymbolStart = "1020"> + startingLineNumber = "149" + endingLineNumber = "149" + offsetFromSymbolStart = "254"> + + + + + + + + + + + + + + + + + + + + @@ -266,13 +250,77 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/FacebookGraphAPIManager.swift" - timestampString = "486227898.081641" + timestampString = "486407553.29875" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "74" - endingLineNumber = "74" + startingLineNumber = "165" + endingLineNumber = "165" + landmarkName = "makeDELETIONResquest(_:params:)" + landmarkType = "5"> + + + + + + + + + + + + + + diff --git a/Vendoo/.DS_Store b/Vendoo/.DS_Store index 20979621da01cb4827733082eee24b00d6f29c36..78c56e288c3cd9d293e84fa2ff587a72a51a7d31 100644 GIT binary patch delta 32 ocmZn(XbITRD#R!^xlKravaYD~=5s>kyqnn-ez9!+FT%_W0JxkA)Bpeg delta 42 ycmZn(XbITRD#R!|xlKraaffsoe2OhoDGEl diff --git a/Vendoo/FacebookGraphAPIManager.swift b/Vendoo/FacebookGraphAPIManager.swift index 19daa7d..8e66d44 100644 --- a/Vendoo/FacebookGraphAPIManager.swift +++ b/Vendoo/FacebookGraphAPIManager.swift @@ -12,12 +12,13 @@ import FBSDKCoreKit import FBSDKLoginKit import AeroGearHttp import AeroGearOAuth2 -//import OAuthSwift +import OAuthSwift +import Locksmith /* NOTES: - I am able to authorize application for use with facebook but cannot deathorize and completion block of authorization code is not being called -> need to figure this out + I am able to authorize application for use with facebook and deauthorize it while showing the toggle button switching back and forth, but during the last step of the process, for some reason NSUserDefault key for fbauthorized is not being called, in response handler, may need to run in a different thread */ class FacebookGraphAPIManager: NSObject { @@ -25,10 +26,12 @@ class FacebookGraphAPIManager: NSObject { //----------------------------------------------// static let sharedInstance = FacebookGraphAPIManager() - let graphBaseURL = "graph.facebook.com" + let graphBaseURL = "https://graph.facebook.com/v2.2" private var apiKey: String! private var apiSecret: String! + private var userEmail:String = (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)! + private let login: FBSDKLoginManager = FBSDKLoginManager() var isAuthorized: Bool = NSUserDefaults.standardUserDefaults().boolForKey("fbAuthorized") //---------------------------------------------// @@ -38,6 +41,14 @@ class FacebookGraphAPIManager: NSObject { self.apiKey = ((dict["Facebook"] as! Dictionary)["consumerKey"] as! String) self.apiSecret = ((dict["Facebook"] as! Dictionary)["consumerSecret"] as! String) + + if(isAuthorized){ + + let dictionary = Locksmith.loadDataForUserAccount(self.userEmail, inService: "vendoo") + print("account credentials loaded") + //print((NSUserDefaults.standardUserDefaults().objectForKey("") as? FBSDKAccessToken!)) + } + } } @@ -48,64 +59,137 @@ class FacebookGraphAPIManager: NSObject { //MARK: - OAuth Methods extension FacebookGraphAPIManager { - func authorizeApp(viewcontroller: UIViewController){ + func authorizeApp(viewcontroller: UIViewController) -> Bool{ - let http = Http(baseURL: self.graphBaseURL) // [1] - let facebookConfig = FacebookConfig( // [2] - clientId: self.apiKey, - clientSecret: self.apiSecret, - scopes:["publish_actions"]) - let oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3] - - - http.authzModule = oauth2Module // [4] - - //dispatch_async(dispatch_main(), <#T##block: dispatch_block_t##dispatch_block_t##() -> Void#>) - http.request(.GET, path: "/get", completionHandler: { - (response, error) in // [5] - // handle response - - //print(response) - /*if((error != nil)){ + login.loginBehavior = FBSDKLoginBehavior.Web + if(!self.isAuthorized){ + if(FBSDKAccessToken.currentAccessToken() == nil){ + var boolResult:Bool = false + dispatch_async(dispatch_get_main_queue(), { () -> Void in + self.login.logInWithReadPermissions([/*"publish_actions", */"public_profile"], fromViewController: viewcontroller, handler: { + (result, error) -> Void in + + if (error != nil) { + NSLog("Process error") + boolResult = false + } + else if result.isCancelled { + NSLog("Cancelled") + boolResult = false + } + else { + + NSLog("Logged in with read permissions") + + print(result.token) + print(result.grantedPermissions) + NSUserDefaults.standardUserDefaults().setBool(true, forKey:"fbAuthorized") + + FBSDKAccessToken.setCurrentAccessToken(result.token) + + print("user logged in through facebook") + self.makeGETRequest("",params: nil) + + } + if(!FBSDKAccessToken.currentAccessToken().hasGranted("publish_actions")){ + dispatch_async(dispatch_get_main_queue(), { () -> Void in + + self.login.logInWithPublishPermissions(["publish_actions"], fromViewController: nil,handler: { + (result, error) -> Void in + + NSLog("Logged in with publish permisions") + }) + + }) + + } + }) + }) - //once everything is authorized save true value to the authorization boolean - - NSUserDefaults.standardUserDefaults().setBool(true, forKey: "fbAuthorized") - self.isAuthorized = NSUserDefaults.standardUserDefaults().boolForKey("fbAuthorized") - - }*/ - }) - - // self.isAuthorized = oauth2Module.isAuthorized() - - - /* - oauth2Module.revokeAccess({(response, error) in - if (error != nil) { - // do something with error - print("accessrevoked") + return boolResult } - // do domething - }) - */ + print("token not valid") + return false + } + else{ + print(FBSDKAccessToken.currentAccessToken()) + print("user already logged in") + self.makeGETRequest("",params: nil) + return true + } } - func deAuthorizeApp(viewcontroller: UIViewController){ - let facebookConfig = FacebookConfig( // [2] - clientId: self.apiKey, - clientSecret: self.apiSecret, - scopes:["publish_actions"]) - let oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3] - oauth2Module.revokeAccess({(response, error) in - if (error != nil) { - // do something with error - } - // do domething - }) + func deAuthorizeApp(viewcontroller: UIViewController) -> Bool{ + return self.makeDELETIONResquest("/permissions", params: nil) } } + +//MARK: - request methods(GET, POST, DELETE) +extension FacebookGraphAPIManager { + + //when making request make sure path starts with '/' + func makeGETRequest(requestPath: String!, params: [NSObject: AnyObject]!) -> Bool{ + + let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me" + requestPath, parameters: params) + var boolResult: Bool = false + + graphRequest.startWithCompletionHandler({ + (id, result, error) -> Void in + + print(result) + + + + + }) + return boolResult + + } + + //used to post to users timeline, path must start with '/' + func makePOSTResquest(requestPath: String!, params: [NSObject: AnyObject]!){ + + let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me" + requestPath, parameters: params, HTTPMethod: "POST") + graphRequest.startWithCompletionHandler({ + (id, result, error) -> Void in + print(result) + }) + } + + //used to delete permissions and listings from users timeline, path must start with '/' + func makeDELETIONResquest(requestPath: String!, params: [NSObject: AnyObject]!) -> Bool{ + + let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me" + requestPath, parameters: params, HTTPMethod: "DELETE") + var boolResult: Bool = false + dispatch_async(dispatch_get_main_queue(), { + graphRequest.startWithCompletionHandler({ + (id, result, error) -> Void in + print(result) + + if(requestPath == "/permssions"){ + if(error == nil){ + //this part is not getting called but almost have the oauth done + boolResult = true + NSUserDefaults.standardUserDefaults().setBool(false, forKey:"fbAuthorized") + } + else{ + print(error.localizedDescription) + boolResult = false + + } + } + + boolResult = false + }) + }) + + + return boolResult + } + +} diff --git a/Vendoo/Info.plist b/Vendoo/Info.plist index 32a4817..1fee3a0 100644 --- a/Vendoo/Info.plist +++ b/Vendoo/Info.plist @@ -24,7 +24,7 @@ CFBundleTypeRole Editor CFBundleURLName - + com.Kroleo.Vendoo CFBundleURLSchemes fb504150909777657 @@ -39,8 +39,9 @@ Vendoo LSApplicationQueriesSchemes - fbapi fbauth2 + fbapi + fb-messenger-api fbshareextension LSRequiresIPhoneOS diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 20ae9b6..ae93fa1 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -143,8 +143,13 @@ extension NetworksTableViewController: UITableViewDataSource { cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) break default: - //loads network cell for ebay + //loads network cell for facebook cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) + + if((self.tabBarController as? HomeViewController)?.fbGraphManager.isAuthorized)!{ + + (cell as! FBTableViewCell).networkToggle.setOn(true, animated: false) + } break } } @@ -415,15 +420,17 @@ extension NetworksTableViewController: UITableViewDelegate { cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) cell.setSelected(false, animated: false) - //OAuthorization code for facebook - if(cell.networkToggle.on == true){ + if((self.tabBarController as? HomeViewController)?.fbGraphManager.isAuthorized)!{ dispatch_async(dispatch_get_main_queue(), { () -> Void in cell.networkToggle.setOn(false, animated: true) }) //code to deauthorize network + let tabBar = self.tabBarController + let didSucceed:Bool = ((tabBar as? HomeViewController)?.fbGraphManager.deAuthorizeApp(self))! + cell.networkToggle.on = !didSucceed } else{ @@ -434,11 +441,12 @@ extension NetworksTableViewController: UITableViewDelegate { //this is the type of code desired to access the rest management classes - let tabBar = self.tabBarController - (tabBar as? HomeViewController)?.fbGraphManager.authorizeApp(self) - + let tabBar = self.tabBarController + let didSucceed: Bool = ((tabBar as? HomeViewController)?.fbGraphManager.authorizeApp(self))! + cell.networkToggle.on = didSucceed //self.fbGraphManager.authorizeApp(self) + }