App-Acmeman

 view release on metacpan or  search on metacpan

lib/App/Acmeman/Apache/Layout/slackware.pm  view on Meta::CPAN

package App::Acmeman::Apache::Layout::slackware;
use strict;
use warnings;
use Carp;
use parent 'App::Acmeman::Apache::Layout';
use Apache::Config::Preproc;
use App::Acmeman::Log qw(:all);
use File::BackupCopy;

our $PRIORITY = 10;

sub new {
    my $class = shift;
    my $ap = shift;

    if ($ap->server_config eq  '/etc/httpd/httpd.conf'
	&& -d '/etc/httpd/extra') {
	return $class->SUPER::new($ap,
			incdir => '/etc/httpd/extra',
			restart_command => '/etc/rc.d/rc.httpd restart'
	       );
    }
}

sub post_setup {
    my ($self,$filename) = @_;

    my $master_config_file = $self->config_file;
    my $app = new Apache::Config::Preproc(
        $master_config_file,
	'-no-comment-grouping',
        -expand => [ 'locus',
                     { 'include' => [ server_root => $self->apache->server_root ] },
                     { 'macro' => [
			   'keep' => [ qw(LetsEncryptChallenge
                                          LetsEncryptReference
                                          LetsEncryptSSL)
			             ]
		       ]
		     }
	           ])
	or do {
	    debug(1, "can't parse apache configuration: $Apache::Admin::Config::ERROR");
	    return;
    };

    my $need_macro_module = !$self->apache_modules('macro');
    my $letsencrypt_macro_loaded = grep {
	$_->value =~ /^letsencrypt(?:challenge|reference|ssl)/i
    } $app->select('section', 'Macro');

    debug(3, "Need macro module? ".($need_macro_module?'yes':'no'));
    debug(3, "Need letsencrypt macro? ".
          ($letsencrypt_macro_loaded==0
	   ? 'yes'
	   : ($letsencrypt_macro_loaded==3
	      ? 'no' : 'perhaps')));

    my $last_loadmodule;
    my $stop_search;
    my $last_master_locus;
    my $include_text = "Include $filename";

    foreach my $node ($app->select) {
	if (!$stop_search) {
	    if (($node->locus->filenames)[0] eq $master_config_file) {
		$last_master_locus = $node->locus;
	    }
	    if ($node->type eq 'section') {
		if ($node->name =~ /^virtualhost$/i) {
		    $stop_search = $last_master_locus;
		    last;
		}
	    }
	}

	if ($node->type eq 'comment') {
	    if ($node->value =~ m{^\s*loadmodule\s}) {



( run in 2.037 seconds using v1.01-cache-2.11-cpan-ff9377addf4 )