Plack-App-Prerender

 view release on metacpan or  search on metacpan

lib/Plack/App/Prerender.pm  view on Meta::CPAN

package Plack::App::Prerender;

# ABSTRACT: a simple prerendering proxy for Plack

use v5.10.1;
use strict;
use warnings;

our $VERSION = 'v0.2.0';

use parent qw/ Plack::Component /;

use Encode qw/ encode /;
use HTTP::Headers;
use HTTP::Request;
use HTTP::Status qw/ :constants /;
use Plack::Request;
use Plack::Util;
use Plack::Util::Accessor qw/ mech rewrite cache max_age request response wait /;
use Ref::Util qw/ is_coderef is_plain_arrayref /;
use Time::Seconds qw/ ONE_HOUR /;
use WWW::Mechanize::Chrome;

# RECOMMEND PREREQ: CHI
# RECOMMEND PREREQ: Log::Log4perl
# RECOMMEND PREREQ: Ref::Util::XS


sub prepare_app {
    my ($self) = @_;

    unless ($self->mech) {

        my $mech = WWW::Mechanize::Chrome->new(
            headless         => 1,
            separate_session => 1,
        );

        $self->mech($mech);

    }

    unless ($self->request) {
        $self->request(
            {
                'User-Agent' => 'X-Forwarded-User-Agent',
                ( map { $_ => $_ } qw/
                  X-Forwarded-For
                  X-Forwarded-Host
                  X-Forwarded-Port
                  X-Forwarded-Proto
                  /
                ),
            }
        );
    }
    if (is_plain_arrayref($self->request)) {
        $self->request( { map { $_ => $_ } @{ $self->request } } );
    }


    unless ($self->response) {
        $self->response(
            {
                ( map { $_ => $_ } qw/
                  Content-Type
                  Expires
                  Last-Modified
                  /
                ),
            }
        );
    }
    if (is_plain_arrayref($self->response)) {
        $self->response( { map { $_ => $_ } @{ $self->response } } );
    }

    unless ($self->max_age) {
        $self->max_age( ONE_HOUR );
    }
}

sub call {
    my ($self, $env) = @_;

    my $req = Plack::Request->new($env);



( run in 1.085 second using v1.01-cache-2.11-cpan-39bf76dae61 )