App-DuckPAN

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

  Date : 2017-03-29 20:21:58 +0000

    undo css regex modifications 

  Change: 678bde1390d9c42e2d8cc5f5e2d8b5dacc4c456f
  Author: Zach Thompson <zachthompson@users.noreply.github.com>
  Date : 2017-03-22 15:02:04 +0000

    Merge pull request #387 from duckduckgo/zaahir/log-request-obj

    Pass spice headers to GET requests and print HTTP::Request in DuckPAN
    output 

  Change: c8645538e70c7703fb23dfa78252ba601f193ada
  Author: Zaahir Moolla <moollaza@duckduckgo.com>
  Date : 2017-03-22 16:41:41 +0000

    Add headers to GET request when present 

  Change: f17a5b17def8508eabb601da43c9d97b83e65033
  Author: Zaahir Moolla <moollaza@duckduckgo.com>

META.json  view on Meta::CPAN

            "File::HomeDir" : "0",
            "File::ShareDir::ProjectDistDir" : "0",
            "File::Temp" : "0",
            "File::Which" : "0",
            "Filesys::Notify::Simple" : "0",
            "Getopt::Long" : "0",
            "HTML::Element" : "0",
            "HTML::Entities" : "0",
            "HTML::TreeBuilder" : "0",
            "HTTP::Headers" : "0",
            "HTTP::Request" : "0",
            "HTTP::Request::Common" : "0",
            "HTTP::Status" : "0",
            "JSON" : "0",
            "LWP::Simple" : "0",
            "LWP::UserAgent" : "0",
            "List::MoreUtils" : "0",
            "List::Util" : "0",
            "Module::Data" : "0",
            "Module::Pluggable::Object" : "0",
            "Moo" : "0",
            "Moo::Role" : "0",

META.yml  view on Meta::CPAN

  File::HomeDir: '0'
  File::ShareDir::ProjectDistDir: '0'
  File::Temp: '0'
  File::Which: '0'
  Filesys::Notify::Simple: '0'
  Getopt::Long: '0'
  HTML::Element: '0'
  HTML::Entities: '0'
  HTML::TreeBuilder: '0'
  HTTP::Headers: '0'
  HTTP::Request: '0'
  HTTP::Request::Common: '0'
  HTTP::Status: '0'
  JSON: '0'
  LWP::Simple: '0'
  LWP::UserAgent: '0'
  List::MoreUtils: '0'
  List::Util: '0'
  Module::Data: '0'
  Module::Pluggable::Object: '0'
  Moo: '0'
  Moo::Role: '0'

Makefile.PL  view on Meta::CPAN

    "File::HomeDir" => 0,
    "File::ShareDir::ProjectDistDir" => 0,
    "File::Temp" => 0,
    "File::Which" => 0,
    "Filesys::Notify::Simple" => 0,
    "Getopt::Long" => 0,
    "HTML::Element" => 0,
    "HTML::Entities" => 0,
    "HTML::TreeBuilder" => 0,
    "HTTP::Headers" => 0,
    "HTTP::Request" => 0,
    "HTTP::Request::Common" => 0,
    "HTTP::Status" => 0,
    "JSON" => 0,
    "LWP::Simple" => 0,
    "LWP::UserAgent" => 0,
    "List::MoreUtils" => 0,
    "List::Util" => 0,
    "Module::Data" => 0,
    "Module::Pluggable::Object" => 0,
    "Moo" => 0,
    "Moo::Role" => 0,

Makefile.PL  view on Meta::CPAN

  "File::Path" => 0,
  "File::ShareDir::ProjectDistDir" => 0,
  "File::Temp" => 0,
  "File::Which" => 0,
  "Filesys::Notify::Simple" => 0,
  "Getopt::Long" => 0,
  "HTML::Element" => 0,
  "HTML::Entities" => 0,
  "HTML::TreeBuilder" => 0,
  "HTTP::Headers" => 0,
  "HTTP::Request" => 0,
  "HTTP::Request::Common" => 0,
  "HTTP::Status" => 0,
  "JSON" => 0,
  "LWP::Simple" => 0,
  "LWP::UserAgent" => 0,
  "List::MoreUtils" => 0,
  "List::Util" => 0,
  "Module::Data" => 0,
  "Module::Pluggable::Object" => 0,
  "Moo" => 0,
  "Moo::Role" => 0,

lib/App/DuckPAN.pm  view on Meta::CPAN

# ABSTRACT: The DuckDuckGo DuckPAN client
$App::DuckPAN::VERSION = '1021';
use feature 'state';

use Moo;
use MooX::Cmd;
use MooX::Options;
use App::DuckPAN::Config;
use File::Which;
use Class::Load ':all';
use HTTP::Request::Common qw( GET POST );
use HTTP::Status;
use List::Util qw( first max );
use LWP::UserAgent;
use LWP::Simple;
use Parse::CPAN::Packages::Fast;
use File::Temp qw/ :POSIX /;
use Term::ANSIColor;
use Term::UI;
use Term::ReadLine;
use Carp;

lib/App/DuckPAN/Cmd/Server.pm  view on Meta::CPAN

	if ($to_file->exists && (time - $to_file->stat->ctime) < $self->app->cachesec) {
		$self->app->emit_debug($prefix . $to_file->basename . " recently cached -- no request made.");
	}
	else {
		$self->app->emit_debug($prefix . 'requesting from: ' . $url . '...');
		$to_file->remove;
		$to_file->touchpath;
		my ($expected_length, $bytes_received, $progress);
		my $next_update = 0;
		my $res         = $self->app->http->request(
			HTTP::Request->new(GET => $url),
			sub {
				my ($chunk, $res) = @_;
				$bytes_received += length($chunk);
				$to_file->append($chunk);
				$expected_length //= $res->content_length || 0;
				return unless $self->app->verbose;    # Progress bar is just for verbose mode;
				if ($expected_length && !defined($progress)) {
					$progress = Term::ProgressBar->new({
						name   => $prefix,
						count  => $expected_length,

lib/App/DuckPAN/Web.pm  view on Meta::CPAN

use DDG::Test::Language;
use DDG::Meta::Data;
use Path::Tiny;
use Plack::Request;
use Plack::Response;
use Plack::MIME;
use HTML::Entities;
use HTML::TreeBuilder;
use HTML::Element;
use Data::Printer return_value => 'dump';
use HTTP::Request;
use HTTP::Headers;
use LWP::UserAgent;
use URI::Escape;
use JSON;

has blocks => ( is => 'ro', required => 1 );
has page_root => ( is => 'ro', required => 1 );
has page_spice => ( is => 'ro', required => 1 );
has page_css => ( is => 'ro', required => 1 );
has page_js => ( is => 'ro', required => 1 );

lib/App/DuckPAN/Web.pm  view on Meta::CPAN

						 print "\nAPI key not found. Using DuckDuckGo's endpoint:\n";
					}

					$to = "https://beta.duckduckgo.com$request_uri" if $use_ddh;

					my $h = HTTP::Headers->new( %$headers );
					my $res;
					my $req;

					if ( $post_body && !$use_ddh ) {
						$req = HTTP::Request->new(
							POST => $to,
							$h,
							$post_body
						);
					}
					else {
						$req = HTTP::Request->new(
							GET => $to,
							$h
						);
					}

					p($req->as_string);
					$res = $self->ua->request($req);

					if ($res->is_success) {
						$body = $res->decoded_content;

lib/App/DuckPAN/Web.pm  view on Meta::CPAN


		$page =~ s/####DUCKDUCKHACK-CALL-NRJ####/$calls_nrj/g;
		$page =~ s/####DUCKDUCKHACK-CALL-NRC####/$calls_nrc/g;
		$page =~ s/####DUCKDUCKHACK-CALL-SCRIPT####/$calls_script/g;

		$response->content_type('text/html');
		$body = $page;

	}
	else {
		my $res = $self->ua->request(HTTP::Request->new(GET => "http://".$hostname.$request->request_uri));
		if ($res->is_success) {
			$body = $res->decoded_content;
			$response->code($res->code);
			$response->content_type($res->content_type);
		}
		else {
			p($res->status_line, color => { string => 'red' });
			$body = "";
		}
	}

lib/App/DuckPAN/WebPublisher.pm  view on Meta::CPAN

package App::DuckPAN::WebPublisher;
our $AUTHORITY = 'cpan:DDG';
# ABSTRACT: Webserver for duckpan publisher
$App::DuckPAN::WebPublisher::VERSION = '1021';
use Moo;
with qw( App::DuckPAN::HasApp );

use HTTP::Request;
use Plack::Request;
use Plack::Response;

has sites => ( is => 'ro', required => 1 );

has ports => (
	is => 'ro',
	lazy => 1,
	default => sub {
		my ( $self ) = @_;

lib/App/DuckPAN/WebPublisher.pm  view on Meta::CPAN


	my $file = $uri.'/'.$self->current_language.'.html';

	if (defined $site->fullpath_files->{$file}) {
		$self->app->emit_info('Request '.$request->path_info.' uses '.$file.' from DDG::Publisher...');
		$body = $site->fullpath_files->{$file}->uncached_content;
		$response->code("200");
		$response->content_type('text/html; charset=utf-8');
	}
	else {
		my $res = $self->app->http->request(HTTP::Request->new(GET => $url.$request->request_uri));
		if ($res->is_success) {
			$body = $res->decoded_content;
			$response->code($res->code);
			$response->content_type($res->content_type);
		}
		else {
			$body = "GET ".$url.$request->request_uri.": ".$res->status_line;
			warn $body, "\n";
		}
	}

lib/App/DuckPAN/WebStatic.pm  view on Meta::CPAN

package App::DuckPAN::WebStatic;
our $AUTHORITY = 'cpan:DDG';
# ABSTRACT: Webserver for duckpan static
$App::DuckPAN::WebStatic::VERSION = '1021';
use Moo;
use HTTP::Request;
use Plack::Request;
use Plack::Response;
use LWP::UserAgent;
use URI::Escape;
use Path::Tiny;
use JSON;

has sites => ( is => 'ro', required => 1 );

has _ports => ( is => 'rw', default => sub {{}} );

lib/App/DuckPAN/WebStatic.pm  view on Meta::CPAN

	my $locale = defined $ENV{DDG_LOCALE} ? $ENV{DDG_LOCALE} : 'en_US';

	my $site = $self->_ports->{$request->port};

	if ($site->{urls}->{$request->request_uri}) {
		$body = path($site->{urls}->{$request->request_uri}->{$locale})->slurp_utf8;
		$response->code("200");
		$response->content_type('text/html');
	}
	else {
		my $res = $self->ua->request(HTTP::Request->new(GET => $site->{base_url}.$request->request_uri));
		if ($res->is_success) {
			$body = $res->decoded_content;
			$response->code($res->code);
			$response->content_type($res->content_type);
		}
		else {
			warn $res->status_line, "\n";
			$body = "";
		}
	}



( run in 0.512 second using v1.01-cache-2.11-cpan-de7293f3b23 )