forked from lynndylanhurley/ng-token-auth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ng-token-auth.min.js
1 lines (1 loc) · 16.8 KB
/
ng-token-auth.min.js
1
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ng-token-auth"),angular.module("ng-token-auth",["ipCookie"]).provider("$auth",function(){var t,e;return t={"default":{apiUrl:"/api",signOutUrl:"/auth/sign_out",emailSignInPath:"/auth/sign_in",emailRegistrationPath:"/auth",accountUpdatePath:"/auth",accountDeletePath:"/auth",confirmationSuccessUrl:function(){return window.location.href},passwordResetPath:"/auth/password",passwordUpdatePath:"/auth/password",passwordResetSuccessUrl:function(){return window.location.href},tokenValidationPath:"/auth/validate_token",proxyIf:function(){return!1},proxyUrl:"/proxy",validateOnPageLoad:!0,omniauthWindowType:"sameWindow",storage:"cookies",forceValidateToken:!1,tokenFormat:{"access-token":"{{ token }}","token-type":"Bearer",client:"{{ clientId }}",expiry:"{{ expiry }}",uid:"{{ uid }}"},cookieOps:{path:"/",expires:9999,expirationUnit:"days",secure:!1},createPopup:function(t){return window.open(t,"_blank","closebuttoncaption=Cancel")},parseExpiry:function(t){return 1e3*parseInt(t.expiry,10)||null},handleLoginResponse:function(t){return t.data},handleAccountUpdateResponse:function(t){return t.data},handleTokenValidationResponse:function(t){return t.data},authProviderPaths:{github:"/auth/github",facebook:"/auth/facebook",google:"/auth/google_oauth2"}}},e="default",{configure:function(n){var i,r,a,s,o,u,c,h,d;if(n instanceof Array&&n.length){for(s=h=0,d=n.length;d>h;s=++h){i=n[s],u=null;for(o in i)c=i[o],u=o,0===s&&(e=u);r=angular.copy(t["default"]),a={},a[u]=angular.extend(r,i[u]),angular.extend(t,a)}"default"!==e&&delete t["default"]}else{if(!(n instanceof Object))throw"Invalid argument: ng-token-auth config should be an Array or Object.";angular.extend(t["default"],n)}return t},$get:["$http","$q","$location","ipCookie","$window","$timeout","$rootScope","$interpolate","$interval",function(n){return function(i,r,a,s,o,u,c,h,d){return{header:null,dfd:null,user:{},mustResetPassword:!1,listener:null,initialize:function(){return this.initializeListeners(),this.cancelOmniauthInAppBrowserListeners=function(){},this.addScopeMethods()},initializeListeners:function(){return this.listener=angular.bind(this,this.handlePostMessage),o.addEventListener?o.addEventListener("message",this.listener,!1):void 0},cancel:function(t){return null!=this.requestCredentialsPollingTimer&&u.cancel(this.requestCredentialsPollingTimer),this.cancelOmniauthInAppBrowserListeners(),null!=this.dfd&&this.rejectDfd(t),u(function(t){return function(){return t.requestCredentialsPollingTimer=null}}(this),0)},destroy:function(){return this.cancel(),o.removeEventListener?o.removeEventListener("message",this.listener,!1):void 0},handlePostMessage:function(t){var e,n;return"deliverCredentials"===t.data.message&&(delete t.data.message,n=t.data.oauth_registration,delete t.data.oauth_registration,this.handleValidAuth(t.data,!0),c.$broadcast("auth:login-success",t.data),n&&c.$broadcast("auth:oauth-registration",t.data)),"authFailure"===t.data.message?(e={reason:"unauthorized",errors:[t.data.error]},this.cancel(e),c.$broadcast("auth:login-error",e)):void 0},addScopeMethods:function(){return c.user=this.user,c.authenticate=angular.bind(this,this.authenticate),c.signOut=angular.bind(this,this.signOut),c.destroyAccount=angular.bind(this,this.destroyAccount),c.submitRegistration=angular.bind(this,this.submitRegistration),c.submitLogin=angular.bind(this,this.submitLogin),c.requestPasswordReset=angular.bind(this,this.requestPasswordReset),c.updatePassword=angular.bind(this,this.updatePassword),c.updateAccount=angular.bind(this,this.updateAccount),this.getConfig().validateOnPageLoad?this.validateUser({config:this.getSavedConfig()}):void 0},submitRegistration:function(t,e){var n;return null==e&&(e={}),n=this.getResultOrValue(this.getConfig(e.config).confirmationSuccessUrl),angular.extend(t,{confirm_success_url:n,config_name:this.getCurrentConfigName(e.config)}),i.post(this.apiUrl(e.config)+this.getConfig(e.config).emailRegistrationPath,t).then(function(e){return c.$broadcast("auth:registration-email-success",t),e},function(t){return c.$broadcast("auth:registration-email-error",t.data),r.reject(t)})},submitLogin:function(t,e,n){return null==e&&(e={}),null==n&&(n={}),this.initDfd(),i.post(this.apiUrl(e.config)+this.getConfig(e.config).emailSignInPath,t,n).then(function(t){return function(n){var i;return t.setConfigName(e.config),i=t.getConfig(e.config).handleLoginResponse(n.data,t),t.handleValidAuth(i),c.$broadcast("auth:login-success",t.user),n}}(this),function(t){return function(e){return t.rejectDfd({reason:"unauthorized",errors:["Invalid credentials"]}),c.$broadcast("auth:login-error",e.data),r.reject(e)}}(this)),this.dfd.promise},userIsAuthenticated:function(){return this.retrieveData("auth_headers")&&this.user.signedIn&&!this.tokenHasExpired()},requestPasswordReset:function(t,e){var n;return null==e&&(e={}),n=this.getResultOrValue(this.getConfig(e.config).passwordResetSuccessUrl),t.redirect_url=n,null!=e.config&&(t.config_name=e.config),i.post(this.apiUrl(e.config)+this.getConfig(e.config).passwordResetPath,t).then(function(e){return c.$broadcast("auth:password-reset-request-success",t),e},function(t){return c.$broadcast("auth:password-reset-request-error",t.data),r.reject(t)})},updatePassword:function(t){return i.put(this.apiUrl()+this.getConfig().passwordUpdatePath,t).then(function(t){return function(e){return c.$broadcast("auth:password-change-success",e.data),t.mustResetPassword=!1,e}}(this),function(t){return c.$broadcast("auth:password-change-error",t.data),r.reject(t)})},updateAccount:function(t){return i.put(this.apiUrl()+this.getConfig().accountUpdatePath,t).then(function(t){return function(e){var n,i,r,a,s,o;if(a=t.getConfig().handleAccountUpdateResponse(e.data),n=t.retrieveData("auth_headers"),angular.extend(t.user,a),n){r={},o=t.getConfig().tokenFormat;for(i in o)s=o[i],n[i]&&a[i]&&(r[i]=a[i]);t.setAuthHeaders(r)}return c.$broadcast("auth:account-update-success",e.data),e}}(this),function(t){return c.$broadcast("auth:account-update-error",t.data),r.reject(t)})},destroyAccount:function(t){return i["delete"](this.apiUrl()+this.getConfig().accountUpdatePath,t).then(function(t){return function(e){return t.invalidateTokens(),c.$broadcast("auth:account-destroy-success",e.data),e}}(this),function(t){return c.$broadcast("auth:account-destroy-error",t.data),r.reject(t)})},authenticate:function(t,e){return null==e&&(e={}),null==this.dfd&&(this.setConfigName(e.config),this.initDfd(),this.openAuthWindow(t,e)),this.dfd.promise},setConfigName:function(t){return null==t&&(t=e),this.persistData("currentConfigName",t,t)},openAuthWindow:function(t,e){var n,i;if(i=this.getConfig(e.config).omniauthWindowType,n=this.buildAuthUrl(i,t,e),"newWindow"===i)return this.requestCredentialsViaPostMessage(this.getConfig().createPopup(n));if("inAppBrowser"===i)return this.requestCredentialsViaExecuteScript(this.getConfig().createPopup(n));if("sameWindow"===i)return this.visitUrl(n);throw'Unsupported omniauthWindowType "#{omniauthWindowType}"'},visitUrl:function(t){return o.location.replace(t)},buildAuthUrl:function(t,e,n){var i,r,a,s;null==n&&(n={}),i=this.getConfig(n.config).apiUrl,i+=this.getConfig(n.config).authProviderPaths[e],i+="?auth_origin_url="+encodeURIComponent(o.location.href),a=angular.extend({},n.params||{},{omniauth_window_type:t});for(r in a)s=a[r],i+="&",i+=encodeURIComponent(r),i+="=",i+=encodeURIComponent(s);return i},requestCredentialsViaPostMessage:function(t){return t.closed?this.handleAuthWindowClose(t):(t.postMessage("requestCredentials","*"),this.requestCredentialsPollingTimer=u(function(e){return function(){return e.requestCredentialsViaPostMessage(t)}}(this),500))},requestCredentialsViaExecuteScript:function(t){var e,n;return this.cancelOmniauthInAppBrowserListeners(),e=this.handleAuthWindowClose.bind(this,t),n=this.handleLoadStop.bind(this,t),t.addEventListener("loadstop",n),t.addEventListener("exit",e),this.cancelOmniauthInAppBrowserListeners=function(){return t.removeEventListener("loadstop",n),t.removeEventListener("exit",e)}},handleLoadStop:function(t){return n=this,t.executeScript({code:"requestCredentials()"},function(e){var i,r;return i=e[0],i?(r=new Event("message"),r.data=i,n.cancelOmniauthInAppBrowserListeners(),o.dispatchEvent(r),n.initDfd(),t.close()):void 0})},handleAuthWindowClose:function(t){return this.cancel({reason:"unauthorized",errors:["User canceled login"]}),this.cancelOmniauthInAppBrowserListeners,c.$broadcast("auth:window-closed")},resolveDfd:function(){return this.dfd?(this.dfd.resolve(this.user),u(function(t){return function(){return t.dfd=null,c.$$phase?void 0:c.$digest()}}(this),0)):void 0},buildQueryString:function(t,e){var n,i,r,a;r=[];for(i in t)a=t[i],i=e?e+"["+i+"]":i,n=angular.isObject(a)?this.buildQueryString(a,i):i+"="+encodeURIComponent(a),r.push(n);return r.join("&")},parseLocation:function(t){var e,n,i,r,a;if(n=t.substring(1),i={},n){a=n.split("&"),r=void 0,e=void 0;for(e in a)e=e,""!==a[e]&&"function"!=typeof a[e]&&(r=a[e].split("="),i[decodeURIComponent(r[0])]=decodeURIComponent(r[1]))}return i},validateUser:function(t){var e,n,i,r,s,o,u,h,d;return null==t&&(t={}),n=t.config,null==this.dfd&&(this.initDfd(),this.userIsAuthenticated()?this.resolveDfd():(o=a.search(),r=this.parseLocation(window.location.search),s=0===Object.keys(o).length?r:o,u=s.auth_token||s.token,void 0!==u?(e=s.client_id,h=s.uid,i=s.expiry,n=s.config,this.setConfigName(n),this.mustResetPassword=s.reset_password,this.firstTimeLogin=s.account_confirmation_success,this.oauthRegistration=s.oauth_registration,this.setAuthHeaders(this.buildAuthHeaders({token:u,clientId:e,uid:h,expiry:i})),d=a.path()||"/",["auth_token","token","client_id","uid","expiry","config","reset_password","account_confirmation_success","oauth_registration"].forEach(function(t){return delete s[t]}),Object.keys(s).length>0&&(d+="?"+this.buildQueryString(s)),a.url(d)):this.retrieveData("currentConfigName")&&(n=this.retrieveData("currentConfigName")),this.getConfig().forceValidateToken?this.validateToken({config:n}):isEmpty(this.retrieveData("auth_headers"))?(this.rejectDfd({reason:"unauthorized",errors:["No credentials"]}),c.$broadcast("auth:invalid")):this.tokenHasExpired()?(c.$broadcast("auth:session-expired"),this.rejectDfd({reason:"unauthorized",errors:["Session expired."]})):this.validateToken({config:n}))),this.dfd.promise},validateToken:function(t){return null==t&&(t={}),this.tokenHasExpired()?this.rejectDfd({reason:"unauthorized",errors:["Expired credentials"]}):i.get(this.apiUrl(t.config)+this.getConfig(t.config).tokenValidationPath).then(function(e){return function(n){var i;return i=e.getConfig(t.config).handleTokenValidationResponse(n.data),e.handleValidAuth(i),e.firstTimeLogin&&c.$broadcast("auth:email-confirmation-success",e.user),e.oauthRegistration&&c.$broadcast("auth:oauth-registration",e.user),e.mustResetPassword&&c.$broadcast("auth:password-reset-confirm-success",e.user),c.$broadcast("auth:validation-success",e.user),e.user}}(this),function(t){return function(e){return t.firstTimeLogin&&c.$broadcast("auth:email-confirmation-error",e.data),t.mustResetPassword&&c.$broadcast("auth:password-reset-confirm-error",e.data),c.$broadcast("auth:validation-error",e.data),t.rejectDfd({reason:"unauthorized",errors:null!=e.data?e.data.errors:["Unspecified error"]}),r.reject(e)}}(this))},tokenHasExpired:function(){var t,e;return t=this.getExpiry(),e=(new Date).getTime(),t&&e>t},getExpiry:function(){return this.getConfig().parseExpiry(this.retrieveData("auth_headers")||{})},invalidateTokens:function(){var t,e,n;n=this.user;for(t in n)e=n[t],delete this.user[t];return this.deleteData("currentConfigName"),null!=this.timer&&d.cancel(this.timer),this.deleteData("auth_headers")},signOut:function(){return i["delete"](this.apiUrl()+this.getConfig().signOutUrl).then(function(t){return function(e){return t.invalidateTokens(),c.$broadcast("auth:logout-success"),e}}(this),function(t){return function(e){return t.invalidateTokens(),c.$broadcast("auth:logout-error",e.data),r.reject(e)}}(this))},handleValidAuth:function(t,e){return null==e&&(e=!1),null!=this.requestCredentialsPollingTimer&&u.cancel(this.requestCredentialsPollingTimer),this.cancelOmniauthInAppBrowserListeners(),angular.extend(this.user,t),this.user.signedIn=!0,this.user.configName=this.getCurrentConfigName(),e&&this.setAuthHeaders(this.buildAuthHeaders({token:this.user.auth_token,clientId:this.user.client_id,uid:this.user.uid,expiry:this.user.expiry})),this.resolveDfd()},buildAuthHeaders:function(t){var e,n,i,r;e={},r=this.getConfig().tokenFormat;for(n in r)i=r[n],e[n]=h(i)(t);return e},persistData:function(t,e,n){if(this.getConfig(n).storage instanceof Object)return this.getConfig(n).storage.persistData(t,e,this.getConfig(n));switch(this.getConfig(n).storage){case"localStorage":return o.localStorage.setItem(t,JSON.stringify(e));case"sessionStorage":return o.sessionStorage.setItem(t,JSON.stringify(e));default:return s(t,e,this.getConfig().cookieOps)}},retrieveData:function(t){var e;try{if(this.getConfig().storage instanceof Object)return this.getConfig().storage.retrieveData(t);switch(this.getConfig().storage){case"localStorage":return JSON.parse(o.localStorage.getItem(t));case"sessionStorage":return JSON.parse(o.sessionStorage.getItem(t));default:return s(t)}}catch(n){if(e=n,e instanceof SyntaxError)return void 0;throw e}},deleteData:function(t){var e;switch(this.getConfig().storage instanceof Object&&this.getConfig().storage.deleteData(t),this.getConfig().storage){case"localStorage":return o.localStorage.removeItem(t);case"sessionStorage":return o.sessionStorage.removeItem(t);default:return e={path:this.getConfig().cookieOps.path},void 0!==this.getConfig().cookieOps.domain&&(e.domain=this.getConfig().cookieOps.domain),s.remove(t,e)}},setAuthHeaders:function(t){var e,n,i,r;return n=angular.extend(this.retrieveData("auth_headers")||{},t),r=this.persistData("auth_headers",n),e=this.getExpiry(),i=(new Date).getTime(),e>i&&(null!=this.timer&&d.cancel(this.timer),this.timer=d(function(t){return function(){return t.validateUser({config:t.getSavedConfig()})}}(this),parseInt(e-i),1)),r},initDfd:function(){return this.dfd=r.defer()},rejectDfd:function(t){return this.invalidateTokens(),null!=this.dfd?(this.dfd.reject(t),u(function(t){return function(){return t.dfd=null}}(this),0)):void 0},apiUrl:function(t){return this.getConfig(t).proxyIf()?this.getConfig(t).proxyUrl:this.getConfig(t).apiUrl},getConfig:function(e){return t[this.getCurrentConfigName(e)]},getResultOrValue:function(t){return"function"==typeof t?t():t},getCurrentConfigName:function(t){return t||this.getSavedConfig()},getSavedConfig:function(){var t,n;return t=void 0,n="currentConfigName",this.hasLocalStorage()?null==t&&(t=JSON.parse(o.localStorage.getItem(n))):this.hasSessionStorage()&&null==t&&(t=JSON.parse(o.sessionStorage.getItem(n))),null==t&&(t=s(n)),t||e},hasSessionStorage:function(){var t;if(null==this._hasSessionStorage){this._hasSessionStorage=!1;try{o.sessionStorage.setItem("ng-token-auth-test","ng-token-auth-test"),o.sessionStorage.removeItem("ng-token-auth-test"),this._hasSessionStorage=!0}catch(e){t=e}}return this._hasSessionStorage},hasLocalStorage:function(){var t;if(null==this._hasLocalStorage){this._hasLocalStorage=!1;try{o.localStorage.setItem("ng-token-auth-test","ng-token-auth-test"),o.localStorage.removeItem("ng-token-auth-test"),this._hasLocalStorage=!0}catch(e){t=e}}return this._hasLocalStorage}}}}(this)]}}).config(["$httpProvider",function(t){var e,n,i;return n=function(t,e){var n,i;return i=Number(t.getExpiry()),n=Number(t.getConfig().parseExpiry(e||{})),n>=i},i=function(t,e){var i,r,a,s;r={},s=t.getConfig().tokenFormat;for(i in s)a=s[i],e.headers(i)&&(r[i]=e.headers(i));return n(t,r)?t.setAuthHeaders(r):void 0},t.interceptors.push(["$injector",function(t){return{request:function(e){return t.invoke(["$http","$auth",function(t,n){var i,r,a,s;if(e.url.match(n.apiUrl())){a=n.retrieveData("auth_headers"),s=[];for(i in a)r=a[i],s.push(e.headers[i]=r);return s}}]),e},response:function(e){return t.invoke(["$http","$auth",function(t,n){return e.config.url.match(n.apiUrl())?i(n,e):void 0}]),e},responseError:function(e){return t.invoke(["$http","$auth",function(t,n){return e.config.url.match(n.apiUrl())?i(n,e):void 0}]),t.get("$q").reject(e)}}}]),e=["get","post","put","patch","delete"],angular.forEach(e,function(e){var n;return null==(n=t.defaults.headers)[e]&&(n[e]={}),t.defaults.headers[e]["If-Modified-Since"]="Mon, 26 Jul 1997 05:00:00 GMT"})}]).run(["$auth","$window","$rootScope",function(t,e,n){return t.initialize()}]),window.isOldIE=function(){var t,e,n;return e=!1,t=navigator.userAgent.toLowerCase(),t&&-1!==t.indexOf("msie")&&(n=parseInt(t.split("msie")[1]),10>n&&(e=!0)),e},window.isIE=function(){var t;return t=navigator.userAgent.toLowerCase(),t&&-1!==t.indexOf("msie")||!!navigator.userAgent.match(/Trident.*rv\:11\./)},window.isEmpty=function(t){var e,n;if(!t)return!0;if(t.length>0)return!1;if(0===t.length)return!0;for(e in t)if(n=t[e],Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};