From 77998c82e20d85e143bb3584c14c8a8389e046cd Mon Sep 17 00:00:00 2001 From: Kyle Ellis Date: Sat, 9 Sep 2017 06:05:54 -0700 Subject: [PATCH 1/2] Added auth through Laravel Passport auth server --- README.md | 12 ++++++ dist/ng-cordova-oauth.js | 81 ++++++++++++++++++++++++++++++++++-- dist/ng-cordova-oauth.min.js | 6 +-- src/oauth.js | 11 +++-- src/oauth.passport.js | 69 ++++++++++++++++++++++++++++++ 5 files changed, 168 insertions(+), 11 deletions(-) create mode 100644 src/oauth.passport.js diff --git a/README.md b/README.md index cf4d547..151ec4e 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ Each web service API acts independently in this library. However, when configur $cordovaOauth.fiveHundredsPx(string sdkKey, object options); $cordovaOauth.netatmo(object options); $cordovaOauth.trakttv(string clientId, string clientSecret, string state); + $cordovaOauth.passport(clientId, appScope, options); Each API call returns a promise. The success callback will provide a response object and the error callback will return a string. @@ -117,6 +118,17 @@ To authenticate with Twitter, Withings, Magento and Xing an additional library i As of Apache Cordova 5.0.0, the [whitelist plugin](https://www.thepolyglotdeveloper.com/2015/05/whitelist-external-resources-for-use-in-ionic-framework/) must be used in order to reach external web services. +To Authenticate with the Passport plugin using your own Auth server with [Laravel Passport](https://laravel.com/docs/master/passport) you must pass in your site url and client secret for the client you are using + +```javascript +// Notice in the target_url there is no trailing slash +$cordovaOauth.passport('CLIENT_ID_HERE',['YOUR_SCOPES_HERE'], {client_secret: 'YOU_CLIENT_SECRET',target_url: 'http(s)://your-site.com'}).then(function(result) { + // Handle your auth here +}, function(error) { + // Handle your error here +}); +``` + ### Important Note About Testing This library will **NOT** work with a web browser, ionic serve, ionic live-reload, or ionic view. It **MUST** be used via installing to a device or simulator. diff --git a/dist/ng-cordova-oauth.js b/dist/ng-cordova-oauth.js index 7e5a373..f34d97f 100644 --- a/dist/ng-cordova-oauth.js +++ b/dist/ng-cordova-oauth.js @@ -1038,7 +1038,8 @@ 'oauth.xing', 'oauth.netatmo', 'oauth.trakttv', - 'oauth.yahoo']) + 'oauth.yahoo', + 'oauth.passport']) .factory("$cordovaOauth", cordovaOauth); function cordovaOauth( @@ -1047,7 +1048,7 @@ $ngCordovaTwitter, $ngCordovaMeetup, $ngCordovaSalesforce, $ngCordovaStrava, $ngCordovaWithings, $ngCordovaFoursquare, $ngCordovaMagento, $ngCordovaVkontakte, $ngCordovaOdnoklassniki, $ngCordovaImgur, $ngCordovaSpotify, $ngCordovaUber, $ngCordovaWindowslive, $ngCordovaYammer, $ngCordovaVenmo, $ngCordovaStripe, $ngCordovaRally, $ngCordovaFamilySearch, $ngCordovaEnvato, $ngCordovaWeibo, $ngCordovaJawbone, $ngCordovaUntappd, - $ngCordovaDribble, $ngCordovaPocket, $ngCordovaMercadolibre, $ngCordovaXing, $ngCordovaNetatmo, $ngCordovaTraktTv, $ngCordovaYahoo) { + $ngCordovaDribble, $ngCordovaPocket, $ngCordovaMercadolibre, $ngCordovaXing, $ngCordovaNetatmo, $ngCordovaTraktTv, $ngCordovaYahoo, $ngCordovaPassport) { return { azureAD: $ngCordovaAzureAD.signin, @@ -1090,7 +1091,8 @@ xing: $ngCordovaXing.signin, netatmo: $ngCordovaNetatmo.signin, trakttv: $ngCordovaTraktTv.signin, - yahoo: $ngCordovaYahoo.signin + yahoo: $ngCordovaYahoo.signin, + passport: $ngCordovaPassport }; } @@ -1136,7 +1138,8 @@ '$ngCordovaXing', '$ngCordovaNetatmo', '$ngCordovaTraktTv', - '$ngCordovaYahoo' + '$ngCordovaYahoo', + '$ngCordovaPassport' ]; })(); @@ -1606,6 +1609,76 @@ odnoklassniki.$inject = ['$q', '$http', '$cordovaOauthUtility']; })(); +(function() { + 'use strict'; + + angular.module('oauth.passport', ['oauth.utils']) + .factory('$ngCordovaPassport', passport); + + function passport($q, $http, $cordovaOauthUtility) { + return { signin: oauthPassport }; + + /* + * Sign into the Laravel Passport service + * + * @param string clientId + * @param array appScope + * @param object options + * @return promise + */ + function oauthPassport(clientId, appScope, options) { + var deferred = $q.defer(); + if(window.cordova) { + if($cordovaOauthUtility.isInAppBrowserInstalled()) { + var redirect_uri = "http://localhost/callback"; + var target_url = ''; + var client_secret = ''; + if(options !== undefined) { + if(options.hasOwnProperty("redirect_uri")) { + redirect_uri = options.redirect_uri; + } + if(options.hasOwnProperty("target_url")) { + target_url = options.target_url; + } + if(options.hasOwnProperty('client_secret')) { + client_secret = options.client_secret; + } + } + + var browserRef = window.cordova.InAppBrowser.open(target_url + '/oauth/authorize?response_type=code&client_id=' + clientId + '&redirect_uri='+ redirect_uri +'&scope=' + appScope.join(' '), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes'); + browserRef.addEventListener("loadstart", function(event) { + if((event.url).indexOf(redirect_uri) === 0) { + var requestToken = (event.url).split("code=")[1]; + + $http({method: "post", headers: {'Content-Type': 'application/x-www-form-urlencoded'}, url: target_url+ '/oauth/token', data: "client_id=" + clientId + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken }) + .then(function(data) { + deferred.resolve(data); + }) + .catch(function(data, status) { + deferred.reject(data); + }) + .finally(function() { + setTimeout(function() { + browserRef.close(); + }, 10); + }); + } + }); + browserRef.addEventListener('exit', function(event) { + deferred.reject("The sign in flow was canceled"); + }); + } else { + deferred.reject("Could not find InAppBrowser plugin"); + } + } else { + deferred.reject("Cannot authenticate via a web browser"); + } + return deferred.promise; + } + } + passport.$inject = ['$q', '$http', '$cordovaOauthUtility']; +})(); + (function() { 'use strict'; diff --git a/dist/ng-cordova-oauth.min.js b/dist/ng-cordova-oauth.min.js index a2737fe..99c5ce9 100644 --- a/dist/ng-cordova-oauth.min.js +++ b/dist/ng-cordova-oauth.min.js @@ -1,4 +1,4 @@ -// ng-cordova-oauth - v0.3.0 (2016-11-17) +// ng-cordova-oauth - v0.3.0 (2017-09-09) // http://www.nraboy.com -!function(){"use strict";function e(e,t,o){function n(t,n){var r=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==n&&n.hasOwnProperty("redirect_uri")&&(i=n.redirect_uri);var a=window.cordova.InAppBrowser.open("https://api.500px.com/v1/api/js-sdk/authorize?sdk_key="+t+"&callback="+i,"_blank","toolbar=no,zoom=no,location=no,clearsessioncache=yes,clearcache=yes");a.addEventListener("loadstart",function(e){if(0===e.url.indexOf(i)){var t=e.url.split("#token:")[1].split(",")[0];r.resolve({error:!1,success:!0,access_token:t,callback:i})}else r.reject({success:!1,callback:i,error:!0,access_token:null})}),a.addEventListener("exit",function(){r.reject("The sign in flow was canceled")})}else r.reject("Could not find InAppBrowser plugin");else r.reject("Cannot authenticate via a web browser");return r.promise}return{signin:n}}angular.module("oauth.500px",["oauth.utils"]).factory("$ngCordova500px",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i){var a=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var c=window.cordova.InAppBrowser.open(r+"/adfs/oauth2/authorize?response_type=code&client_id="+n+"&redirect_uri=http://localhost/callback&resource="+i,"_blank","location=no");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){var o=e.url.split("code=")[1];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:r+"/adfs/oauth2/token",data:"client_id="+n+"&code="+o+"&redirect_uri=http://localhost/callback&grant_type=authorization_code"}).success(function(e){a.resolve(e)}).error(function(){a.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){c.close()},10)})}}),c.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin");else a.reject("Cannot authenticate via a web browser");return a.promise}return{signin:n}}angular.module("oauth.adfs",["oauth.utils"]).factory("$ngCordovaAdfs",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i){var a=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var c=window.cordova.InAppBrowser.open("https://login.microsoftonline.com/"+r+"/oauth2/authorize?response_type=code&client_id="+n+"&redirect_uri=http://localhost/callback","_blank","location=no,clearsessioncache=yes,clearcache=yes");c.addEventListener("loadstart",function(e){if(0===e.url.indexOf("http://localhost/callback")){var o=e.url.split("code=")[1];console.log(o),t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://login.microsoftonline.com/"+r+"/oauth2/token",data:"client_id="+n+"&code="+o+"&redirect_uri=http://localhost/callback&grant_type=authorization_code&resource="+i}).success(function(e){a.resolve(e)}).error(function(){a.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){c.close()},10)})}}),c.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin");else a.reject("Cannot authenticate via a web browser");return a.promise}return{signin:n}}angular.module("oauth.azuread",["oauth.utils"]).factory("$ngCordovaAzureAD",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i,a){var c=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var s="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(s=a.redirect_uri);var l=window.cordova.InAppBrowser.open("https://app.box.com/api/oauth2/authorize/?client_id="+n+"&redirect_uri="+s+"&state="+i+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){if(0===e.url.indexOf(s)){var o=e.url.split("code=")[1];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://app.box.com/api/oauth2/token",data:"client_id="+n+"&client_secret="+r+"&redirect_uri="+s+"&grant_type=authorization_code&code="+o}).success(function(e){c.resolve(e)}).error(function(){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)})}}),l.addEventListener("exit",function(){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin");else c.reject("Cannot authenticate via a web browser");return c.promise}return{signin:n}}angular.module("oauth.box",["oauth.utils"]).factory("$ngCordovaBox",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i){var a=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var c="http://localhost/callback";void 0!==i&&i.hasOwnProperty("redirect_uri")&&(c=i.redirect_uri);var s=window.cordova.InAppBrowser.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id="+n+"&redirect_uri="+c+"&response_type=code&scope=read%20write","_blank","location=no,clearsessioncache=yes,clearcache=yes");s.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){var o=e.url.split("code=")[1];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://cloud.digitalocean.com/v1/oauth/token",data:"client_id="+n+"&client_secret="+r+"&redirect_uri="+c+"&grant_type=authorization_code&code="+o}).success(function(e){a.resolve(e)}).error(function(){a.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){s.close()},10)})}}),s.addEventListener("exit",function(){a.reject("The sign in flow was canceled")})}else a.reject("Could not find InAppBrowser plugin");else a.reject("Cannot authenticate via a web browser");return a.promise}return{signin:n}}angular.module("oauth.digitalOcean",["oauth.utils"]).factory("$ngCordovaDigitalOcean",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i,a,c){var s=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var l="http://localhost/callback",u="https://dribbble.com/oauth/authorize",d="https://dribbble.com/oauth/token";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(l=a.redirect_uri),void 0===c&&(c=o.createNonce(5));var p=i.join(",").replace(/,/g,"+"),h=window.cordova.InAppBrowser.open(u+"?client_id="+n+"&redirect_uri="+l+"&scope="+p+"&state="+c,"_blank","location=no,clearsessioncache=yes,clearcache=yes");h.addEventListener("loadstart",function(e){if(0===e.url.indexOf(l)){var o=e.url.split("code=")[1],i=o.split("&")[0];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:d,data:"client_id="+n+"&redirect_uri="+l+"&client_secret="+r+"&code="+i}).success(function(e){s.resolve(e)}).error(function(){s.reject("Problem authenticating ")})["finally"](function(){setTimeout(function(){h.close()},10)})}}),h.addEventListener("exit",function(){s.reject("The sign in flow was canceled")})}else s.reject("Could not find InAppBrowser plugin");else s.reject("Cannot authenticate via a web browser");return s.promise}return{signin:n}}angular.module("oauth.dribble",["oauth.utils"]).factory("$ngCordovaDribble",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(t,n){var r=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==n&&n.hasOwnProperty("redirect_uri")&&(i=n.redirect_uri);var a=window.cordova.InAppBrowser.open("https://www.dropbox.com/1/oauth2/authorize?client_id="+t+"&redirect_uri="+i+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");a.addEventListener("loadstart",function(e){if(0===e.url.indexOf(i)){a.removeEventListener("exit",function(){}),a.close();for(var t=e.url.split("#")[1],o=t.split("&"),n=[],c=0;c0&&(u="&scope="+n.join("+"));var d="https://api.instagram.com/oauth/authorize/?client_id="+t+u+"&response_type="+s+"&redirect_uri="+c,p=window.cordova.InAppBrowser.open(d,"_blank","location=no,clearsessioncache=yes,clearcache=yes");p.addEventListener("loadstart",function(e){if(0===e.url.indexOf(c)){p.removeEventListener("exit",function(){}),p.close();var t=e.url.split(a[s])[1],n=o.parseResponseParameters(t);n.access_token?i.resolve({access_token:n.access_token}):void 0!==n.code&&null!==n.code?i.resolve({code:n.code}):i.reject("Problem authenticating")}else e.url===l&&p.executeScript({code:"window.location = '"+d+"';"})}),p.addEventListener("exit",function(){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin");else i.reject("Cannot authenticate via a web browser");return i.promise}return{signin:n}}angular.module("oauth.instagram",["oauth.utils"]).factory("$ngCordovaInstagram",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i,a){var c=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var s="http://localhost/callback";void 0!==a&&a.hasOwnProperty("redirect_uri")&&(s=a.redirect_uri);var l=window.cordova.InAppBrowser.open("https://jawbone.com/auth/oauth2/auth?client_id="+n+"&redirect_uri="+s+"&response_type=code&scope="+i.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");l.addEventListener("loadstart",function(e){if(0===e.url.indexOf(s)){var o=e.url.split("code=")[1];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://jawbone.com/auth/oauth2/token",data:"client_id="+n+"&client_secret="+r+"&grant_type=authorization_code&code="+o}).success(function(e){c.resolve(e)}).error(function(){c.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){l.close()},10)})}}),l.addEventListener("exit",function(){c.reject("The sign in flow was canceled")})}else c.reject("Could not find InAppBrowser plugin");else c.reject("Cannot authenticate via a web browser");return c.promise}return{signin:n}}angular.module("oauth.jawbone",["oauth.utils"]).factory("$ngCordovaJawbone",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o,n,r,i,a,c,s,l,u,d,p,h,f,v,w,g,_,m,y,k,b,j,$,C,I,O,x,A,B,T,E,P,L,z,q,U,S,H,M,R,D,N){return{azureAD:n.signin,adfs:r.signin,dropbox:i.signin,digitalOcean:a.signin,google:c.signin,github:s.signin,facebook:l.signin,linkedin:u.signin,instagram:d.signin,box:p.signin,reddit:h.signin,slack:f.signin,twitter:v.signin,meetup:w.signin,salesforce:g.signin,strava:_.signin,withings:m.signin,foursquare:y.signin,magento:k.signin,vkontakte:b.signin,odnoklassniki:j.signin,imgur:$.signin,spotify:C.signin,uber:I.signin,windowsLive:O.signin,yammer:x.signin,venmo:A.signin,stripe:B.signin,rally:T.signin,familySearch:E.signin,envato:P.signin,weibo:L.signin,jawbone:z.signin,untappd:q.signin,dribble:U.signin,pocket:S.signin,mercadolibre:H.signin,xing:M.signin,netatmo:R.signin,trakttv:D.signin,yahoo:N.signin}}angular.module("oauth.providers",["oauth.utils","oauth.500px","oauth.azuread","oauth.adfs","oauth.dropbox","oauth.digitalOcean","oauth.google","oauth.github","oauth.facebook","oauth.linkedin","oauth.instagram","oauth.box","oauth.reddit","oauth.slack","oauth.twitter","oauth.meetup","oauth.salesforce","oauth.strava","oauth.withings","oauth.foursquare","oauth.magento","oauth.vkontakte","oauth.odnoklassniki","oauth.imgur","oauth.spotify","oauth.uber","oauth.windowslive","oauth.yammer","oauth.venmo","oauth.stripe","oauth.rally","oauth.familySearch","oauth.envato","oauth.weibo","oauth.jawbone","oauth.untappd","oauth.dribble","oauth.pocket","oauth.mercadolibre","oauth.xing","oauth.netatmo","oauth.trakttv","oauth.yahoo"]).factory("$cordovaOauth",e),e.$inject=["$q","$http","$cordovaOauthUtility","$ngCordovaAzureAD","$ngCordovaAdfs","$ngCordovaDropbox","$ngCordovaDigitalOcean","$ngCordovaGoogle","$ngCordovaGithub","$ngCordovaFacebook","$ngCordovaLinkedin","$ngCordovaInstagram","$ngCordovaBox","$ngCordovaReddit","$ngCordovaSlack","$ngCordovaTwitter","$ngCordovaMeetup","$ngCordovaSalesforce","$ngCordovaStrava","$ngCordovaWithings","$ngCordovaFoursquare","$ngCordovaMagento","$ngCordovaVkontakte","$ngCordovaOdnoklassniki","$ngCordovaImgur","$ngCordovaSpotify","$ngCordovaUber","$ngCordovaWindowslive","$ngCordovaYammer","$ngCordovaVenmo","$ngCordovaStripe","$ngCordovaRally","$ngCordovaFamilySearch","$ngCordovaEnvato","$ngCordovaWeibo","$ngCordovaJawbone","$ngCordovaUntappd","$ngCordovaDribble","$ngCordovaPocket","$ngCordovaMercadolibre","$ngCordovaXing","$ngCordovaNetatmo","$ngCordovaTraktTv","$ngCordovaYahoo"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i,a,c){var s=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled()){var l="http://localhost/callback";void 0!==c&&c.hasOwnProperty("redirect_uri")&&(l=c.redirect_uri);var u=window.cordova.InAppBrowser.open("https://www.linkedin.com/oauth/v2/authorization?client_id="+n+"&redirect_uri="+l+"&scope="+i.join(" ")+"&response_type=code&state="+a,"_blank","location=no,clearsessioncache=yes,clearcache=yes");u.addEventListener("loadstart",function(e){if(0===e.url.indexOf(l))try{var o=e.url.split("code=")[1].split("&")[0];t({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded","Access-Control-Allow-Origin":"*","X-Requested-With":"XMLHttpRequest"},url:"https://www.linkedin.com/oauth/v2/accessToken",data:"client_id="+n+"&client_secret="+r+"&redirect_uri="+l+"&grant_type=authorization_code&code="+o}).success(function(e){s.resolve(e)}).error(function(){s.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){u.close()},10)})}catch(i){setTimeout(function(){u.close()},10)}}),u.addEventListener("exit",function(){s.reject("The sign in flow was canceled")})}else s.reject("Could not find InAppBrowser plugin");else s.reject("Cannot authenticate via a web browser");return s.promise}return{signin:n}}angular.module("oauth.linkedin",["oauth.utils"]).factory("$ngCordovaLinkedin",e),e.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function e(e,t,o){function n(n,r,i){var a=e.defer();if(window.cordova)if(o.isInAppBrowserInstalled())if("undefined"!=typeof jsSHA){var c={oauth_callback:"http://localhost/callback",oauth_consumer_key:r,oauth_nonce:o.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},s=o.createSignature("POST",n+"/oauth/initiate",c,{oauth_callback:"http://localhost/callback"},i);t.defaults.headers.post.Authorization=s.authorization_header,t.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",t({method:"post",url:n+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(e){for(var r=e.split("&"),s={},l=0;ln;n++)t+=o.charAt(Math.floor(Math.random()*o.length));return t}function n(e){var t=Object.keys(e);t.sort();for(var o="",n="",r=0;r0&&(k="&scope="+d.join("+"));var l="https://api.instagram.com/oauth/authorize/?client_id="+b+k+"&response_type="+i+"&redirect_uri="+h,m=window.cordova.InAppBrowser.open(l,"_blank","location=no,clearsessioncache=yes,clearcache=yes");m.addEventListener("loadstart",function(a){if(0===a.url.indexOf(h)){m.removeEventListener("exit",function(a){}),m.close();var b=a.url.split(g[i])[1],d=c.parseResponseParameters(b);d.access_token?f.resolve({access_token:d.access_token}):void 0!==d.code&&null!==d.code?f.resolve({code:d.code}):f.reject("Problem authenticating")}else a.url===j&&m.executeScript({code:"window.location = '"+l+"';"})}),m.addEventListener("exit",function(a){f.reject("The sign in flow was canceled")})}else f.reject("Could not find InAppBrowser plugin");else f.reject("Cannot authenticate via a web browser");return f.promise}return{signin:d}}angular.module("oauth.instagram",["oauth.utils"]).factory("$ngCordovaInstagram",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g){var h=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==g&&g.hasOwnProperty("redirect_uri")&&(i=g.redirect_uri);var j=window.cordova.InAppBrowser.open("https://jawbone.com/auth/oauth2/auth?client_id="+d+"&redirect_uri="+i+"&response_type=code&scope="+f.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");j.addEventListener("loadstart",function(a){if(0===a.url.indexOf(i)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://jawbone.com/auth/oauth2/token",data:"client_id="+d+"&client_secret="+e+"&grant_type=authorization_code&code="+c}).success(function(a){h.resolve(a)}).error(function(a,b){h.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){j.close()},10)})}}),j.addEventListener("exit",function(a){h.reject("The sign in flow was canceled")})}else h.reject("Could not find InAppBrowser plugin");else h.reject("Cannot authenticate via a web browser");return h.promise}return{signin:d}}angular.module("oauth.jawbone",["oauth.utils"]).factory("$ngCordovaJawbone",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S){return{azureAD:d.signin,adfs:e.signin,dropbox:f.signin,digitalOcean:g.signin,google:h.signin,github:i.signin,facebook:j.signin,linkedin:k.signin,instagram:l.signin,box:m.signin,reddit:n.signin,slack:o.signin,twitter:p.signin,meetup:q.signin,salesforce:r.signin,strava:s.signin,withings:t.signin,foursquare:u.signin,magento:v.signin,vkontakte:w.signin,odnoklassniki:x.signin,imgur:y.signin,spotify:z.signin,uber:A.signin,windowsLive:B.signin,yammer:C.signin,venmo:D.signin,stripe:E.signin,rally:F.signin,familySearch:G.signin,envato:H.signin,weibo:I.signin,jawbone:J.signin,untappd:K.signin,dribble:L.signin,pocket:M.signin,mercadolibre:N.signin,xing:O.signin,netatmo:P.signin,trakttv:Q.signin,yahoo:R.signin,passport:S}}angular.module("oauth.providers",["oauth.utils","oauth.500px","oauth.azuread","oauth.adfs","oauth.dropbox","oauth.digitalOcean","oauth.google","oauth.github","oauth.facebook","oauth.linkedin","oauth.instagram","oauth.box","oauth.reddit","oauth.slack","oauth.twitter","oauth.meetup","oauth.salesforce","oauth.strava","oauth.withings","oauth.foursquare","oauth.magento","oauth.vkontakte","oauth.odnoklassniki","oauth.imgur","oauth.spotify","oauth.uber","oauth.windowslive","oauth.yammer","oauth.venmo","oauth.stripe","oauth.rally","oauth.familySearch","oauth.envato","oauth.weibo","oauth.jawbone","oauth.untappd","oauth.dribble","oauth.pocket","oauth.mercadolibre","oauth.xing","oauth.netatmo","oauth.trakttv","oauth.yahoo","oauth.passport"]).factory("$cordovaOauth",a),a.$inject=["$q","$http","$cordovaOauthUtility","$ngCordovaAzureAD","$ngCordovaAdfs","$ngCordovaDropbox","$ngCordovaDigitalOcean","$ngCordovaGoogle","$ngCordovaGithub","$ngCordovaFacebook","$ngCordovaLinkedin","$ngCordovaInstagram","$ngCordovaBox","$ngCordovaReddit","$ngCordovaSlack","$ngCordovaTwitter","$ngCordovaMeetup","$ngCordovaSalesforce","$ngCordovaStrava","$ngCordovaWithings","$ngCordovaFoursquare","$ngCordovaMagento","$ngCordovaVkontakte","$ngCordovaOdnoklassniki","$ngCordovaImgur","$ngCordovaSpotify","$ngCordovaUber","$ngCordovaWindowslive","$ngCordovaYammer","$ngCordovaVenmo","$ngCordovaStripe","$ngCordovaRally","$ngCordovaFamilySearch","$ngCordovaEnvato","$ngCordovaWeibo","$ngCordovaJawbone","$ngCordovaUntappd","$ngCordovaDribble","$ngCordovaPocket","$ngCordovaMercadolibre","$ngCordovaXing","$ngCordovaNetatmo","$ngCordovaTraktTv","$ngCordovaYahoo","$ngCordovaPassport"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g,h){var i=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var j="http://localhost/callback";void 0!==h&&h.hasOwnProperty("redirect_uri")&&(j=h.redirect_uri);var k=window.cordova.InAppBrowser.open("https://www.linkedin.com/oauth/v2/authorization?client_id="+d+"&redirect_uri="+j+"&scope="+f.join(" ")+"&response_type=code&state="+g,"_blank","location=no,clearsessioncache=yes,clearcache=yes");k.addEventListener("loadstart",function(a){if(0===a.url.indexOf(j))try{var c=a.url.split("code=")[1].split("&")[0];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded","Access-Control-Allow-Origin":"*","X-Requested-With":"XMLHttpRequest"},url:"https://www.linkedin.com/oauth/v2/accessToken",data:"client_id="+d+"&client_secret="+e+"&redirect_uri="+j+"&grant_type=authorization_code&code="+c}).success(function(a){i.resolve(a)}).error(function(a,b){i.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){k.close()},10)})}catch(f){setTimeout(function(){k.close()},10)}}),k.addEventListener("exit",function(a){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin");else i.reject("Cannot authenticate via a web browser");return i.promise}return{signin:d}}angular.module("oauth.linkedin",["oauth.utils"]).factory("$ngCordovaLinkedin",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled())if("undefined"!=typeof jsSHA){var h={oauth_callback:"http://localhost/callback",oauth_consumer_key:e,oauth_nonce:c.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},i=c.createSignature("POST",d+"/oauth/initiate",h,{oauth_callback:"http://localhost/callback"},f);b.defaults.headers.post.Authorization=i.authorization_header,b.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",b({method:"post",url:d+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(a){for(var e=a.split("&"),i={},j=0;j Date: Fri, 15 Sep 2017 03:30:48 -0700 Subject: [PATCH 2/2] Renamed provider from 'passport' to 'laravelPassport' --- dist/ng-cordova-oauth.js | 148 +++++++++--------- dist/ng-cordova-oauth.min.js | 4 +- src/oauth.js | 8 +- ...h.passport.js => oauth.laravelPassport.js} | 12 +- 4 files changed, 86 insertions(+), 86 deletions(-) rename src/{oauth.passport.js => oauth.laravelPassport.js} (86%) diff --git a/dist/ng-cordova-oauth.js b/dist/ng-cordova-oauth.js index f34d97f..fb221b2 100644 --- a/dist/ng-cordova-oauth.js +++ b/dist/ng-cordova-oauth.js @@ -1039,7 +1039,7 @@ 'oauth.netatmo', 'oauth.trakttv', 'oauth.yahoo', - 'oauth.passport']) + 'oauth.laravelPassport']) .factory("$cordovaOauth", cordovaOauth); function cordovaOauth( @@ -1048,7 +1048,7 @@ $ngCordovaTwitter, $ngCordovaMeetup, $ngCordovaSalesforce, $ngCordovaStrava, $ngCordovaWithings, $ngCordovaFoursquare, $ngCordovaMagento, $ngCordovaVkontakte, $ngCordovaOdnoklassniki, $ngCordovaImgur, $ngCordovaSpotify, $ngCordovaUber, $ngCordovaWindowslive, $ngCordovaYammer, $ngCordovaVenmo, $ngCordovaStripe, $ngCordovaRally, $ngCordovaFamilySearch, $ngCordovaEnvato, $ngCordovaWeibo, $ngCordovaJawbone, $ngCordovaUntappd, - $ngCordovaDribble, $ngCordovaPocket, $ngCordovaMercadolibre, $ngCordovaXing, $ngCordovaNetatmo, $ngCordovaTraktTv, $ngCordovaYahoo, $ngCordovaPassport) { + $ngCordovaDribble, $ngCordovaPocket, $ngCordovaMercadolibre, $ngCordovaXing, $ngCordovaNetatmo, $ngCordovaTraktTv, $ngCordovaYahoo, $ngCordovaLaravelPassport) { return { azureAD: $ngCordovaAzureAD.signin, @@ -1092,7 +1092,7 @@ netatmo: $ngCordovaNetatmo.signin, trakttv: $ngCordovaTraktTv.signin, yahoo: $ngCordovaYahoo.signin, - passport: $ngCordovaPassport + passport: $ngCordovaLaravelPassport }; } @@ -1139,10 +1139,80 @@ '$ngCordovaNetatmo', '$ngCordovaTraktTv', '$ngCordovaYahoo', - '$ngCordovaPassport' + '$ngCordovaLaravelPassport' ]; })(); +(function() { + 'use strict'; + + angular.module('oauth.laravelPassport', ['oauth.utils']) + .factory('$ngCordovaLaravelPassport', laravelPassport); + + function laravelPassport($q, $http, $cordovaOauthUtility) { + return { signin: oauthLaravelPassport }; + + /* + * Sign into the Laravel Passport service + * + * @param string clientId + * @param array appScope + * @param object options + * @return promise + */ + function oauthLaravelPassport(clientId, appScope, options) { + var deferred = $q.defer(); + if(window.cordova) { + if($cordovaOauthUtility.isInAppBrowserInstalled()) { + var redirect_uri = "http://localhost/callback"; + var target_url = ''; + var client_secret = ''; + if(options !== undefined) { + if(options.hasOwnProperty("redirect_uri")) { + redirect_uri = options.redirect_uri; + } + if(options.hasOwnProperty("target_url")) { + target_url = options.target_url; + } + if(options.hasOwnProperty('client_secret')) { + client_secret = options.client_secret; + } + } + + var browserRef = window.cordova.InAppBrowser.open(target_url + '/oauth/authorize?response_type=code&client_id=' + clientId + '&redirect_uri='+ redirect_uri +'&scope=' + appScope.join(' '), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes'); + browserRef.addEventListener("loadstart", function(event) { + if((event.url).indexOf(redirect_uri) === 0) { + var requestToken = (event.url).split("code=")[1]; + + $http({method: "post", headers: {'Content-Type': 'application/x-www-form-urlencoded'}, url: target_url+ '/oauth/token', data: "client_id=" + clientId + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken }) + .then(function(data) { + deferred.resolve(data); + }) + .catch(function(data, status) { + deferred.reject(data); + }) + .finally(function() { + setTimeout(function() { + browserRef.close(); + }, 10); + }); + } + }); + browserRef.addEventListener('exit', function(event) { + deferred.reject("The sign in flow was canceled"); + }); + } else { + deferred.reject("Could not find InAppBrowser plugin"); + } + } else { + deferred.reject("Cannot authenticate via a web browser"); + } + return deferred.promise; + } + } + laravelPassport.$inject = ['$q', '$http', '$cordovaOauthUtility']; +})(); + (function() { 'use strict'; @@ -1609,76 +1679,6 @@ odnoklassniki.$inject = ['$q', '$http', '$cordovaOauthUtility']; })(); -(function() { - 'use strict'; - - angular.module('oauth.passport', ['oauth.utils']) - .factory('$ngCordovaPassport', passport); - - function passport($q, $http, $cordovaOauthUtility) { - return { signin: oauthPassport }; - - /* - * Sign into the Laravel Passport service - * - * @param string clientId - * @param array appScope - * @param object options - * @return promise - */ - function oauthPassport(clientId, appScope, options) { - var deferred = $q.defer(); - if(window.cordova) { - if($cordovaOauthUtility.isInAppBrowserInstalled()) { - var redirect_uri = "http://localhost/callback"; - var target_url = ''; - var client_secret = ''; - if(options !== undefined) { - if(options.hasOwnProperty("redirect_uri")) { - redirect_uri = options.redirect_uri; - } - if(options.hasOwnProperty("target_url")) { - target_url = options.target_url; - } - if(options.hasOwnProperty('client_secret')) { - client_secret = options.client_secret; - } - } - - var browserRef = window.cordova.InAppBrowser.open(target_url + '/oauth/authorize?response_type=code&client_id=' + clientId + '&redirect_uri='+ redirect_uri +'&scope=' + appScope.join(' '), '_blank', 'location=no,clearsessioncache=yes,clearcache=yes'); - browserRef.addEventListener("loadstart", function(event) { - if((event.url).indexOf(redirect_uri) === 0) { - var requestToken = (event.url).split("code=")[1]; - - $http({method: "post", headers: {'Content-Type': 'application/x-www-form-urlencoded'}, url: target_url+ '/oauth/token', data: "client_id=" + clientId + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code" + "&code=" + requestToken }) - .then(function(data) { - deferred.resolve(data); - }) - .catch(function(data, status) { - deferred.reject(data); - }) - .finally(function() { - setTimeout(function() { - browserRef.close(); - }, 10); - }); - } - }); - browserRef.addEventListener('exit', function(event) { - deferred.reject("The sign in flow was canceled"); - }); - } else { - deferred.reject("Could not find InAppBrowser plugin"); - } - } else { - deferred.reject("Cannot authenticate via a web browser"); - } - return deferred.promise; - } - } - passport.$inject = ['$q', '$http', '$cordovaOauthUtility']; -})(); - (function() { 'use strict'; diff --git a/dist/ng-cordova-oauth.min.js b/dist/ng-cordova-oauth.min.js index 99c5ce9..48d6877 100644 --- a/dist/ng-cordova-oauth.min.js +++ b/dist/ng-cordova-oauth.min.js @@ -1,4 +1,4 @@ -// ng-cordova-oauth - v0.3.0 (2017-09-09) +// ng-cordova-oauth - v0.3.0 (2017-09-15) // http://www.nraboy.com -!function(){"use strict";function a(a,b,c){function d(b,d){var e=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var f="http://localhost/callback";void 0!==d&&d.hasOwnProperty("redirect_uri")&&(f=d.redirect_uri);var g=window.cordova.InAppBrowser.open("https://api.500px.com/v1/api/js-sdk/authorize?sdk_key="+b+"&callback="+f,"_blank","toolbar=no,zoom=no,location=no,clearsessioncache=yes,clearcache=yes");g.addEventListener("loadstart",function(a){if(0===a.url.indexOf(f)){var b=a.url.split("#token:")[1].split(",")[0];e.resolve({error:!1,success:!0,access_token:b,callback:f})}else e.reject({success:!1,callback:f,error:!0,access_token:null})}),g.addEventListener("exit",function(a){e.reject("The sign in flow was canceled")})}else e.reject("Could not find InAppBrowser plugin");else e.reject("Cannot authenticate via a web browser");return e.promise}return{signin:d}}angular.module("oauth.500px",["oauth.utils"]).factory("$ngCordova500px",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var h=window.cordova.InAppBrowser.open(e+"/adfs/oauth2/authorize?response_type=code&client_id="+d+"&redirect_uri=http://localhost/callback&resource="+f,"_blank","location=no");h.addEventListener("loadstart",function(a){if(0===a.url.indexOf("http://localhost/callback")){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:e+"/adfs/oauth2/token",data:"client_id="+d+"&code="+c+"&redirect_uri=http://localhost/callback&grant_type=authorization_code"}).success(function(a){g.resolve(a)}).error(function(a,b){g.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){h.close()},10)})}}),h.addEventListener("exit",function(a){g.reject("The sign in flow was canceled")})}else g.reject("Could not find InAppBrowser plugin");else g.reject("Cannot authenticate via a web browser");return g.promise}return{signin:d}}angular.module("oauth.adfs",["oauth.utils"]).factory("$ngCordovaAdfs",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var h=window.cordova.InAppBrowser.open("https://login.microsoftonline.com/"+e+"/oauth2/authorize?response_type=code&client_id="+d+"&redirect_uri=http://localhost/callback","_blank","location=no,clearsessioncache=yes,clearcache=yes");h.addEventListener("loadstart",function(a){if(0===a.url.indexOf("http://localhost/callback")){var c=a.url.split("code=")[1];console.log(c),b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://login.microsoftonline.com/"+e+"/oauth2/token",data:"client_id="+d+"&code="+c+"&redirect_uri=http://localhost/callback&grant_type=authorization_code&resource="+f}).success(function(a){g.resolve(a)}).error(function(a,b){g.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){h.close()},10)})}}),h.addEventListener("exit",function(a){g.reject("The sign in flow was canceled")})}else g.reject("Could not find InAppBrowser plugin");else g.reject("Cannot authenticate via a web browser");return g.promise}return{signin:d}}angular.module("oauth.azuread",["oauth.utils"]).factory("$ngCordovaAzureAD",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g){var h=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==g&&g.hasOwnProperty("redirect_uri")&&(i=g.redirect_uri);var j=window.cordova.InAppBrowser.open("https://app.box.com/api/oauth2/authorize/?client_id="+d+"&redirect_uri="+i+"&state="+f+"&response_type=code","_blank","location=no,clearsessioncache=yes,clearcache=yes");j.addEventListener("loadstart",function(a){if(0===a.url.indexOf(i)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://app.box.com/api/oauth2/token",data:"client_id="+d+"&client_secret="+e+"&redirect_uri="+i+"&grant_type=authorization_code&code="+c}).success(function(a){h.resolve(a)}).error(function(a,b){h.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){j.close()},10)})}}),j.addEventListener("exit",function(a){h.reject("The sign in flow was canceled")})}else h.reject("Could not find InAppBrowser plugin");else h.reject("Cannot authenticate via a web browser");return h.promise}return{signin:d}}angular.module("oauth.box",["oauth.utils"]).factory("$ngCordovaBox",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var h="http://localhost/callback";void 0!==f&&f.hasOwnProperty("redirect_uri")&&(h=f.redirect_uri);var i=window.cordova.InAppBrowser.open("https://cloud.digitalocean.com/v1/oauth/authorize?client_id="+d+"&redirect_uri="+h+"&response_type=code&scope=read%20write","_blank","location=no,clearsessioncache=yes,clearcache=yes");i.addEventListener("loadstart",function(a){if(0===a.url.indexOf(h)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://cloud.digitalocean.com/v1/oauth/token",data:"client_id="+d+"&client_secret="+e+"&redirect_uri="+h+"&grant_type=authorization_code&code="+c}).success(function(a){g.resolve(a)}).error(function(a,b){g.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){i.close()},10)})}}),i.addEventListener("exit",function(a){g.reject("The sign in flow was canceled")})}else g.reject("Could not find InAppBrowser plugin");else g.reject("Cannot authenticate via a web browser");return g.promise}return{signin:d}}angular.module("oauth.digitalOcean",["oauth.utils"]).factory("$ngCordovaDigitalOcean",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g,h){var i=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var j="http://localhost/callback",k="https://dribbble.com/oauth/authorize",l="https://dribbble.com/oauth/token";void 0!==g&&g.hasOwnProperty("redirect_uri")&&(j=g.redirect_uri),void 0===h&&(h=c.createNonce(5));var m=f.join(",").replace(/,/g,"+"),n=window.cordova.InAppBrowser.open(k+"?client_id="+d+"&redirect_uri="+j+"&scope="+m+"&state="+h,"_blank","location=no,clearsessioncache=yes,clearcache=yes");n.addEventListener("loadstart",function(a){if(0===a.url.indexOf(j)){var c=a.url.split("code=")[1],f=c.split("&")[0];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:l,data:"client_id="+d+"&redirect_uri="+j+"&client_secret="+e+"&code="+f}).success(function(a){i.resolve(a)}).error(function(a,b){i.reject("Problem authenticating ")})["finally"](function(){setTimeout(function(){n.close()},10)})}}),n.addEventListener("exit",function(a){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin");else i.reject("Cannot authenticate via a web browser");return i.promise}return{signin:d}}angular.module("oauth.dribble",["oauth.utils"]).factory("$ngCordovaDribble",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(b,d){var e=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var f="http://localhost/callback";void 0!==d&&d.hasOwnProperty("redirect_uri")&&(f=d.redirect_uri);var g=window.cordova.InAppBrowser.open("https://www.dropbox.com/1/oauth2/authorize?client_id="+b+"&redirect_uri="+f+"&response_type=token","_blank","location=no,clearsessioncache=yes,clearcache=yes");g.addEventListener("loadstart",function(a){if(0===a.url.indexOf(f)){g.removeEventListener("exit",function(a){}),g.close();for(var b=a.url.split("#")[1],c=b.split("&"),d=[],h=0;h0&&(k="&scope="+d.join("+"));var l="https://api.instagram.com/oauth/authorize/?client_id="+b+k+"&response_type="+i+"&redirect_uri="+h,m=window.cordova.InAppBrowser.open(l,"_blank","location=no,clearsessioncache=yes,clearcache=yes");m.addEventListener("loadstart",function(a){if(0===a.url.indexOf(h)){m.removeEventListener("exit",function(a){}),m.close();var b=a.url.split(g[i])[1],d=c.parseResponseParameters(b);d.access_token?f.resolve({access_token:d.access_token}):void 0!==d.code&&null!==d.code?f.resolve({code:d.code}):f.reject("Problem authenticating")}else a.url===j&&m.executeScript({code:"window.location = '"+l+"';"})}),m.addEventListener("exit",function(a){f.reject("The sign in flow was canceled")})}else f.reject("Could not find InAppBrowser plugin");else f.reject("Cannot authenticate via a web browser");return f.promise}return{signin:d}}angular.module("oauth.instagram",["oauth.utils"]).factory("$ngCordovaInstagram",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g){var h=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==g&&g.hasOwnProperty("redirect_uri")&&(i=g.redirect_uri);var j=window.cordova.InAppBrowser.open("https://jawbone.com/auth/oauth2/auth?client_id="+d+"&redirect_uri="+i+"&response_type=code&scope="+f.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");j.addEventListener("loadstart",function(a){if(0===a.url.indexOf(i)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://jawbone.com/auth/oauth2/token",data:"client_id="+d+"&client_secret="+e+"&grant_type=authorization_code&code="+c}).success(function(a){h.resolve(a)}).error(function(a,b){h.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){j.close()},10)})}}),j.addEventListener("exit",function(a){h.reject("The sign in flow was canceled")})}else h.reject("Could not find InAppBrowser plugin");else h.reject("Cannot authenticate via a web browser");return h.promise}return{signin:d}}angular.module("oauth.jawbone",["oauth.utils"]).factory("$ngCordovaJawbone",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S){return{azureAD:d.signin,adfs:e.signin,dropbox:f.signin,digitalOcean:g.signin,google:h.signin,github:i.signin,facebook:j.signin,linkedin:k.signin,instagram:l.signin,box:m.signin,reddit:n.signin,slack:o.signin,twitter:p.signin,meetup:q.signin,salesforce:r.signin,strava:s.signin,withings:t.signin,foursquare:u.signin,magento:v.signin,vkontakte:w.signin,odnoklassniki:x.signin,imgur:y.signin,spotify:z.signin,uber:A.signin,windowsLive:B.signin,yammer:C.signin,venmo:D.signin,stripe:E.signin,rally:F.signin,familySearch:G.signin,envato:H.signin,weibo:I.signin,jawbone:J.signin,untappd:K.signin,dribble:L.signin,pocket:M.signin,mercadolibre:N.signin,xing:O.signin,netatmo:P.signin,trakttv:Q.signin,yahoo:R.signin,passport:S}}angular.module("oauth.providers",["oauth.utils","oauth.500px","oauth.azuread","oauth.adfs","oauth.dropbox","oauth.digitalOcean","oauth.google","oauth.github","oauth.facebook","oauth.linkedin","oauth.instagram","oauth.box","oauth.reddit","oauth.slack","oauth.twitter","oauth.meetup","oauth.salesforce","oauth.strava","oauth.withings","oauth.foursquare","oauth.magento","oauth.vkontakte","oauth.odnoklassniki","oauth.imgur","oauth.spotify","oauth.uber","oauth.windowslive","oauth.yammer","oauth.venmo","oauth.stripe","oauth.rally","oauth.familySearch","oauth.envato","oauth.weibo","oauth.jawbone","oauth.untappd","oauth.dribble","oauth.pocket","oauth.mercadolibre","oauth.xing","oauth.netatmo","oauth.trakttv","oauth.yahoo","oauth.passport"]).factory("$cordovaOauth",a),a.$inject=["$q","$http","$cordovaOauthUtility","$ngCordovaAzureAD","$ngCordovaAdfs","$ngCordovaDropbox","$ngCordovaDigitalOcean","$ngCordovaGoogle","$ngCordovaGithub","$ngCordovaFacebook","$ngCordovaLinkedin","$ngCordovaInstagram","$ngCordovaBox","$ngCordovaReddit","$ngCordovaSlack","$ngCordovaTwitter","$ngCordovaMeetup","$ngCordovaSalesforce","$ngCordovaStrava","$ngCordovaWithings","$ngCordovaFoursquare","$ngCordovaMagento","$ngCordovaVkontakte","$ngCordovaOdnoklassniki","$ngCordovaImgur","$ngCordovaSpotify","$ngCordovaUber","$ngCordovaWindowslive","$ngCordovaYammer","$ngCordovaVenmo","$ngCordovaStripe","$ngCordovaRally","$ngCordovaFamilySearch","$ngCordovaEnvato","$ngCordovaWeibo","$ngCordovaJawbone","$ngCordovaUntappd","$ngCordovaDribble","$ngCordovaPocket","$ngCordovaMercadolibre","$ngCordovaXing","$ngCordovaNetatmo","$ngCordovaTraktTv","$ngCordovaYahoo","$ngCordovaPassport"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g,h){var i=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var j="http://localhost/callback";void 0!==h&&h.hasOwnProperty("redirect_uri")&&(j=h.redirect_uri);var k=window.cordova.InAppBrowser.open("https://www.linkedin.com/oauth/v2/authorization?client_id="+d+"&redirect_uri="+j+"&scope="+f.join(" ")+"&response_type=code&state="+g,"_blank","location=no,clearsessioncache=yes,clearcache=yes");k.addEventListener("loadstart",function(a){if(0===a.url.indexOf(j))try{var c=a.url.split("code=")[1].split("&")[0];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded","Access-Control-Allow-Origin":"*","X-Requested-With":"XMLHttpRequest"},url:"https://www.linkedin.com/oauth/v2/accessToken",data:"client_id="+d+"&client_secret="+e+"&redirect_uri="+j+"&grant_type=authorization_code&code="+c}).success(function(a){i.resolve(a)}).error(function(a,b){i.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){k.close()},10)})}catch(f){setTimeout(function(){k.close()},10)}}),k.addEventListener("exit",function(a){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin");else i.reject("Cannot authenticate via a web browser");return i.promise}return{signin:d}}angular.module("oauth.linkedin",["oauth.utils"]).factory("$ngCordovaLinkedin",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled())if("undefined"!=typeof jsSHA){var h={oauth_callback:"http://localhost/callback",oauth_consumer_key:e,oauth_nonce:c.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},i=c.createSignature("POST",d+"/oauth/initiate",h,{oauth_callback:"http://localhost/callback"},f);b.defaults.headers.post.Authorization=i.authorization_header,b.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",b({method:"post",url:d+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(a){for(var e=a.split("&"),i={},j=0;j0&&(k="&scope="+d.join("+"));var l="https://api.instagram.com/oauth/authorize/?client_id="+b+k+"&response_type="+i+"&redirect_uri="+h,m=window.cordova.InAppBrowser.open(l,"_blank","location=no,clearsessioncache=yes,clearcache=yes");m.addEventListener("loadstart",function(a){if(0===a.url.indexOf(h)){m.removeEventListener("exit",function(a){}),m.close();var b=a.url.split(g[i])[1],d=c.parseResponseParameters(b);d.access_token?f.resolve({access_token:d.access_token}):void 0!==d.code&&null!==d.code?f.resolve({code:d.code}):f.reject("Problem authenticating")}else a.url===j&&m.executeScript({code:"window.location = '"+l+"';"})}),m.addEventListener("exit",function(a){f.reject("The sign in flow was canceled")})}else f.reject("Could not find InAppBrowser plugin");else f.reject("Cannot authenticate via a web browser");return f.promise}return{signin:d}}angular.module("oauth.instagram",["oauth.utils"]).factory("$ngCordovaInstagram",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g){var h=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var i="http://localhost/callback";void 0!==g&&g.hasOwnProperty("redirect_uri")&&(i=g.redirect_uri);var j=window.cordova.InAppBrowser.open("https://jawbone.com/auth/oauth2/auth?client_id="+d+"&redirect_uri="+i+"&response_type=code&scope="+f.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");j.addEventListener("loadstart",function(a){if(0===a.url.indexOf(i)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:"https://jawbone.com/auth/oauth2/token",data:"client_id="+d+"&client_secret="+e+"&grant_type=authorization_code&code="+c}).success(function(a){h.resolve(a)}).error(function(a,b){h.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){j.close()},10)})}}),j.addEventListener("exit",function(a){h.reject("The sign in flow was canceled")})}else h.reject("Could not find InAppBrowser plugin");else h.reject("Cannot authenticate via a web browser");return h.promise}return{signin:d}}angular.module("oauth.jawbone",["oauth.utils"]).factory("$ngCordovaJawbone",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S){return{azureAD:d.signin,adfs:e.signin,dropbox:f.signin,digitalOcean:g.signin,google:h.signin,github:i.signin,facebook:j.signin,linkedin:k.signin,instagram:l.signin,box:m.signin,reddit:n.signin,slack:o.signin,twitter:p.signin,meetup:q.signin,salesforce:r.signin,strava:s.signin,withings:t.signin,foursquare:u.signin,magento:v.signin,vkontakte:w.signin,odnoklassniki:x.signin,imgur:y.signin,spotify:z.signin,uber:A.signin,windowsLive:B.signin,yammer:C.signin,venmo:D.signin,stripe:E.signin,rally:F.signin,familySearch:G.signin,envato:H.signin,weibo:I.signin,jawbone:J.signin,untappd:K.signin,dribble:L.signin,pocket:M.signin,mercadolibre:N.signin,xing:O.signin,netatmo:P.signin,trakttv:Q.signin,yahoo:R.signin,passport:S}}angular.module("oauth.providers",["oauth.utils","oauth.500px","oauth.azuread","oauth.adfs","oauth.dropbox","oauth.digitalOcean","oauth.google","oauth.github","oauth.facebook","oauth.linkedin","oauth.instagram","oauth.box","oauth.reddit","oauth.slack","oauth.twitter","oauth.meetup","oauth.salesforce","oauth.strava","oauth.withings","oauth.foursquare","oauth.magento","oauth.vkontakte","oauth.odnoklassniki","oauth.imgur","oauth.spotify","oauth.uber","oauth.windowslive","oauth.yammer","oauth.venmo","oauth.stripe","oauth.rally","oauth.familySearch","oauth.envato","oauth.weibo","oauth.jawbone","oauth.untappd","oauth.dribble","oauth.pocket","oauth.mercadolibre","oauth.xing","oauth.netatmo","oauth.trakttv","oauth.yahoo","oauth.laravelPassport"]).factory("$cordovaOauth",a),a.$inject=["$q","$http","$cordovaOauthUtility","$ngCordovaAzureAD","$ngCordovaAdfs","$ngCordovaDropbox","$ngCordovaDigitalOcean","$ngCordovaGoogle","$ngCordovaGithub","$ngCordovaFacebook","$ngCordovaLinkedin","$ngCordovaInstagram","$ngCordovaBox","$ngCordovaReddit","$ngCordovaSlack","$ngCordovaTwitter","$ngCordovaMeetup","$ngCordovaSalesforce","$ngCordovaStrava","$ngCordovaWithings","$ngCordovaFoursquare","$ngCordovaMagento","$ngCordovaVkontakte","$ngCordovaOdnoklassniki","$ngCordovaImgur","$ngCordovaSpotify","$ngCordovaUber","$ngCordovaWindowslive","$ngCordovaYammer","$ngCordovaVenmo","$ngCordovaStripe","$ngCordovaRally","$ngCordovaFamilySearch","$ngCordovaEnvato","$ngCordovaWeibo","$ngCordovaJawbone","$ngCordovaUntappd","$ngCordovaDribble","$ngCordovaPocket","$ngCordovaMercadolibre","$ngCordovaXing","$ngCordovaNetatmo","$ngCordovaTraktTv","$ngCordovaYahoo","$ngCordovaLaravelPassport"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var h="http://localhost/callback",i="",j="";void 0!==f&&(f.hasOwnProperty("redirect_uri")&&(h=f.redirect_uri),f.hasOwnProperty("target_url")&&(i=f.target_url),f.hasOwnProperty("client_secret")&&(j=f.client_secret));var k=window.cordova.InAppBrowser.open(i+"/oauth/authorize?response_type=code&client_id="+d+"&redirect_uri="+h+"&scope="+e.join(" "),"_blank","location=no,clearsessioncache=yes,clearcache=yes");k.addEventListener("loadstart",function(a){if(0===a.url.indexOf(h)){var c=a.url.split("code=")[1];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded"},url:i+"/oauth/token",data:"client_id="+d+"&client_secret="+j+"&redirect_uri="+h+"&grant_type=authorization_code&code="+c}).then(function(a){g.resolve(a)})["catch"](function(a,b){g.reject(a)})["finally"](function(){setTimeout(function(){k.close()},10)})}}),k.addEventListener("exit",function(a){g.reject("The sign in flow was canceled")})}else g.reject("Could not find InAppBrowser plugin");else g.reject("Cannot authenticate via a web browser");return g.promise}return{signin:d}}angular.module("oauth.laravelPassport",["oauth.utils"]).factory("$ngCordovaLaravelPassport",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f,g,h){var i=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled()){var j="http://localhost/callback";void 0!==h&&h.hasOwnProperty("redirect_uri")&&(j=h.redirect_uri);var k=window.cordova.InAppBrowser.open("https://www.linkedin.com/oauth/v2/authorization?client_id="+d+"&redirect_uri="+j+"&scope="+f.join(" ")+"&response_type=code&state="+g,"_blank","location=no,clearsessioncache=yes,clearcache=yes");k.addEventListener("loadstart",function(a){if(0===a.url.indexOf(j))try{var c=a.url.split("code=")[1].split("&")[0];b({method:"post",headers:{"Content-Type":"application/x-www-form-urlencoded","Access-Control-Allow-Origin":"*","X-Requested-With":"XMLHttpRequest"},url:"https://www.linkedin.com/oauth/v2/accessToken",data:"client_id="+d+"&client_secret="+e+"&redirect_uri="+j+"&grant_type=authorization_code&code="+c}).success(function(a){i.resolve(a)}).error(function(a,b){i.reject("Problem authenticating")})["finally"](function(){setTimeout(function(){k.close()},10)})}catch(f){setTimeout(function(){k.close()},10)}}),k.addEventListener("exit",function(a){i.reject("The sign in flow was canceled")})}else i.reject("Could not find InAppBrowser plugin");else i.reject("Cannot authenticate via a web browser");return i.promise}return{signin:d}}angular.module("oauth.linkedin",["oauth.utils"]).factory("$ngCordovaLinkedin",a),a.$inject=["$q","$http","$cordovaOauthUtility"]}(),function(){"use strict";function a(a,b,c){function d(d,e,f){var g=a.defer();if(window.cordova)if(c.isInAppBrowserInstalled())if("undefined"!=typeof jsSHA){var h={oauth_callback:"http://localhost/callback",oauth_consumer_key:e,oauth_nonce:c.createNonce(5),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:Math.round((new Date).getTime()/1e3),oauth_version:"1.0"},i=c.createSignature("POST",d+"/oauth/initiate",h,{oauth_callback:"http://localhost/callback"},f);b.defaults.headers.post.Authorization=i.authorization_header,b.defaults.headers.post["Content-Type"]="application/x-www-form-urlencoded",b({method:"post",url:d+"/oauth/initiate",data:"oauth_callback=http://localhost/callback"}).success(function(a){for(var e=a.split("&"),i={},j=0;j