App-Acmeman

 view release on metacpan or  search on metacpan

lib/App/Acmeman/Config.pm  view on Meta::CPAN

package App::Acmeman::Config;

use strict;
use warnings;
use Carp;
use parent 'Config::Parser::Ini';
use Text::ParseWords;
use App::Acmeman::Log qw(debug_level :sysexits);
use File::Spec;

sub new {
    my $class = shift;
    my $filename = shift;
    my %args;
    if (-e $filename) {
	$args{filename} = $filename;
    }
    my $self = $class->SUPER::new(%args);
    if (!$args{filename}) {
	$self->commit or croak "configuration failed";
    }
    $self
}

sub mangle {
    my $self = shift;
    my $err;

    if (debug_level() == 0 && $self->core->verbose) {
	debug_level($self->core->verbose);
    }
    $self->set(qw(core files default))
	unless $self->is_set(qw(core files));

    unless ($self->is_set(qw(files))) {
	if ($self->get(qw(core files)) ne 'default') {
	    $self->error("section files." . $self->get(qw(core files))." not defined");
	    ++$err;
	}
    }

    unless ($self->is_set(qw(files default))) {
	$self->set(qw(files default type), 'split');
	$self->set(qw(files default key-file), 
		     '/etc/ssl/acme/$domain/privkey.pem');
	$self->set(qw(files default certificate-file),
		     '/etc/ssl/acme/$domain/cert.pem');
	$self->set(qw(files default ca-file),
		     '/etc/ssl/acme/$domain/ca.pem');
    }
    
    if (my $fnode = $self->getnode('files')) {
	while (my ($k, $v) = each %{$fnode->subtree}) {
	    $v->set('files', $k, 'type', 'split')
		unless $v->has_key('type');
	    if ($v->subtree('type') eq 'single') {
		unless ($v->has_key('certificate-file')) {
		    $self->error("files.$k.certificate-file not defined");
		    ++$err;
		} else {
		    if ($v->has_key('key-file')) {
			$self->error("files.$k.key-file ignored");
		    }
		    if ($v->has_key('ca-file')) {
			$self->error("files.$k.ca-file ignored");
		    }
		}
	    } else {
		unless ($v->has_key('key-file')) {
		    $self->error("files.$k.key-file not defined");
		    ++$err;
		}
		unless ($v->has_key('certificate-file')) {
		    $self->error("files.$k.ca-file not defined");
		    ++$err;
		}
	    }
	}



( run in 0.445 second using v1.01-cache-2.11-cpan-98e64b0badf )