UNPKG

ng-admin.jwt-auth

Version:

Small module that allows to use JWT authentication with ng-admin

2 lines 7.95 kB
/*! ng-admin.jwt-auth 2016-09-14 */ !function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){var d=function(a,b,c){return{authenticate:function(d,e,f){var g=c.getAuthURL();return a({url:g,method:"POST",headers:{"Content-Type":"application/json"},data:d}).then(function(d){var f=b.decodeToken(d.data.token);localStorage.userToken=d.data.token,localStorage.userRole=f.role,e(d);var g=c.getCustomAuthHeader();g?a.defaults.headers.common[g.name]=g.template.replace("{{token}}",d.data.token):a.defaults.headers.common.Authorization="Basic "+d.data.token},f)},isAuthenticated:function(){var a=localStorage.userToken;return!!a&&!b.isTokenExpired(a)},logout:function(){return localStorage.removeItem("userRole"),localStorage.removeItem("userToken"),!0}}};d.$inject=["$http","jwtHelper","ngAdminJWTAuthConfigurator"],b.exports=d},{}],2:[function(a,b,c){var d=function(){var a={_nonProtectedStates:["login"]};this.setJWTAuthURL=function(b){a._authUrl=b},this.setCustomLoginTemplate=function(b){a._customLoginTemplate=b},this.setLoginSuccessCallback=function(b){a._loginSuccessCallback=b},this.setLoginErrorCallback=function(b){a._loginErrorCallback=b},this.setCustomAuthHeader=function(b){return a._customAuthHeader=b},this.setNonProtectedStates=function(b){b.push("login"),a._nonProtectedStates=b},this.setCheckEveryResponseForAuthHeader=function(){a._checkEveryResponseForAuthHeader=!0},this.$get=function(){return{getAuthURL:function(){return a._authUrl},getCustomLoginTemplate:function(){return a._customLoginTemplate},getLoginSuccessCallback:function(){return a._loginSuccessCallback},getLoginErrorCallback:function(){return a._loginErrorCallback},getCustomAuthHeader:function(){return a._customAuthHeader},getNonProtectedStates:function(){return a._nonProtectedStates},getCheckEveryResponseForAuthHeader:function(){return!!a._checkEveryResponseForAuthHeader}}}};b.exports=d},{}],3:[function(a,b,c){var d=function(a,b,c,d,e,f){this.$scope=a,this.$rootScope=b,this.ngAdminJWTAuthService=c,this.ngAdminJWTAuthConfigurator=d,this.notification=e,this.$location=f};d.prototype.login=function(){var a=this,b=this.ngAdminJWTAuthConfigurator.getLoginSuccessCallback()||function(b){a.notification.log(b.data.message,{addnCls:"humane-flatty-success"}),a.$location.path("/dashboard")},c=this.ngAdminJWTAuthConfigurator.getLoginErrorCallback()||function(b){a.notification.log(b.data.message,{addnCls:"humane-flatty-error"})};this.ngAdminJWTAuthService.authenticate(this.data,b,c)},d.$inject=["$rootScope","$scope","ngAdminJWTAuthService","ngAdminJWTAuthConfigurator","notification","$location"],b.exports=d},{}],4:[function(a,b,c){var d='<div class="container">\n <form style="max-width: 330px; padding: 15px; margin: 0 auto;" class="form-login" name="loginController.form" ng-submit="loginController.login()">\n <h2 class="form-login-heading">Please log in</h2>\n <div class="form-group">\n <label for="inputLogin" class="sr-only">Login</label>\n <input type="text" id="inputLogin" class="form-control" placeholder="Login" ng-model="loginController.data.login" ng-required="true" ng-minlength="3" ng-enter="loginController.login()">\n </div>\n <div class="form-group">\n <label for="inputPassword" class="sr-only">Password</label>\n <input type="password" id="inputPassword" class="form-control" placeholder="Password" ng-model="loginController.data.password" ng-required="true" ng-minlength="4" ng-enter="loginController.login()">\n </div>\n\n <button class="btn btn-lg btn-primary btn-block" type="submit" ng-disabled="loginController.form.$invalid">Login</button>\n </form>\n</div>';b.exports=d},{}],5:[function(a,b,c){var d=function(a,b,c){b.logout(),c.path("/login")};d.$inject=["$scope","ngAdminJWTAuthService","$location"],b.exports=d},{}],6:[function(a,b,c){"use strict";var d=angular.module("ng-admin.jwt-auth",["angular-jwt"]);d.config(["$stateProvider","$httpProvider",function(b,c){b.state("login",{parent:"",url:"/login",controller:"loginController",controllerAs:"loginController",templateProvider:["ngAdminJWTAuthConfigurator","$http","notification",function(b,c,d){var e=b.getCustomLoginTemplate();return e?e.endsWith(".html")?c.get(e).then(function(a){return a.data},function(a){d.log("Error in template loading",{addnCls:"humane-flatty-error"})}):e:a("./loginTemplate")}]}),b.state("logout",{parent:"",url:"/logout",controller:"logoutController",controllerAs:"logoutController"})}]),d.run(["$q","Restangular","ngAdminJWTAuthService","$http","$location","$state","$rootScope","ngAdminJWTAuthConfigurator",function(a,b,c,d,e,f,g,h){g.$on("$stateChangeStart",function(a,b,d,e,i){if(!c.isAuthenticated()){var j=h.getNonProtectedStates();if(j.indexOf(b.name)==-1){a.preventDefault();var k=f.go("login");k.then(function(){g.$broadcast("$stateChangeSuccess",b.self,d,e.self,i)})}return!0}return!0}),b.addFullRequestInterceptor(function(a,b,e){if(c.isAuthenticated()){var f=h.getCustomAuthHeader();f?d.defaults.headers.common[f.name]=f.template.replace("{{token}}",localStorage.userToken):d.defaults.headers.common.Authorization="Basic "+localStorage.userToken}}),h.getCheckEveryResponseForAuthHeader()&&b.addResponseInterceptor(function(a,b,d,e,f){if(c.isAuthenticated()){var g,i=h.getCustomAuthHeader();i&&f.headers(i.name)?(g=f.headers(i.name),g=g.replace(i.template.replace("{{token}}",""),"")):f.headers("Authorization")&&(g=f.headers("Authorization"),g=g.replace("Basic ","")),g&&(localStorage.userToken=g)}return a})}]),d.controller("loginController",a("./loginController")),d.controller("logoutController",a("./logoutController")),d.provider("ngAdminJWTAuthConfigurator",a("./configuratorProvider")),d.service("ngAdminJWTAuthService",a("./authService"))},{"./authService":1,"./configuratorProvider":2,"./loginController":3,"./loginTemplate":4,"./logoutController":5}],7:[function(a,b,c){!function(){angular.module("angular-jwt",["angular-jwt.interceptor","angular-jwt.jwt"]),angular.module("angular-jwt.interceptor",[]).provider("jwtInterceptor",function(){this.urlParam=null,this.authHeader="Authorization",this.authPrefix="Bearer ",this.tokenGetter=function(){return null};var a=this;this.$get=["$q","$injector","$rootScope",function(b,c,d){return{request:function(d){if(d.skipAuthorization)return d;if(a.urlParam){if(d.params=d.params||{},d.params[a.urlParam])return d}else if(d.headers=d.headers||{},d.headers[a.authHeader])return d;var e=b.when(c.invoke(a.tokenGetter,this,{config:d}));return e.then(function(b){return b&&(a.urlParam?d.params[a.urlParam]=b:d.headers[a.authHeader]=a.authPrefix+b),d})},responseError:function(a){return 401===a.status&&d.$broadcast("unauthenticated",a),b.reject(a)}}}]}),angular.module("angular-jwt.jwt",[]).service("jwtHelper",function(){this.urlBase64Decode=function(a){var b=a.replace(/-/g,"+").replace(/_/g,"/");switch(b.length%4){case 0:break;case 2:b+="==";break;case 3:b+="=";break;default:throw"Illegal base64url string!"}return decodeURIComponent(escape(window.atob(b)))},this.decodeToken=function(a){var b=a.split(".");if(3!==b.length)throw new Error("JWT must have 3 parts");var c=this.urlBase64Decode(b[1]);if(!c)throw new Error("Cannot decode the token");return JSON.parse(c)},this.getTokenExpirationDate=function(a){var b;if(b=this.decodeToken(a),"undefined"==typeof b.exp)return null;var c=new Date(0);return c.setUTCSeconds(b.exp),c},this.isTokenExpired=function(a,b){var c=this.getTokenExpirationDate(a);return b=b||0,null!==c&&!(c.valueOf()>(new Date).valueOf()+1e3*b)}})}()},{}]},{},[7,1,2,3,4,5,6]);