From 7ac525f790c235bef46c759012fa1a54e0fe18a6 Mon Sep 17 00:00:00 2001 From: fagarbal Date: Thu, 7 Sep 2017 01:17:27 +0200 Subject: [PATCH 1/2] Fixed offline function --- dist/angular-google-gapi.js | 32 +++++++++++++++++++++++++++++--- dist/angular-google-gapi.min.js | 2 +- src/factories/GAuth.factory.js | 5 +++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/dist/angular-google-gapi.js b/dist/angular-google-gapi.js index e1b6f20..3e5c02d 100644 --- a/dist/angular-google-gapi.js +++ b/dist/angular-google-gapi.js @@ -42,6 +42,8 @@ executeCallbacks(api); } }); + }, function (e) { + deferred.reject(e); }); return deferred.promise; } @@ -168,6 +170,8 @@ isLoad = true; deferred.resolve(); }); + }, function (e) { + deferred.reject(e); }); } else { deferred.resolve(); @@ -175,7 +179,7 @@ return deferred.promise; } - function signin(mode, authorizeCallback) { + function signin(mode, authorizeCallback, errorCallback) { function executeSignin(mode, authorizeCallback){ var config = {client_id: CLIENT_ID, scope: SCOPE, immediate: false, authuser: -1, response_type: RESPONSE_TYPE}; if(mode) { @@ -193,16 +197,21 @@ } else { load().then(function (){ executeSignin(mode, authorizeCallback); + }, function (e) { + if (errorCallback) { + errorCallback(e); + } }); } } function offline() { var deferred = $q.defer(); - var origin = $location.protocol() + "//" + $location.hostname(); - if($location.port() != "" || ($location.port() != 443 && $location.protocol()== "https")) { + var origin = $location.protocol() + "://" + $location.host(); + if($location.port()) { origin = origin + ':' + $location.port(); } + var win = $window.open('https://accounts.google.com/o/oauth2/auth?scope='+encodeURI(SCOPE)+'&redirect_uri=postmessage&response_type=code&client_id='+CLIENT_ID+'&access_type=offline&approval_prompt=force&origin='+origin, null, 'width=800, height=600'); $window.addEventListener("message", getCode); @@ -276,6 +285,8 @@ }, function () { deferred.reject(); }); + }, function (e) { + deferred.reject(e); }); return deferred.promise; }, @@ -288,6 +299,8 @@ }, function () { deferred.reject(); }); + }, function (e) { + deferred.reject(e); }); return deferred.promise; }, @@ -301,6 +314,8 @@ }, function () { deferred.reject(); }); + }, function (e) { + deferred.reject(e); }); return deferred.promise; }, @@ -309,6 +324,8 @@ var deferred = $q.defer(); load().then(function (){ deferred.resolve($window.gapi.auth.getToken()); + }, function (e) { + deferred.reject(e); }); return deferred.promise; }, @@ -320,6 +337,8 @@ GData.isLogin(false); GData.getUser(null); deferred.resolve(); + }, function (e) { + deferred.reject(e); }); return deferred.promise; }, @@ -362,6 +381,11 @@ deferred.reject(e); }); }; + $window.onerror = function (e) { + $timeout(function () { + deferred.reject(e); + }); + }; script.src = src; $document[0].body.appendChild(script); return deferred.promise; @@ -386,6 +410,8 @@ for(var i= 0; i < OBSERVER_CALLBACKS.length; i++){ OBSERVER_CALLBACKS[i].resolve(); } + }, function(e) { + deferred.reject(e); }); } } diff --git a/dist/angular-google-gapi.min.js b/dist/angular-google-gapi.min.js index 56daf1a..73c276f 100644 --- a/dist/angular-google-gapi.min.js +++ b/dist/angular-google-gapi.min.js @@ -3,4 +3,4 @@ * @version 1.0.0-beta.2 * @link https://github.com/maximepvrt/angular-google-gapi */ -!function(){"use strict";angular.module("angular-google-gapi",[])}(),function(){"use strict";angular.module("angular-google-gapi").factory("GApi",["$q","GClient","GData","$window",function(e,n,t,o){function r(e,n,t,o,r){var i={};i.api=e,i.apiLoad=!1,i.method=n,i.params=t,i.auth=o,i.deferred=r,p.push(i)}function i(t,r,i){var a=e.defer();return n.get().then(function(){o.gapi.client.load(t,r,void 0,i).then(function(e){var n={api:t,version:r,url:i};e&&e.hasOwnProperty("error")?(console.log(r),a.reject(n)):(a.resolve(n),f.push(t),u(t))})}),a.promise}function u(e){for(var n=e,o=0;o-1&&p.splice(o--,1))}}function a(e,n,t){for(var r=n.split("."),e=o.gapi.client[e],i=0;i-1?c(n,t,o,u):r(n,t,o,i,u),u.promise}function l(n,t){function o(e,n){e.apply(this,t).then(function(e){r.resolve(e)})["catch"](function(t){if(403==t.code&&t.message.toLowerCase().indexOf("limit exceeded")>-1||503==t.code){var i=2,u=1e3,a=Math.floor(1e3*Math.random()+1);5>n?setTimeout(function(){o(e,++n)},u*Math.pow(i,n)+a):r.reject(t)}else r.reject(t)})}var r=e.defer(),i=0;return o(n,i),r.promise}var f=[],p=[];return{executeCallbacks:function(){u()},load:i,createRequest:a,execute:function(e,n,t){return 3==arguments.length?s(e,n,t,!1):2==arguments.length?s(e,n,null,!1):void 0},executeAuth:function(e,n,t){return 3==arguments.length?l(s,arguments):2==arguments.length?l(s,arguments):void 0}}}])}(),function(){"use strict";angular.module("angular-google-gapi").factory("GAuth",["$rootScope","$q","GClient","GApi","GData","$interval","$window","$location",function(e,n,t,o,r,i,u,a){function c(){var e=n.defer();return 0==g?t.get().then(function(){u.gapi.client.load("oauth2","v2",function(){g=!0,e.resolve()})}):e.resolve(),e.promise}function s(e,n){function t(e,n){var t={client_id:p,scope:h,immediate:!1,authuser:-1,response_type:v};e&&(t.user_id=r.getUserId(),t.immediate=!0),void 0!=d&&(t.hd=d),u.gapi.auth.authorize(t,n)}e||g!==!0?c().then(function(){t(e,n)}):t(e,n)}function l(){function e(n){if("https://accounts.google.com"===n.origin){var r=JSON.parse(n.data);u.removeEventListener("message",e),r=t(r.a[0],"code"),void 0==r?o.reject():o.resolve(r)}}function t(e,n){n=n.replace(/[[]/,"[").replace(/[]]/,"]");var t=n+"=([^&#]*)",o=new RegExp(t),r=o.exec(e);return null==r?void 0:r[1]}var o=n.defer(),r=a.protocol()+"//"+a.hostname();(""!=a.port()||443!=a.port()&&"https"==a.protocol())&&(r=r+":"+a.port());u.open("https://accounts.google.com/o/oauth2/auth?scope="+encodeURI(h)+"&redirect_uri=postmessage&response_type=code&client_id="+p+"&access_type=offline&approval_prompt=force&origin="+r,null,"width=800, height=600");return u.addEventListener("message",e),o.promise}function f(){var e=n.defer();return u.gapi.client.oauth2.userinfo.get().execute(function(n){n.code?e.reject():(r.isLogin(!0),o.executeCallbacks(),n.name&&0!==n.name.length||(n.name=n.email),r.getUser(n),e.resolve(n))}),e.promise}var p,g=!1,d=void 0,h="https://www.googleapis.com/auth/userinfo.email",v="token id_token";return{setClient:function(e){p=e},setDomain:function(e){d=e},setScope:function(e){h=e},load:c,checkAuth:function(){var e=n.defer();return s(!0,function(){f().then(function(n){e.resolve(n)},function(){e.reject()})}),e.promise},login:function(){var e=n.defer();return s(!1,function(){f().then(function(n){e.resolve(n)},function(){e.reject()})}),e.promise},setToken:function(e){var t=n.defer();return c().then(function(){u.gapi.auth.setToken(e),f().then(function(){t.resolve()},function(){t.reject()})}),t.promise},getToken:function(){var e=n.defer();return c().then(function(){e.resolve(u.gapi.auth.getToken())}),e.promise},logout:function(){var e=n.defer();return c().then(function(){u.gapi.auth.setToken(null),r.isLogin(!1),r.getUser(null),e.resolve()}),e.promise},offline:function(){var e=n.defer();return l().then(function(n){e.resolve(n)},function(){e.reject()}),e.promise}}}])}(),function(){"use strict";angular.module("angular-google-gapi").factory("GClient",["$document","$q","$window","$timeout",function(e,n,t,o){function r(r){var i=n.defer();t._gapiOnLoad=function(){i.resolve()};var u=e[0].createElement("script");return u.onerror=function(e){o(function(){i.reject(e)})},u.src=r,e[0].body.appendChild(u),i.promise}var i=!1,u=!1,a="https://apis.google.com/js/client:platform.js?onload=_gapiOnLoad",c=null,s=[];return{get:function(){var e=n.defer();return i?e.resolve():u?s.push(e):(u=!0,r(a).then(function(){t.gapi.client.setApiKey(c),i=!0,u=!1,e.resolve();for(var n=0;n-1&&p.splice(o--,1))}}function c(e,n,t){for(var r=n.split("."),e=o.gapi.client[e],i=0;i-1?a(n,t,o,u):r(n,t,o,i,u),u.promise}function l(n,t){function o(e,n){e.apply(this,t).then(function(e){r.resolve(e)})["catch"](function(t){if(403==t.code&&t.message.toLowerCase().indexOf("limit exceeded")>-1||503==t.code){var i=2,u=1e3,c=Math.floor(1e3*Math.random()+1);n<5?setTimeout(function(){o(e,++n)},u*Math.pow(i,n)+c):r.reject(t)}else r.reject(t)})}var r=e.defer(),i=0;return o(n,i),r.promise}var s=[],p=[];return{executeCallbacks:function(){u()},load:i,createRequest:c,execute:function(e,n,t){return 3==arguments.length?f(e,n,t,!1):2==arguments.length?f(e,n,null,!1):void 0},executeAuth:function(e,n,t){return 3==arguments.length?l(f,arguments):2==arguments.length?l(f,arguments):void 0}}}])}(),function(){"use strict";angular.module("angular-google-gapi").factory("GAuth",["$rootScope","$q","GClient","GApi","GData","$interval","$window","$location",function(e,n,t,o,r,i,u,c){function a(){var e=n.defer();return 0==g?t.get().then(function(){u.gapi.client.load("oauth2","v2",function(){g=!0,e.resolve()})},function(n){e.reject(n)}):e.resolve(),e.promise}function f(e,n,t){function o(e,n){var t={client_id:p,scope:v,immediate:!1,authuser:-1,response_type:h};e&&(t.user_id=r.getUserId(),t.immediate=!0),void 0!=d&&(t.hd=d),u.gapi.auth.authorize(t,n)}e||g!==!0?a().then(function(){o(e,n)},function(e){t&&t(e)}):o(e,n)}function l(){function e(n){if("https://accounts.google.com"===n.origin){var r=JSON.parse(n.data);u.removeEventListener("message",e),r=t(r.a[0],"code"),void 0==r?o.reject():o.resolve(r)}}function t(e,n){n=n.replace(/[[]/,"[").replace(/[]]/,"]");var t=n+"=([^&#]*)",o=new RegExp(t),r=o.exec(e);return null==r?void 0:r[1]}var o=n.defer(),r=c.protocol()+"://"+c.host();c.port()&&(r=r+":"+c.port());u.open("https://accounts.google.com/o/oauth2/auth?scope="+encodeURI(v)+"&redirect_uri=postmessage&response_type=code&client_id="+p+"&access_type=offline&approval_prompt=force&origin="+r,null,"width=800, height=600");return u.addEventListener("message",e),o.promise}function s(){var e=n.defer();return u.gapi.client.oauth2.userinfo.get().execute(function(n){n.code?e.reject():(r.isLogin(!0),o.executeCallbacks(),n.name&&0!==n.name.length||(n.name=n.email),r.getUser(n),e.resolve(n))}),e.promise}var p,g=!1,d=void 0,v="https://www.googleapis.com/auth/userinfo.email",h="token id_token";return{setClient:function(e){p=e},setDomain:function(e){d=e},setScope:function(e){v=e},load:a,checkAuth:function(){var e=n.defer();return f(!0,function(){s().then(function(n){e.resolve(n)},function(){e.reject()})},function(n){e.reject(n)}),e.promise},login:function(){var e=n.defer();return f(!1,function(){s().then(function(n){e.resolve(n)},function(){e.reject()})},function(n){e.reject(n)}),e.promise},setToken:function(e){var t=n.defer();return a().then(function(){u.gapi.auth.setToken(e),s().then(function(){t.resolve()},function(){t.reject()})},function(e){t.reject(e)}),t.promise},getToken:function(){var e=n.defer();return a().then(function(){e.resolve(u.gapi.auth.getToken())},function(n){e.reject(n)}),e.promise},logout:function(){var e=n.defer();return a().then(function(){u.gapi.auth.setToken(null),r.isLogin(!1),r.getUser(null),e.resolve()},function(n){e.reject(n)}),e.promise},offline:function(){var e=n.defer();return l().then(function(n){e.resolve(n)},function(){e.reject()}),e.promise}}}])}(),function(){"use strict";angular.module("angular-google-gapi").factory("GClient",["$document","$q","$window","$timeout",function(e,n,t,o){function r(r){var i=n.defer();t._gapiOnLoad=function(){i.resolve()};var u=e[0].createElement("script");return u.onerror=function(e){o(function(){i.reject(e)})},t.onerror=function(e){o(function(){i.reject(e)})},u.src=r,e[0].body.appendChild(u),i.promise}var i=!1,u=!1,c="https://apis.google.com/js/client:platform.js?onload=_gapiOnLoad",a=null,f=[];return{get:function(){var e=n.defer();return i?e.resolve():u?f.push(e):(u=!0,r(c).then(function(){t.gapi.client.setApiKey(a),i=!0,u=!1,e.resolve();for(var n=0;n Date: Fri, 15 Sep 2017 10:57:47 +0200 Subject: [PATCH 2/2] Update GAuth.factory.js --- src/factories/GAuth.factory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/factories/GAuth.factory.js b/src/factories/GAuth.factory.js index 827ba38..840972f 100644 --- a/src/factories/GAuth.factory.js +++ b/src/factories/GAuth.factory.js @@ -55,7 +55,7 @@ function offline() { var deferred = $q.defer(); var origin = $location.protocol() + "://" + $location.host(); - if($location.port()) { + if($location.port() && $location.port() !== 443) { origin = origin + ':' + $location.port(); }