Use WWW-Authenticate header in 401 responses

This commit is contained in:
Xavier Guimard 2016-01-28 06:43:43 +00:00
parent 154107fffa
commit 0e51658c6f
3 changed files with 5 additions and 5 deletions

View File

@ -84,7 +84,7 @@ sub _authAndTrace {
if ( $res == 302 or $res == 303 ) {
$self->lmLog( 'Rewrite redirection to 401 response', 'debug' );
return [
401, [ Authorization => $req->{respHeaders}->{Location} ], ['']
401, [ 'WWW-Authenticate' => $req->{respHeaders}->{Location} ], ['']
];
}
else {

View File

@ -220,8 +220,8 @@
'responseError': function(rejection) {
// data / status / config / statusText / headers()
var url = rejection.headers();
if (rejection.status == 401 && url.authorization && url.authorization.match(/^http/)) {
var u = url.authorization.replace(/url=.*$/g, '');
if (rejection.status == 401 && url['www-authenticate'] && url['www-authenticate'].match(/^http/)) {
var u = url['www-authenticate'].replace(/url=.*$/g, '');
u += 'url=' + window.btoa(window.location).replace(/\//, '_');
window.location = u;
}
@ -234,4 +234,4 @@
$httpProvider.interceptors.push('$lmhttp');
}]);
})();
})();

View File

@ -1 +1 @@
(function(){var a=angular.module("llApp",[]);a.provider("$translator",b);function b(){var d={};if(navigator){var f=[navigator.language];if(navigator.languages){f=navigator.languages}var e=[],c=[];f.forEach(function(g){availableLanguages.forEach(function(h){if(h==g){e.push(h)}else{if(h.substring(0,1)==g.substring(0,1)){c.push(h)}}})});d.lang=e[0]?e[0]:c[0]?c[0]:"en"}else{d.lang="en"}d.deferredTr=[];d.translationFields={};d.translate=function(g){if(d.translationFields[g]){g=d.translationFields[g]}return g};d.translateField=function(g,h){return d.translate(g[h])};d.translateP=function(g){if(g&&d.translationFields.portal){g=g.replace(/__(\w+)__/g,function(i,h){return d.translate(h)})}return g};this.$get=["$q","$http",function(g,h){d.last="";d.init=function(j){if(!j){j=d.lang}var i=g.defer();if(d.last!=j){d.last=j;h.get(staticPrefix+"languages/"+j+".json").success(function(k){d.translationFields=k;d.deferredTr.forEach(function(l){l.e[l.f](d.translationFields[l.m])});d.deferredTr=[];i.resolve("Translation files loaded")}).error(function(k,l){serrors(k,l);i.reject("")})}else{i.resolve("No change")}return i.promise};return d}]}a.directive("trspan",["$translator",function(c){return{restrict:"A",replace:false,transclude:true,scope:{trspan:"@"},link:function(e,f,d){if(c.translationFields.portal){d.trspan=c.translate(d.trspan)}else{c.deferredTr.push({e:f,f:"text",m:d.trspan})}f.text(d.trspan)},template:""}}]);a.directive("onReadFile",["$parse",function(c){return{restrict:"A",scope:false,link:function(g,e,d){var f=c(d.onReadFile);e.on("change",function(i){var h=new FileReader();h.onload=function(j){g.$apply(function(){f(g,{$fileContent:j.target.result})})};h.readAsText((i.srcElement||i.target).files[0])})}}}]);a.directive("resizer",["$document",function(e){var d,c;return function(h,g,f){g.on("mousedown",function(k){if(f.resizer=="vertical"){d=$(f.resizerRight).width()+$(f.resizerLeft).width()}else{c=$(f.resizerTop).height()+$(f.resizerBottom).height()}k.preventDefault();e.on("mousemove",i);e.on("mouseup",j)});function i(l){if(f.resizer=="vertical"){var k=l.pageX;if(f.resizerMax&&k>f.resizerMax){k=parseInt(f.resizerMax)}$(f.resizerLeft).css({width:k+"px"});$(f.resizerRight).css({width:(d-k)+"px"})}else{var m=l.pageY-$("#navbar").height();$(f.resizerTop).css({height:m+"px"});$(f.resizerBottom).css({height:(c-m)+"px"})}}function j(){e.unbind("mousemove",i);e.unbind("mouseup",j)}}}]);a.factory("$lmhttp",["$q","$location",function(c,d){return{responseError:function(e){var g=e.headers();if(e.status==401&&g.authorization&&g.authorization.match(/^http/)){var f=g.authorization.replace(/url=.*$/g,"");f+="url="+window.btoa(window.location).replace(/\//,"_");window.location=f}return c.reject(e)}}}]);a.config(["$httpProvider",function(c){c.interceptors.push("$lmhttp")}])})();
(function(){var a=angular.module("llApp",[]);a.provider("$translator",b);function b(){var d={};if(navigator){var f=[navigator.language];if(navigator.languages){f=navigator.languages}var e=[],c=[];f.forEach(function(g){availableLanguages.forEach(function(h){if(h==g){e.push(h)}else{if(h.substring(0,1)==g.substring(0,1)){c.push(h)}}})});d.lang=e[0]?e[0]:c[0]?c[0]:"en"}else{d.lang="en"}d.deferredTr=[];d.translationFields={};d.translate=function(g){if(d.translationFields[g]){g=d.translationFields[g]}return g};d.translateField=function(g,h){return d.translate(g[h])};d.translateP=function(g){if(g&&d.translationFields.portal){g=g.replace(/__(\w+)__/g,function(i,h){return d.translate(h)})}return g};this.$get=["$q","$http",function(g,h){d.last="";d.init=function(j){if(!j){j=d.lang}var i=g.defer();if(d.last!=j){d.last=j;h.get(staticPrefix+"languages/"+j+".json").success(function(k){d.translationFields=k;d.deferredTr.forEach(function(l){l.e[l.f](d.translationFields[l.m])});d.deferredTr=[];i.resolve("Translation files loaded")}).error(function(k,l){serrors(k,l);i.reject("")})}else{i.resolve("No change")}return i.promise};return d}]}a.directive("trspan",["$translator",function(c){return{restrict:"A",replace:false,transclude:true,scope:{trspan:"@"},link:function(e,f,d){if(c.translationFields.portal){d.trspan=c.translate(d.trspan)}else{c.deferredTr.push({e:f,f:"text",m:d.trspan})}f.text(d.trspan)},template:""}}]);a.directive("onReadFile",["$parse",function(c){return{restrict:"A",scope:false,link:function(g,e,d){var f=c(d.onReadFile);e.on("change",function(i){var h=new FileReader();h.onload=function(j){g.$apply(function(){f(g,{$fileContent:j.target.result})})};h.readAsText((i.srcElement||i.target).files[0])})}}}]);a.directive("resizer",["$document",function(e){var d,c;return function(h,g,f){g.on("mousedown",function(k){if(f.resizer=="vertical"){d=$(f.resizerRight).width()+$(f.resizerLeft).width()}else{c=$(f.resizerTop).height()+$(f.resizerBottom).height()}k.preventDefault();e.on("mousemove",i);e.on("mouseup",j)});function i(l){if(f.resizer=="vertical"){var k=l.pageX;if(f.resizerMax&&k>f.resizerMax){k=parseInt(f.resizerMax)}$(f.resizerLeft).css({width:k+"px"});$(f.resizerRight).css({width:(d-k)+"px"})}else{var m=l.pageY-$("#navbar").height();$(f.resizerTop).css({height:m+"px"});$(f.resizerBottom).css({height:(c-m)+"px"})}}function j(){e.unbind("mousemove",i);e.unbind("mouseup",j)}}}]);a.factory("$lmhttp",["$q","$location",function(c,d){return{responseError:function(e){var g=e.headers();if(e.status==401&&g["www-authenticate"]&&g["www-authenticate"].match(/^http/)){var f=g["www-authenticate"].replace(/url=.*$/g,"");f+="url="+window.btoa(window.location).replace(/\//,"_");window.location=f}return c.reject(e)}}}]);a.config(["$httpProvider",function(c){c.interceptors.push("$lmhttp")}])})();