CPAN-Mini-Webserver

 view release on metacpan or  search on metacpan

lib/CPAN/Mini/Webserver.pm  view on Meta::CPAN

use strict;
use warnings;

package CPAN::Mini::Webserver;

# ABSTRACT: Search and browse Mini CPAN

our $VERSION = '0.58'; # VERSION

use App::Cache;
use Archive::Peek 0.33;
use CPAN::Mini::App 0.565;
use CPAN::Mini::Webserver::Index;
use CPAN::Mini::Webserver::Templates;
use CPAN::Mini::Webserver::Templates::CSS;
use CPAN::Mini::Webserver::Templates::Images;
use Encode;
use File::Spec::Functions qw( canonpath catfile );
use File::Type;
use List::MoreUtils qw(uniq);
use HTTP::Server::Simple 0.34;
use HTTP::Server::Simple::CGI;
use Module::InstalledVersion;
use Moose;
use Parse::CPAN::Authors;
use Parse::CPAN::Packages 2.35;
use Parse::CPAN::Whois 0.02;
use Parse::CPAN::Meta;
use Pod::Simple::HTML;
use Path::Class;
use PPI;
use PPI::HTML;
use Safe;
use Template::Declare;
use Try::Tiny;

Template::Declare->init( roots => [ 'CPAN::Mini::Webserver::Templates', 'CPAN::Mini::Webserver::Templates::CSS', 'CPAN::Mini::Webserver::Templates::Images', ] );

if ( eval { require HTTP::Server::Simple::Bonjour } ) {
    extends 'HTTP::Server::Simple::Bonjour', 'HTTP::Server::Simple::CGI';
}
else {
    extends 'HTTP::Server::Simple::CGI';
}

has hostname  => ( is => 'rw', lazy_build => 1 );
has cgi       => ( is => 'rw', isa        => 'CGI', lazy_build => 1 );
has directory => ( is => 'rw', isa        => 'Path::Class::Dir' );
has scratch   => ( is => 'rw', isa        => 'Path::Class::Dir' );
has author_type         => ( is => 'rw' );
has parse_cpan_authors  => ( is => 'rw' );
has parse_cpan_packages => ( is => 'rw', isa => 'Parse::CPAN::Packages' );
has pauseid             => ( is => 'rw' );
has distvname           => ( is => 'rw' );
has filename            => ( is => 'rw' );
has index               => ( is => 'rw', isa => 'CPAN::Mini::Webserver::Index' );
has config              => ( is => 'ro', lazy_build => 1 );
has is_cgi              => ( is => 'rw' );
has base_url            => ( is => 'ro', lazy_build => 1 );

sub service_name {
    "$ENV{USER}'s minicpan_webserver";
}

sub get_file_from_tarball {
    die "Deprecated above 0.53. This function can now be found in Parse::CPAN::Packages.";
}

sub checksum_data_for_author {
    my ( $self, $pauseid ) = @_;

    my $file = file( $self->directory, 'authors', 'id', substr( $pauseid, 0, 1 ), substr( $pauseid, 0, 2 ), $pauseid, 'CHECKSUMS', );

    return unless -f $file;

    my ( $content );
    {
        local $/;
        open my $fh, "$file" or die "$file: $!";
        $content = <$fh>;
        close $fh;
    }

    my $compmt = Safe->new;
    my $chksum = $compmt->reval( $content );

    return $chksum;
}

sub send_http_header {
    my $self   = shift;
    my $code   = shift;
    my %params = @_;

    if (   ( defined $params{-charset} and $params{-charset} eq 'utf-8' )



( run in 1.506 second using v1.01-cache-2.11-cpan-99c4e6809bf )