angular-visor
Advanced tools
Comparing version 0.0.5 to 0.0.6
{ | ||
"name": "visor", | ||
"description": "Angular authentication and authorization library", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"homepage": "https://github.com/illniyar/visor", | ||
"main": "./release/visor.js", | ||
"dependencies": { | ||
"main": "./release/visor.js", | ||
"dependencies": { | ||
"angular": "~1.3.0" | ||
}, | ||
"devDependencies": { | ||
"angular-ui-router": "~0.2.13", | ||
"angular-mocks": "~1.3.0", | ||
"angular-route": "~1.3.0", | ||
"angular-cookies":"~1.3.0" | ||
}, | ||
"ignore": [ | ||
"**/.*", | ||
"node_modules", | ||
"bower_components", | ||
"package.json", | ||
"Gruntfile.js", | ||
"test", | ||
"build", | ||
"sample" | ||
] | ||
"devDependencies": { | ||
"angular-ui-router": "~0.2.13", | ||
"angular-mocks": "~1.3.0", | ||
"angular-route": "~1.3.0", | ||
"angular-cookies": "~1.3.0" | ||
}, | ||
"ignore": [ | ||
"**/.*", | ||
"node_modules", | ||
"bower_components", | ||
"package.json", | ||
"Gruntfile.js", | ||
"test", | ||
"build", | ||
"sample" | ||
] | ||
} |
189
Gruntfile.js
@@ -1,86 +0,107 @@ | ||
module.exports = function(grunt){ | ||
require('load-grunt-tasks')(grunt); | ||
grunt.initConfig({ | ||
module_name:'visor', | ||
pkg: grunt.file.readJSON('package.json'), | ||
builddir: 'build', | ||
releasedir: 'release', | ||
sitedir: 'site', | ||
meta: { | ||
banner: | ||
'/**<%= module_name %>\n'+ | ||
'* <%= pkg.description %>\n' + | ||
'* @version v<%= pkg.version %>\n' + | ||
'* @link <%= pkg.homepage %>\n' + | ||
'* @license MIT License, http://www.opensource.org/licenses/MIT\n'+ | ||
'*/\n' | ||
}, | ||
clean: { | ||
dist: ['<%= builddir %>','<%=sitedir %>'], | ||
"gh-pages":['.grunt'] | ||
} , | ||
concat:{ | ||
options: { | ||
banner: '<%=meta.banner\n\n%>' + | ||
'if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){\n'+ | ||
' module.exports = \'visor\';\n'+ | ||
'}\n\n'+ | ||
'(function (window, angular, undefined) {\n', | ||
footer: '})(window, window.angular);' | ||
}, | ||
build: { | ||
src: "src/*.js", | ||
dest: '<%= builddir %>/<%= module_name %>.js' | ||
} | ||
}, | ||
uglify: { | ||
options: { | ||
banner: '<%= meta.banner %>\n' | ||
}, | ||
build: { | ||
files: { | ||
'<%= builddir %>/<%= module_name %>.min.js': ['<banner:meta.banner>', '<%= concat.build.dest %>'] | ||
} | ||
} | ||
}, | ||
connect: { | ||
server: {}, | ||
sample: { | ||
options:{ | ||
port: 5555, | ||
keepalive: true | ||
} | ||
} | ||
}, | ||
ngdocs:{ | ||
all:['src/**/*.js'], | ||
options:{ | ||
dest: 'site/docs', | ||
html5Mode: false | ||
} | ||
}, | ||
'gh-pages': { | ||
options: { | ||
base: '<%=sitedir%>' | ||
}, | ||
src: ['**'] | ||
}, | ||
copy: { | ||
release: { | ||
files: [{expand:true,src:["visor.js","visor.min.js"],cwd:"<%=builddir%>/",dest:'<%=releasedir%>/'}] | ||
}, | ||
site: { | ||
files: [ | ||
{expand:true,src:'<%=releasedir%>/**',dest:'<%=sitedir%>'}, | ||
{expand:true,src:'README.md',dest:'<%=sitedir%>'}, | ||
{expand:true,src:'sample/**',dest:'<%=sitedir%>'}] | ||
} | ||
} | ||
}); | ||
module.exports = function (grunt) { | ||
require('load-grunt-tasks')(grunt); | ||
grunt.initConfig({ | ||
module_name: 'visor', | ||
pkg: grunt.file.readJSON('package.json'), | ||
builddir: 'build', | ||
releasedir: 'release', | ||
sitedir: 'site', | ||
meta: { | ||
banner: '/**<%= module_name %>\n' + | ||
'* <%= pkg.description %>\n' + | ||
'* @version v<%= pkg.version %>\n' + | ||
'* @link <%= pkg.homepage %>\n' + | ||
'* @license MIT License, http://www.opensource.org/licenses/MIT\n' + | ||
'*/\n' | ||
}, | ||
clean: { | ||
dist: ['<%= builddir %>', '<%=sitedir %>'], | ||
"gh-pages": ['.grunt'] | ||
}, | ||
concat: { | ||
options: { | ||
banner: '<%=meta.banner\n\n%>' + | ||
'if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){\n' + | ||
' module.exports = \'visor\';\n' + | ||
'}\n\n' + | ||
'(function (window, angular, undefined) {\n', | ||
footer: '})(window, window.angular);' | ||
}, | ||
build: { | ||
src: "src/*.js", | ||
dest: '<%= builddir %>/<%= module_name %>.js' | ||
} | ||
}, | ||
uglify: { | ||
options: { | ||
banner: '<%= meta.banner %>\n' | ||
}, | ||
build: { | ||
files: { | ||
'<%= builddir %>/<%= module_name %>.min.js': ['<banner:meta.banner>', '<%= concat.build.dest %>'] | ||
} | ||
} | ||
}, | ||
connect: { | ||
server: {}, | ||
sample: { | ||
options: { | ||
port: 5555, | ||
keepalive: true | ||
} | ||
} | ||
}, | ||
ngdocs: { | ||
all: ['src/**/*.js'], | ||
options: { | ||
dest: 'site/docs', | ||
html5Mode: false | ||
} | ||
}, | ||
'gh-pages': { | ||
options: { | ||
base: '<%=sitedir%>' | ||
}, | ||
src: ['**'] | ||
}, | ||
copy: { | ||
release: { | ||
files: [{ | ||
expand: true, | ||
src: ["visor.js", "visor.min.js"], | ||
cwd: "<%=builddir%>/", | ||
dest: '<%=releasedir%>/' | ||
}] | ||
}, | ||
site: { | ||
files: [ | ||
{expand: true, src: '<%=releasedir%>/**', dest: '<%=sitedir%>'}, | ||
{expand: true, src: 'README.md', dest: '<%=sitedir%>'}, | ||
{expand: true, src: 'sample/**', dest: '<%=sitedir%>'}] | ||
} | ||
}, | ||
changelog: { | ||
options: { | ||
preset:'angular', | ||
file: 'CHANGELOG.md', | ||
app_name: 'Visor' | ||
} | ||
}, | ||
release: { | ||
options: { | ||
file: 'package.json', | ||
additionalFiles:'bower.json', | ||
tagName: 'v<%= version %>', | ||
commitMessage: 'release <%= version %>' , | ||
tagMessage: 'Version <%= version %>', | ||
afterBump: ['changelog'] | ||
} | ||
} | ||
}); | ||
grunt.registerTask('build', 'Perform a normal build', ['concat', 'uglify']); | ||
grunt.registerTask('dist', 'Perform a clean build', ['clean', 'build','copy:release']); | ||
grunt.registerTask('site', 'Build and create site', ['dist','copy:site','ngdocs:all']); | ||
grunt.registerTask('release', 'Build, create site and push to gh-pages', ['site','gh-pages','clean:gh-pages']); | ||
grunt.registerTask('build', 'Perform a normal build', ['concat', 'uglify']); | ||
grunt.registerTask('dist', 'Perform a clean build', ['clean', 'build', 'copy:release']); | ||
grunt.registerTask('site', 'Build and create site', ['dist', 'copy:site', 'ngdocs:all']); | ||
grunt.registerTask('publish-site', 'Build, create site and push to gh-pages', ['site', 'gh-pages', 'clean:gh-pages']); | ||
grunt.registerTask('publish','Builds and publishes to all relevent repositories',['publish-site','release']) | ||
} |
{ | ||
"name": "angular-visor", | ||
"author": "Illniyar", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"main": "release/visor.js", | ||
@@ -10,19 +10,21 @@ "description": "Angular authentication and authorization library", | ||
"devDependencies": { | ||
"karma": "~0.12", | ||
"karma-spec-reporter": "0.0.12", | ||
"karma-jasmine": "~0.2.0", | ||
"karma-phantomjs-launcher": "~0.1.4", | ||
"karma-chrome-launcher": "~0.1", | ||
"karma-cli": "0.0.4", | ||
"bower": "~1.3.3", | ||
"grunt": "~0.4.1", | ||
"grunt-contrib-clean": "~0.5.0", | ||
"grunt-contrib-concat": "~0.3.0", | ||
"grunt-contrib-uglify": "~0.4.0", | ||
"grunt-contrib-clean": "~0.5.0", | ||
"grunt-contrib-connect": "~0.7.1", | ||
"grunt-contrib-copy": "~0.5.0", | ||
"grunt-contrib-uglify": "~0.4.0", | ||
"grunt-conventional-changelog": "^1.2.2", | ||
"grunt-gh-pages": "~0.9.1", | ||
"load-grunt-tasks": "~0.4.0", | ||
"grunt-conventional-changelog": "~1.1.0", | ||
"grunt-ngdocs": "~0.1.7" | ||
"grunt-ngdocs": "~0.1.7", | ||
"grunt-release": "^0.12.0", | ||
"grunt-release-it": "^0.2.1", | ||
"karma": "~0.12", | ||
"karma-chrome-launcher": "~0.1", | ||
"karma-cli": "0.0.4", | ||
"karma-jasmine": "~0.2.0", | ||
"karma-phantomjs-launcher": "~0.1.4", | ||
"karma-spec-reporter": "0.0.12", | ||
"load-grunt-tasks": "~0.4.0" | ||
}, | ||
@@ -29,0 +31,0 @@ "licenses": [ |
@@ -15,2 +15,3 @@ #Visor | ||
- via **[Bower](http://bower.io/)**: by running `$ bower install visor` from your console | ||
- via **[NPM](https://www.npmjs.com/package/angular-visor)**: by running `$ npm install --save angular-visor` from your console | ||
@@ -17,0 +18,0 @@ **Sample apps**: |
@@ -885,2 +885,3 @@ /**visor | ||
visorPermissions.getPermissionsFromNext = function(next){ | ||
console.log("get permissions") | ||
var perms = []; | ||
@@ -890,7 +891,7 @@ while(next) { | ||
if (next.parent) { | ||
next = $state.get(next.parent) | ||
next = $state.get(next.parent) | ||
} else if(next.name.indexOf(".") >0) { | ||
next = $state.get(next.name.replace(/(.*\.)?([^.]+)\.[^.]*$/,"$2")) | ||
next = $state.get(next.name.replace(/(.*\.)?([^.]+)\.[^.]*$/,"$2")) | ||
} else { | ||
next = null; | ||
next = null; | ||
} | ||
@@ -900,31 +901,33 @@ } | ||
} | ||
var $urlRouter = $injector.get("$urlRouter"); | ||
var toUrl = null; | ||
var bypass = false; | ||
$rootScope.$on('$stateChangeStart', function(e,toState,toParams){ | ||
if (bypass) { | ||
bypass = false; | ||
return; | ||
} | ||
toUrl = $state.href(toState,toParams).replace(/^#/,''); | ||
var shouldContinue = visorPermissions.onRouteChange(toState,function delayChange(promise){ | ||
promise.then(function(){ | ||
bypass= true; | ||
$state.go(toState,toParams); | ||
}) | ||
}); | ||
if (!shouldContinue || shouldContinue === "delayed") { | ||
e.preventDefault(); | ||
} | ||
}); | ||
visorPermissions.invokeNotAllowed = function(notAllowed){ | ||
//timeout is required because when using preventDefault on $stateChangeStart, the url is | ||
//reverted to it's original location, and no change at this time will override this. | ||
$timeout(function(){ | ||
$injector.invoke(notAllowed,null,{restrictedUrl:toUrl}) | ||
},0); | ||
} | ||
}]); | ||
var $urlRouter = $injector.get("$urlRouter"); | ||
var toUrl = null; | ||
$rootScope.$on('$stateChangeStart', function(e,next){ | ||
toUrl = $location.url(); | ||
var shouldContinue = visorPermissions.onRouteChange(next,function delayChange(promise){ | ||
promise.then(function(){ | ||
if ($location.url() === toUrl) { | ||
$urlRouter.sync(); | ||
} else { | ||
$location.url(toUrl); | ||
$urlRouter.sync(); | ||
} | ||
}) | ||
}); | ||
if (!shouldContinue || shouldContinue === "delayed") { | ||
e.preventDefault(); | ||
} | ||
}); | ||
visorPermissions.invokeNotAllowed = function(notAllowed){ | ||
//timeout is required because when using preventDefault on $stateChangeStart, the url is | ||
//reverted to it's original location, and no change at this time will override this. | ||
$timeout(function(){ | ||
$injector.invoke(notAllowed,null,{restrictedUrl:toUrl}) | ||
},0); | ||
} | ||
} | ||
}]) | ||
})();})(window, window.angular); |
@@ -8,2 +8,2 @@ /**visor | ||
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="visor"),function(a,b,c){!function(){"use strict";b.module("delayLocationChange",[]).service("delayLocationChange",["$rootScope","$q","$timeout","$location","$injector",function(a,b,c,d,e){function f(){m--,o&&0>=m&&g()}function g(){d.absUrl()===i?a.$broadcast("$locationChangeSuccess",i,j):d.url(k)}function h(a){m++,a["finally"](f)}var i,j,k,l=function(a){a.then?h(a):o?h(e.invoke(fn)):n.push(a)},m=0,n=[],o=!1,p=a.$on("$locationChangeStart",function(a,b,g){o=!0,k=d.url(),p(),a.preventDefault(),n.forEach(function(a){h(e.invoke(a))}),0!==m||i||(m++,c(f,1)),i=b,j=g});return l}])}(),function(){"use strict";b.module("visor",["visor.permissions","visor.ui-router","visor.ngRoute","delayLocationChange"]).constant("authenticatedOnly",function(a){return!!a}).constant("notForAuthenticated",function(a){return a===c}).provider("visor",[function(){function a(a,c,d){return b.shouldAddNext?a.indexOf("?")>=0?a.replace(/\?/,"?next="+encodeURIComponent(d)+"&"):a+"?next="+encodeURIComponent(d):a}var b=this;b.authenticateOnStartup=!0,b.loginRoute="/login",b.homeRoute="/",b.notAuthorizedRoute="/access_denied",b.shouldAddNext=!0,b.authenticate=function(){throw new Error("visorProvider.authenticate must be defined to use visor")},b.doOnNotAuthenticated=["$location","restrictedUrl",function(c,d){c.url(a(b.loginRoute,c,d))}],b.doAfterManualAuthentication=["$location",function(a){a.url(a.search().next||b.homeRoute)}],b.doOnNotAuthorized=["$location",function(a){a.url(b.notAuthorizedRoute)}],this.$get=["$injector","$q","$rootScope","$location","visorPermissions",function(a,d,e,f,g){function h(a){k.authData=a,g.invokeParameters=[k.authData]}function i(){k.authData=c,g.invokeParameters=[]}var j=!1,k={authenticate:function(c){if(j&&!c)return j;var e=d.defer();return j=e.promise,a.invoke(b.authenticate).then(h,i)["finally"](function(){e.resolve(k.authData)}),e.promise},setAuthenticated:function(c){h(c),j=d.when(c),a.invoke(b.doAfterManualAuthentication,null,{authData:c})},isAuthenticated:function(){return!!k.authData},onNotAllowed:function(c){k.isAuthenticated()?a.invoke(b.doOnNotAuthorized,null,{restrictedUrl:c}):a.invoke(b.doOnNotAuthenticated,null,{restrictedUrl:c})},setUnauthenticated:function(){i()},config:b};return k}]}]).run(["visor","delayLocationChange",function(a,b){a.config.authenticateOnStartup&&b(a.authenticate())}]).config(["visorPermissionsProvider",function(a){a.doBeforeFirstCheck.push(["visor",function(a){return a.authenticate()}]),a.onNotAllowed=["visor","restrictedUrl",function(a,b){a.onNotAllowed(b)}]}])}(),function(){b.module("visor.ngRoute",["visor.permissions"]).run(["$rootScope","visorPermissions","$injector",function(a,b,c){var d=!1;try{c.get("$route"),d=!0}catch(e){}d&&a.$on("$routeChangeStart",function(a,c){c.resolve=c.resolve||{},b.onRouteChange(c,function(a){c.resolve._visorDelay=function(){return a}})})}])}(),function(){b.module("visor.permissions",[]).provider("visorPermissions",[function(){var a=this;a.getPermissionsFromNext=function(a){return a.restrict?[a.restrict]:[]},a.doBeforeFirstCheck=[],a.onNotAllowed=function(){},a.invokeParameters=[];var c=!1;this.$get=["$q","$injector","$location",function(d,e,f){function g(c,d){b.isArray(d)||(d=[d]);var e=!0;return d.forEach(function(a){e=e&&a.apply(null,h.invokeParameters)}),e?!0:(h.invokeNotAllowed(a.onNotAllowed),!1)}var h={onRouteChange:function(b,f){var i=h.getPermissionsFromNext(b);if(!i||0==i.length)return!0;if(c)return g(b,i);var j=d.defer();return f(j.promise),d.all(a.doBeforeFirstCheck.map(function(a){return e.invoke(a)}))["finally"](function(){c=!0,g(b,i)?j.resolve(!0):j.reject(!1)}),"delayed"},getPermissionsFromNext:a.getPermissionsFromNext,invokeParameters:a.invokeParameters,invokeNotAllowed:function(a){e.invoke(a,null,{restrictedUrl:f.url()})}};return h}]}])}(),function(){b.module("visor.ui-router",["visor.permissions"]).run(["$rootScope","visorPermissions","$injector","$timeout","$location",function(a,b,c,d,e){var f=!1;try{c.get("$state"),f=!0}catch(g){}if(f){c.invoke(["$state",function(a){b.getPermissionsFromNext=function(b){for(var c=[];b;)b.restrict&&c.unshift(b.restrict),b=b.parent?a.get(b.parent):b.name.indexOf(".")>0?a.get(b.name.replace(/(.*\.)?([^.]+)\.[^.]*$/,"$2")):null;return c}}]);var h=c.get("$urlRouter"),i=null;a.$on("$stateChangeStart",function(a,c){i=e.url();var d=b.onRouteChange(c,function(a){a.then(function(){e.url()===i?h.sync():(e.url(i),h.sync())})});d&&"delayed"!==d||a.preventDefault()}),b.invokeNotAllowed=function(a){d(function(){c.invoke(a,null,{restrictedUrl:i})},0)}}}])}()}(window,window.angular); | ||
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="visor"),function(a,b,c){!function(){"use strict";b.module("delayLocationChange",[]).service("delayLocationChange",["$rootScope","$q","$timeout","$location","$injector",function(a,b,c,d,e){function f(){m--,o&&0>=m&&g()}function g(){d.absUrl()===i?a.$broadcast("$locationChangeSuccess",i,j):d.url(k)}function h(a){m++,a["finally"](f)}var i,j,k,l=function(a){a.then?h(a):o?h(e.invoke(fn)):n.push(a)},m=0,n=[],o=!1,p=a.$on("$locationChangeStart",function(a,b,g){o=!0,k=d.url(),p(),a.preventDefault(),n.forEach(function(a){h(e.invoke(a))}),0!==m||i||(m++,c(f,1)),i=b,j=g});return l}])}(),function(){"use strict";b.module("visor",["visor.permissions","visor.ui-router","visor.ngRoute","delayLocationChange"]).constant("authenticatedOnly",function(a){return!!a}).constant("notForAuthenticated",function(a){return a===c}).provider("visor",[function(){function a(a,c,d){return b.shouldAddNext?a.indexOf("?")>=0?a.replace(/\?/,"?next="+encodeURIComponent(d)+"&"):a+"?next="+encodeURIComponent(d):a}var b=this;b.authenticateOnStartup=!0,b.loginRoute="/login",b.homeRoute="/",b.notAuthorizedRoute="/access_denied",b.shouldAddNext=!0,b.authenticate=function(){throw new Error("visorProvider.authenticate must be defined to use visor")},b.doOnNotAuthenticated=["$location","restrictedUrl",function(c,d){c.url(a(b.loginRoute,c,d))}],b.doAfterManualAuthentication=["$location",function(a){a.url(a.search().next||b.homeRoute)}],b.doOnNotAuthorized=["$location",function(a){a.url(b.notAuthorizedRoute)}],this.$get=["$injector","$q","$rootScope","$location","visorPermissions",function(a,d,e,f,g){function h(a){k.authData=a,g.invokeParameters=[k.authData]}function i(){k.authData=c,g.invokeParameters=[]}var j=!1,k={authenticate:function(c){if(j&&!c)return j;var e=d.defer();return j=e.promise,a.invoke(b.authenticate).then(h,i)["finally"](function(){e.resolve(k.authData)}),e.promise},setAuthenticated:function(c){h(c),j=d.when(c),a.invoke(b.doAfterManualAuthentication,null,{authData:c})},isAuthenticated:function(){return!!k.authData},onNotAllowed:function(c){k.isAuthenticated()?a.invoke(b.doOnNotAuthorized,null,{restrictedUrl:c}):a.invoke(b.doOnNotAuthenticated,null,{restrictedUrl:c})},setUnauthenticated:function(){i()},config:b};return k}]}]).run(["visor","delayLocationChange",function(a,b){a.config.authenticateOnStartup&&b(a.authenticate())}]).config(["visorPermissionsProvider",function(a){a.doBeforeFirstCheck.push(["visor",function(a){return a.authenticate()}]),a.onNotAllowed=["visor","restrictedUrl",function(a,b){a.onNotAllowed(b)}]}])}(),function(){b.module("visor.ngRoute",["visor.permissions"]).run(["$rootScope","visorPermissions","$injector",function(a,b,c){var d=!1;try{c.get("$route"),d=!0}catch(e){}d&&a.$on("$routeChangeStart",function(a,c){c.resolve=c.resolve||{},b.onRouteChange(c,function(a){c.resolve._visorDelay=function(){return a}})})}])}(),function(){b.module("visor.permissions",[]).provider("visorPermissions",[function(){var a=this;a.getPermissionsFromNext=function(a){return a.restrict?[a.restrict]:[]},a.doBeforeFirstCheck=[],a.onNotAllowed=function(){},a.invokeParameters=[];var c=!1;this.$get=["$q","$injector","$location",function(d,e,f){function g(c,d){b.isArray(d)||(d=[d]);var e=!0;return d.forEach(function(a){e=e&&a.apply(null,h.invokeParameters)}),e?!0:(h.invokeNotAllowed(a.onNotAllowed),!1)}var h={onRouteChange:function(b,f){var i=h.getPermissionsFromNext(b);if(!i||0==i.length)return!0;if(c)return g(b,i);var j=d.defer();return f(j.promise),d.all(a.doBeforeFirstCheck.map(function(a){return e.invoke(a)}))["finally"](function(){c=!0,g(b,i)?j.resolve(!0):j.reject(!1)}),"delayed"},getPermissionsFromNext:a.getPermissionsFromNext,invokeParameters:a.invokeParameters,invokeNotAllowed:function(a){e.invoke(a,null,{restrictedUrl:f.url()})}};return h}]}])}(),function(){b.module("visor.ui-router",["visor.permissions"]).run(["$rootScope","visorPermissions","$injector","$timeout","$location",function(a,b,c,d,e){var f=!1;try{c.get("$state"),f=!0}catch(g){}f&&c.invoke(["$state",function(e){b.getPermissionsFromNext=function(a){console.log("get permissions");for(var b=[];a;)a.restrict&&b.unshift(a.restrict),a=a.parent?e.get(a.parent):a.name.indexOf(".")>0?e.get(a.name.replace(/(.*\.)?([^.]+)\.[^.]*$/,"$2")):null;return b};var f=(c.get("$urlRouter"),null),g=!1;a.$on("$stateChangeStart",function(a,c,d){if(g)return void(g=!1);f=e.href(c,d).replace(/^#/,"");var h=b.onRouteChange(c,function(a){a.then(function(){g=!0,e.go(c,d)})});h&&"delayed"!==h||a.preventDefault()}),b.invokeNotAllowed=function(a){d(function(){c.invoke(a,null,{restrictedUrl:f})},0)}}])}])}()}(window,window.angular); |
@@ -36,31 +36,33 @@ (function(){ | ||
} | ||
var $urlRouter = $injector.get("$urlRouter"); | ||
var toUrl = null; | ||
var bypass = false; | ||
$rootScope.$on('$stateChangeStart', function(e,toState,toParams){ | ||
if (bypass) { | ||
bypass = false; | ||
return; | ||
} | ||
toUrl = $state.href(toState,toParams).replace(/^#/,''); | ||
var shouldContinue = visorPermissions.onRouteChange(toState,function delayChange(promise){ | ||
promise.then(function(){ | ||
bypass= true; | ||
$state.go(toState,toParams); | ||
}) | ||
}); | ||
if (!shouldContinue || shouldContinue === "delayed") { | ||
e.preventDefault(); | ||
} | ||
}); | ||
visorPermissions.invokeNotAllowed = function(notAllowed){ | ||
//timeout is required because when using preventDefault on $stateChangeStart, the url is | ||
//reverted to it's original location, and no change at this time will override this. | ||
$timeout(function(){ | ||
$injector.invoke(notAllowed,null,{restrictedUrl:toUrl}) | ||
},0); | ||
} | ||
}]); | ||
var $urlRouter = $injector.get("$urlRouter"); | ||
var toUrl = null; | ||
$rootScope.$on('$stateChangeStart', function(e,next){ | ||
toUrl = $location.url(); | ||
var shouldContinue = visorPermissions.onRouteChange(next,function delayChange(promise){ | ||
promise.then(function(){ | ||
if ($location.url() === toUrl) { | ||
$urlRouter.sync(); | ||
} else { | ||
$location.url(toUrl); | ||
$urlRouter.sync(); | ||
} | ||
}) | ||
}); | ||
if (!shouldContinue || shouldContinue === "delayed") { | ||
e.preventDefault(); | ||
} | ||
}); | ||
visorPermissions.invokeNotAllowed = function(notAllowed){ | ||
//timeout is required because when using preventDefault on $stateChangeStart, the url is | ||
//reverted to it's original location, and no change at this time will override this. | ||
$timeout(function(){ | ||
$injector.invoke(notAllowed,null,{restrictedUrl:toUrl}) | ||
},0); | ||
} | ||
} | ||
}]) | ||
})(); |
@@ -253,3 +253,18 @@ 'use strict'; | ||
}); | ||
it('should redirect anonymous users to login if accessing private route after visitng public url', function(){ | ||
authenticate = function($q){ | ||
return $q.reject("not authenticated"); | ||
}; | ||
module("test.config"); | ||
inject(function($rootScope,$state,$q,$location,visor,$timeout) { | ||
$location.url("/public"); | ||
$rootScope.$apply(); | ||
$timeout.flush(); | ||
$state.go('private'); | ||
$rootScope.$apply(); | ||
$timeout.flush(); | ||
expect($state.current.name).toEqual("login"); | ||
expect($location.search().next).toEqual("/private_url"); | ||
}); | ||
}); | ||
it('should not redirect anonymous users to login if accessing public route', function(){ | ||
@@ -256,0 +271,0 @@ authenticate = function($q){ |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
1388899
37062
173
2
19