diff --git a/README.md b/README.md index 2eb30b8..2fb9589 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ Configuration defaults: ```js OAuthTokenProvider.configure({ name: 'token', - storage:'cookies' // options: 'cookies','localstorage','sessionstorage' + storage:'cookies' // options: 'cookies', 'localstorage', 'sessionstorage' options: { secure: true } diff --git a/dist/angular-oauth2.js b/dist/angular-oauth2.js index 5f8c90b..260f641 100644 --- a/dist/angular-oauth2.js +++ b/dist/angular-oauth2.js @@ -14,6 +14,10 @@ } })(this, function(angular, queryString) { var ngModule = angular.module("angular-oauth2", [ "ipCookie" ]).config(oauthConfig).factory("oauthInterceptor", oauthInterceptor).provider("OAuth", OAuthProvider).provider("OAuthToken", OAuthTokenProvider); + function oauthConfig($httpProvider) { + $httpProvider.interceptors.push("oauthInterceptor"); + } + oauthConfig.$inject = [ "$httpProvider" ]; function oauthInterceptor($q, $rootScope, OAuthToken) { return { request: function(config) { @@ -36,10 +40,6 @@ }; } oauthInterceptor.$inject = [ "$q", "$rootScope", "OAuthToken" ]; - function oauthConfig($httpProvider) { - $httpProvider.interceptors.push("oauthInterceptor"); - } - oauthConfig.$inject = [ "$httpProvider" ]; var _prototypeProperties = function(child, staticProps, instanceProps) { if (staticProps) Object.defineProperties(child, staticProps); if (instanceProps) Object.defineProperties(child.prototype, instanceProps); @@ -194,7 +194,7 @@ angular.extend(config, params); return config; }; - this.$get = function(ipCookie) { + this.$get = function(ipCookie, $window) { var OAuthToken = function() { function OAuthToken() {} _prototypeProperties(OAuthToken, null, { @@ -269,10 +269,10 @@ return ipCookie(config.name, data, config.options); case "localstorage": - return localStorage.setItem(config.name, angular.toJson(data)); + return $window.localStorage.setItem(config.name, angular.toJson(data)); case "sessionstorage": - return localStorage.setItem(config.name, angular.toJson(data)); + return $window.sessionStorage.setItem(config.name, angular.toJson(data)); default: return ipCookie(config.name, data, config.options); @@ -285,10 +285,10 @@ return ipCookie(config.name); case "localstorage": - return angular.fromJson(localStorage.getItem(config.name)); + return angular.fromJson($window.localStorage.getItem(config.name)); case "sessionstorage": - return angular.fromJson(sessionStorage.getItem(config.name)); + return angular.fromJson($window.sessionStorage.getItem(config.name)); default: return ipCookie(config.name); @@ -312,7 +312,7 @@ }; return new OAuthToken(); }; - this.$get.$inject = [ "ipCookie" ]; + this.$get.$inject = [ "ipCookie", "$window" ]; } return ngModule; }); \ No newline at end of file diff --git a/dist/angular-oauth2.min.js b/dist/angular-oauth2.min.js index af83d5e..d354b76 100644 --- a/dist/angular-oauth2.min.js +++ b/dist/angular-oauth2.min.js @@ -1 +1 @@ -!function(e,t){"function"==typeof define&&define.amd?define(["angular","query-string"],t):"object"==typeof exports?module.exports=t(require("angular"),require("query-string")):e.angularOAuth2=t(e.angular,e.queryString)}(this,function(e,t){function r(e,t,r){return{request:function(e){return r.getAuthorizationHeader()&&(e.headers=e.headers||{},e.headers.Authorization=r.getAuthorizationHeader()),e},responseError:function(n){return 400!==n.status||!n.data||"invalid_request"!==n.data.error&&"invalid_grant"!==n.data.error||(r.removeToken(),t.$emit("oauth:error",n)),401===n.status&&n.data&&"invalid_token"===n.data.error&&t.$emit("oauth:error",n),e.reject(n)}}}function n(e){e.interceptors.push("oauthInterceptor")}function o(){var r;this.configure=function(t){if(r)throw new Error("Already configured.");if(!(t instanceof Object))throw new TypeError("Invalid argument: `config` must be an `Object`.");return r=e.extend({},s,t),e.forEach(c,function(e){if(!r[e])throw new Error("Missing parameter: "+e+".")}),"/"===r.baseUrl.substr(-1)&&(r.baseUrl=r.baseUrl.slice(0,-1)),"/"!==r.grantPath[0]&&(r.grantPath="/"+r.grantPath),"/"!==r.revokePath[0]&&(r.revokePath="/"+r.revokePath),r},this.$get=function(n,o){var a=function(){function a(){if(!r)throw new Error("`OAuthProvider` must be configured first.")}return u(a,null,{isAuthenticated:{value:function(){return!!o.token},writable:!0,enumerable:!0,configurable:!0},getAccessToken:{value:function(a,i){if(!a||!a.username||!a.password)throw new Error("`user` must be an object with `username` and `password` properties.");var u={client_id:r.clientId,grant_type:"password",username:a.username,password:a.password};return null!==r.clientSecret&&(u.client_secret=r.clientSecret),u=t.stringify(u),i=e.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},i),n.post(""+r.baseUrl+r.grantPath,u,i).then(function(e){return o.token=e.data,e})},writable:!0,enumerable:!0,configurable:!0},getRefreshToken:{value:function(){var e={client_id:r.clientId,grant_type:"refresh_token",refresh_token:o.getRefreshToken()};null!==r.clientSecret&&(e.client_secret=r.clientSecret),e=t.stringify(e);var a={headers:{"Content-Type":"application/x-www-form-urlencoded"}};return n.post(""+r.baseUrl+r.grantPath,e,a).then(function(e){return o.token=e.data,e})},writable:!0,enumerable:!0,configurable:!0},revokeToken:{value:function(){var e=t.stringify({token:o.getRefreshToken()?o.getRefreshToken():o.getAccessToken()}),a={headers:{"Content-Type":"application/x-www-form-urlencoded"}};return n.post(""+r.baseUrl+r.revokePath,e,a).then(function(e){return o.removeToken(),e})},writable:!0,enumerable:!0,configurable:!0}}),a}();return new a},this.$get.$inject=["$http","OAuthToken"]}function a(){var t,r={name:"token",storage:"cookies",options:{secure:!0}};this.configure=function(t){if(!(t instanceof Object))throw new TypeError("Invalid argument: `config` must be an `Object`.");return e.extend(r,t),r},this.$get=function(n){var o=function(){function e(){}return u(e,null,{token:{set:function(e){return a(e)},get:function(){return i()},enumerable:!0,configurable:!0},getAccessToken:{value:function(){return this.token?this.token.access_token:void 0},writable:!0,enumerable:!0,configurable:!0},getAuthorizationHeader:{value:function(){return this.getTokenType()&&this.getAccessToken()?""+(this.getTokenType().charAt(0).toUpperCase()+this.getTokenType().substr(1))+" "+this.getAccessToken():void 0},writable:!0,enumerable:!0,configurable:!0},getRefreshToken:{value:function(){return this.token?this.token.refresh_token:void 0},writable:!0,enumerable:!0,configurable:!0},getTokenType:{value:function(){return this.token?this.token.token_type:void 0},writable:!0,enumerable:!0,configurable:!0},removeToken:{value:function(e){var t=function(){return e.apply(this,arguments)};return t.toString=function(){return e.toString()},t}(function(){return s()}),writable:!0,enumerable:!0,configurable:!0}}),e}(),a=function(o){switch(t=r.storage.toLowerCase()){case"cookies":return n(r.name,o,r.options);case"localstorage":return localStorage.setItem(r.name,e.toJson(o));case"sessionstorage":return localStorage.setItem(r.name,e.toJson(o));default:return n(r.name,o,r.options)}},i=function(){switch(t=r.storage.toLowerCase()){case"cookies":return n(r.name);case"localstorage":return e.fromJson(localStorage.getItem(r.name));case"sessionstorage":return e.fromJson(sessionStorage.getItem(r.name));default:return n(r.name)}},s=function(){switch(t=r.storage.toLowerCase()){case"cookies":return n.remove(r.name,r.options);case"localstorage":return localStorage.removeItem(r.name);case"sessionstorage":return sessionStorage.removeItem(r.name);default:return n.remove(r.name,r.options)}};return new o},this.$get.$inject=["ipCookie"]}var i=e.module("angular-oauth2",["ipCookie"]).config(n).factory("oauthInterceptor",r).provider("OAuth",o).provider("OAuthToken",a);r.$inject=["$q","$rootScope","OAuthToken"],n.$inject=["$httpProvider"];var u=function(e,t,r){t&&Object.defineProperties(e,t),r&&Object.defineProperties(e.prototype,r)},s={baseUrl:null,clientId:null,clientSecret:null,grantPath:"/oauth2/token",revokePath:"/oauth2/revoke"},c=["baseUrl","clientId","grantPath","revokePath"],u=function(e,t,r){t&&Object.defineProperties(e,t),r&&Object.defineProperties(e.prototype,r)};return i}); \ No newline at end of file +!function(e,t){"function"==typeof define&&define.amd?define(["angular","query-string"],t):"object"==typeof exports?module.exports=t(require("angular"),require("query-string")):e.angularOAuth2=t(e.angular,e.queryString)}(this,function(e,t){function r(e){e.interceptors.push("oauthInterceptor")}function n(e,t,r){return{request:function(e){return r.getAuthorizationHeader()&&(e.headers=e.headers||{},e.headers.Authorization=r.getAuthorizationHeader()),e},responseError:function(n){return 400!==n.status||!n.data||"invalid_request"!==n.data.error&&"invalid_grant"!==n.data.error||(r.removeToken(),t.$emit("oauth:error",n)),401===n.status&&n.data&&"invalid_token"===n.data.error&&t.$emit("oauth:error",n),e.reject(n)}}}function o(){var r;this.configure=function(t){if(r)throw new Error("Already configured.");if(!(t instanceof Object))throw new TypeError("Invalid argument: `config` must be an `Object`.");return r=e.extend({},s,t),e.forEach(c,function(e){if(!r[e])throw new Error("Missing parameter: "+e+".")}),"/"===r.baseUrl.substr(-1)&&(r.baseUrl=r.baseUrl.slice(0,-1)),"/"!==r.grantPath[0]&&(r.grantPath="/"+r.grantPath),"/"!==r.revokePath[0]&&(r.revokePath="/"+r.revokePath),r},this.$get=function(n,o){var a=function(){function a(){if(!r)throw new Error("`OAuthProvider` must be configured first.")}return u(a,null,{isAuthenticated:{value:function(){return!!o.token},writable:!0,enumerable:!0,configurable:!0},getAccessToken:{value:function(a,i){if(!a||!a.username||!a.password)throw new Error("`user` must be an object with `username` and `password` properties.");var u={client_id:r.clientId,grant_type:"password",username:a.username,password:a.password};return null!==r.clientSecret&&(u.client_secret=r.clientSecret),u=t.stringify(u),i=e.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},i),n.post(""+r.baseUrl+r.grantPath,u,i).then(function(e){return o.token=e.data,e})},writable:!0,enumerable:!0,configurable:!0},getRefreshToken:{value:function(){var e={client_id:r.clientId,grant_type:"refresh_token",refresh_token:o.getRefreshToken()};null!==r.clientSecret&&(e.client_secret=r.clientSecret),e=t.stringify(e);var a={headers:{"Content-Type":"application/x-www-form-urlencoded"}};return n.post(""+r.baseUrl+r.grantPath,e,a).then(function(e){return o.token=e.data,e})},writable:!0,enumerable:!0,configurable:!0},revokeToken:{value:function(){var e=t.stringify({token:o.getRefreshToken()?o.getRefreshToken():o.getAccessToken()}),a={headers:{"Content-Type":"application/x-www-form-urlencoded"}};return n.post(""+r.baseUrl+r.revokePath,e,a).then(function(e){return o.removeToken(),e})},writable:!0,enumerable:!0,configurable:!0}}),a}();return new a},this.$get.$inject=["$http","OAuthToken"]}function a(){var t,r={name:"token",storage:"cookies",options:{secure:!0}};this.configure=function(t){if(!(t instanceof Object))throw new TypeError("Invalid argument: `config` must be an `Object`.");return e.extend(r,t),r},this.$get=function(n,o){var a=function(){function e(){}return u(e,null,{token:{set:function(e){return i(e)},get:function(){return s()},enumerable:!0,configurable:!0},getAccessToken:{value:function(){return this.token?this.token.access_token:void 0},writable:!0,enumerable:!0,configurable:!0},getAuthorizationHeader:{value:function(){return this.getTokenType()&&this.getAccessToken()?""+(this.getTokenType().charAt(0).toUpperCase()+this.getTokenType().substr(1))+" "+this.getAccessToken():void 0},writable:!0,enumerable:!0,configurable:!0},getRefreshToken:{value:function(){return this.token?this.token.refresh_token:void 0},writable:!0,enumerable:!0,configurable:!0},getTokenType:{value:function(){return this.token?this.token.token_type:void 0},writable:!0,enumerable:!0,configurable:!0},removeToken:{value:function(e){var t=function(){return e.apply(this,arguments)};return t.toString=function(){return e.toString()},t}(function(){return c()}),writable:!0,enumerable:!0,configurable:!0}}),e}(),i=function(a){switch(t=r.storage.toLowerCase()){case"cookies":return n(r.name,a,r.options);case"localstorage":return o.localStorage.setItem(r.name,e.toJson(a));case"sessionstorage":return o.sessionStorage.setItem(r.name,e.toJson(a));default:return n(r.name,a,r.options)}},s=function(){switch(t=r.storage.toLowerCase()){case"cookies":return n(r.name);case"localstorage":return e.fromJson(o.localStorage.getItem(r.name));case"sessionstorage":return e.fromJson(o.sessionStorage.getItem(r.name));default:return n(r.name)}},c=function(){switch(t=r.storage.toLowerCase()){case"cookies":return n.remove(r.name,r.options);case"localstorage":return localStorage.removeItem(r.name);case"sessionstorage":return sessionStorage.removeItem(r.name);default:return n.remove(r.name,r.options)}};return new a},this.$get.$inject=["ipCookie","$window"]}var i=e.module("angular-oauth2",["ipCookie"]).config(r).factory("oauthInterceptor",n).provider("OAuth",o).provider("OAuthToken",a);r.$inject=["$httpProvider"],n.$inject=["$q","$rootScope","OAuthToken"];var u=function(e,t,r){t&&Object.defineProperties(e,t),r&&Object.defineProperties(e.prototype,r)},s={baseUrl:null,clientId:null,clientSecret:null,grantPath:"/oauth2/token",revokePath:"/oauth2/revoke"},c=["baseUrl","clientId","grantPath","revokePath"],u=function(e,t,r){t&&Object.defineProperties(e,t),r&&Object.defineProperties(e.prototype,r)};return i}); \ No newline at end of file diff --git a/src/providers/oauth-token-provider.js b/src/providers/oauth-token-provider.js index b09b4e7..95fd3d4 100644 --- a/src/providers/oauth-token-provider.js +++ b/src/providers/oauth-token-provider.js @@ -43,7 +43,7 @@ function OAuthTokenProvider() { * @ngInject */ - this.$get = function(ipCookie) { + this.$get = function(ipCookie, $window) { class OAuthToken { /** @@ -121,9 +121,9 @@ function OAuthTokenProvider() { case 'cookies': return ipCookie(config.name, data, config.options); case 'localstorage': - return localStorage.setItem(config.name, angular.toJson(data)); + return $window.localStorage.setItem(config.name, angular.toJson(data)); case 'sessionstorage': - return localStorage.setItem(config.name, angular.toJson(data)); + return $window.sessionStorage.setItem(config.name, angular.toJson(data)); default : return ipCookie(config.name, data, config.options); } @@ -140,9 +140,9 @@ function OAuthTokenProvider() { case 'cookies': return ipCookie(config.name); case 'localstorage': - return angular.fromJson(localStorage.getItem(config.name)); + return angular.fromJson($window.localStorage.getItem(config.name)); case 'sessionstorage': - return angular.fromJson(sessionStorage.getItem(config.name)); + return angular.fromJson($window.sessionStorage.getItem(config.name)); default : return ipCookie(config.name); }