Moving to PSGI: Issues with $ENV

Mike Tonks <[email protected]> Mon, 15 Oct 2012 13:42:49 +0100
Newsgroups gmane.comp.lang.perl.modules.cgi-appplication
Message-ID <CAM89dM7-RKee44uSe9wVHzbF5v1OJrQfz2g6HMX_C1m0iqS4Zg@mail.gmail.com>
Another issue that has come up along the way is using $ENV

While this is fine under apache it doesn't seem to work with PSGI

A common occurence is using $ENV{REMOTE_ADDR} for a user IP Address,
but this is easily solved by using $self->query->remote_addr which
does the right thing in both environments.

However today I stumbled across an issue with
CGI::Application::Plugin::DetectAjax

  my $header = 'HTTP_X_REQUESTED_WITH';

  if (exists $ENV{$header} && lc $ENV{$header} eq 'xmlhttprequest') {
    return 1;
  }
  else {
    return 0;
  }

This does not work under PSGI.

Looking at CGI::PSGI the correct approach seems to be:

$self->env->{$header}

so a possible patch would look something like:

  my $header = 'HTTP_X_REQUESTED_WITH';

  my $header_value = $self->{__IS_PSGI} ? $self->env->{$header} : $ENV{$header};

  if ($header_value && lc $header_value eq 'xmlhttprequest') {
    return 1;
  }
  else {
    return 0;
  }

Can anyone help / confirm / improve on this?

Regards,

mike

#####  CGI::Application community mailing list  ################
##                                                            ##
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp    ##
##                                                            ##
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:          http://cgiapp.erlbaum.net/                 ##
##                                                            ##
################################################################