SPVM-HTTP-Tiny

 view release on metacpan or  search on metacpan

lib/SPVM/HTTP/Tiny/Transaction.spvm  view on Meta::CPAN

  method is_websocket : int () {
    die "Not implemented.";
  }
  
  method remote_address : string () {
    
    unless ($self->req->reverse_proxy) {
      return $self->original_remote_address;
    }
    
    my $x_forwarded_for = $self->req->headers->header("X-Forwarded-For");
    unless ($x_forwarded_for) {
      $x_forwarded_for = "";
    }
    
    my $addrs   = Re->split("\s*,\s*", $x_forwarded_for);
    my $trusted = $self->req->trusted_proxies;
    
    unless (@$trusted) {
      if (@$addrs) {
        return $addrs->[@$addrs - 1];

lib/SPVM/HTTP/Tiny/Transaction.spvm  view on Meta::CPAN


sub is_websocket {undef}

sub remote_address {
  my $self = shift;

  return $self->original_remote_address(@_) if @_;
  return $self->original_remote_address unless $self->req->reverse_proxy;

  # Reverse proxy
  my @addrs   = split /\s*,\s*/, ($self->req->headers->header('X-Forwarded-For') // '');
  my $trusted = $self->req->trusted_proxies;
  return @addrs ? $addrs[-1] : $self->original_remote_address unless @$trusted;

  push @addrs, $self->original_remote_address;
  for my $addr (reverse @addrs) {
    return $addr unless any { network_contains($_, $addr) } @$trusted;
  }
  return $addrs[0];
}

lib/SPVM/HTTP/Tiny/Transaction.spvm  view on Meta::CPAN

  my $bool = $tx->is_websocket;

False, this is not a L<Mojo::Transaction::WebSocket> object.

=head2 remote_address

  my $address = $tx->remote_address;
  $tx         = $tx->remote_address('127.0.0.1');

Same as L</"original_remote_address"> unless L</"req"> has been performed via a L<Mojo::Message::Request/reverse_proxy>.
If so then the last value of C<X-Forwarded-For> header is returned. Additionally if
L<Mojo::Message::Request/trusted_proxies> are also provided then the original address must be trusted and any
C<X-Forwarded-For> entries that are trusted are ignored, returning the last untrusted address or the first address if
all are trusted.

=head2 result

  my $res = $tx->result;

Returns the L<Mojo::Message::Response> object from L</"res"> or dies if a connection error has occurred.

  # Fine grained response handling (dies on connection errors)
  my $res = $tx->result;



( run in 0.689 second using v1.01-cache-2.11-cpan-26ccb49234f )