Resolve conflicts between UTF8 and JSON responses in Manager (#150)

environments/ppa-mbqj77/deployments/1
Clément Oudot 15 years ago
parent 06beaa6ff4
commit 093019d623
  1. 3
      modules/lemonldap-ng-manager/example/skins/default/manager.js
  2. 13
      modules/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm
  3. 2
      modules/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Downloader.pm
  4. 3
      modules/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Uploader.pm

@ -833,7 +833,8 @@ function getCfgAttributes() {
cfgAttrDone++;
},
error:function(xhr, ajaxOptions, thrownError){
setCfgAttributes({cfgAuthor:'unknown',cfgAuthorIP:'unknown',cfgDate:'unknown'});
var msg = 'Error code: '+xhr.status+', '+thrownError;
setCfgAttributes({cfgAuthor:msg,cfgAuthorIP:msg,cfgDate:msg});
}
});
}

@ -53,10 +53,12 @@ sub new {
# Display help if ?help=
if ( $self->param('help') ) {
print $self->header_public( $ENV{SCRIPT_FILENAME},
-type => 'text/html; charset=utf8' );
&Lemonldap::NG::Manager::Help::import( $self->{language} );
my $chap = $self->param('help');
$self->lmLog( "Manager request: Help chapter $chap", 'debug' );
eval { no strict "refs"; &{"help_$chap"} };
$self->quit();
}
@ -64,6 +66,7 @@ sub new {
# Save conf if ?data=
elsif ( my $rdata = $self->rparam('data') ) {
$self->lmLog( "Manager request: Save data $rdata", 'debug' );
require Lemonldap::NG::Manager::Uploader; #inherits
$self->confUpload($rdata);
$self->quit();
@ -72,6 +75,7 @@ sub new {
# File upload/download
elsif ( my $rfile = $self->rparam('file') ) {
$self->lmLog( "Manager request: File $rfile", 'debug' );
my @params = ('file');
if ( my $rfilename = $self->rparam('filename') ) {
push @params, ${$rfilename};
@ -84,6 +88,7 @@ sub new {
# URL upload/download
elsif ( my $rurl = $self->rparam('url') ) {
$self->lmLog( "Manager request: URL $rurl", 'debug' );
require Lemonldap::NG::Manager::Uploader; #inherits
$self->urlUpload('url');
$self->quit();
@ -92,6 +97,7 @@ sub new {
# Ask requests
elsif ( my $rreq = $self->rparam('request') ) {
$self->lmLog( "Manager request: $rreq", 'debug' );
require Lemonldap::NG::Manager::Request; #inherits
$self->request($rreq);
$self->quit();
@ -103,14 +109,21 @@ sub new {
$self->param('cfgNum')
|| $self->confObj->lastCfg()
|| 'UNAVAILABLE';
if ( my $p = $self->param('node') ) {
$self->lmLog( "Manager request: load node $p", 'debug' );
print $self->header( -type => 'text/html; charset=utf8', );
print $self->node($p);
$self->quit();
}
if ( $self->param('cfgAttr') ) {
$self->lmLog( "Manager request: load configuration attributes",
'debug' );
$self->sendCfgParams( $self->conf );
}
return $self;
}

@ -369,7 +369,7 @@ sub sendCfgParams {
foreach (qw(cfgAuthor cfgAuthorIP cfgDate)) {
my $tmp = $h->{$_} || 'anonymous';
$tmp =~ s/'/\\'/g;
push @buf, "$_:'$tmp'";
push @buf, "\"$_\":\"$tmp\"";
}
$_ = '{' . join( ',', @buf ) . '}';
print $self->header(

@ -338,6 +338,9 @@ s/^(samlSPMetaDataXML|samlSPMetaDataExportedAttributes|samlSPMetaDataOptions)\/(
$buf .= '}';
# 4. SEND JSON RESPONSE
binmode( STDOUT, ':bytes' ); # Else JSON is invalid
use utf8;
utf8::encode($buf); # Reencode message
print $self->header(
-type => 'application/json; charset=utf-8',
-Content_Length => length($buf)

Loading…
Cancel
Save