Firewall-Config-Parser
view release on metacpan or search on metacpan
lib/Firewall/Config/Parser/Role.pm view on Meta::CPAN
package Firewall::Config::Parser::Role;
#------------------------------------------------------------------------------
# å è½½æ©å±æ¨¡å
#------------------------------------------------------------------------------
use Moose::Role;
#------------------------------------------------------------------------------
# å è½½ Firewall::Policy::Element éç¨å±æ§
#------------------------------------------------------------------------------
use Firewall::Policy::Element::Service;
use Firewall::Policy::Element::Source;
use Firewall::Policy::Element::Destination;
#------------------------------------------------------------------------------
# å è½½ Firewall::Config::Parser éç¨å±æ§
#------------------------------------------------------------------------------
use Firewall::Config::Element::Role;
use Firewall::Config::Parser::Elements;
use Firewall::Config::Parser::Report;
#------------------------------------------------------------------------------
# Firewall::Config::Parser::Role éç¨å±æ§
#------------------------------------------------------------------------------
has fwId => ( is => 'ro', isa => 'Int', builder => '_buildFwId', writer => 'setFwId', );
#------------------------------------------------------------------------------
# does è¦æ±è¯¥å±æ§å
å« Firewall::Config::Content::Role
# https://metacpan.org/pod/distribution/Moose/lib/Moose/Manual/Attributes.pod
#------------------------------------------------------------------------------
has config => (
is => 'ro',
does => 'Firewall::Config::Content::Role',
required => 1,
writer => 'setConfig',
handles => {
nextUnParsedLine => 'nextUnParsedLine',
backtrackLine => 'backtrack',
ignoreLine => 'ignore',
getUnParsedLines => 'getUnParsedLines',
lineNumber => 'cursor',
goToHeadLine => 'goToHead',
},
);
has preDefinedService => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::Service::Role]', required => 1, );
has elements => (
is => 'ro',
isa => 'Firewall::Config::Parser::Elements',
default => sub { Firewall::Config::Parser::Elements->new },
handles => {addElement => 'addElement',},
);
has report => (
is => 'ro',
isa => 'Firewall::Config::Parser::Report',
default => sub { Firewall::Config::Parser::Report->new },
);
has elementType => ( is => 'ro', isa => 'Str|Undef', default => undef, writer => 'setElementType', );
has ruleIndex => ( is => 'ro', isa => 'HashRef', default => sub { {} }, );
#------------------------------------------------------------------------------
# Firewall::Config::Parser::Role éç¨å±æ§
#------------------------------------------------------------------------------
sub getElement {
my ( $self, $elementType, @params ) = @_;
confess "ERROR: number of params must bigger then 0" if @params == 0;
my $sign = Firewall::Config::Element::Role->createSign(@params);
$self->elements->getElement( $elementType, $sign );
}
#------------------------------------------------------------------------------
# è·åé²ç«å¢ id
#------------------------------------------------------------------------------
sub _buildFwId {
my $self = shift;
return $self->config->fwId;
}
#------------------------------------------------------------------------------
# å®ä¹åè¦å½æ°
#------------------------------------------------------------------------------
sub warn {
my ( $self, $message ) = @_;
$message .= "\n" if $message !~ /\n$/o;
warn '[' . $self->elementType . ':' . $self->config->cursor . '] ' . $message;
}
#------------------------------------------------------------------------------
# å 载该è§è²å¿
é¡»å®ç°çæ¹æ³
#------------------------------------------------------------------------------
requires 'parse';
#------------------------------------------------------------------------------
# å½ parse 彿°å¸¦è¾å
¥åæ°æ¶ï¼æ£æ¥è¾å
¥åæ°ï¼å¹¶æ´æ° config å fwId
# https://stackoverflow.com/questions/22557427/perl-moose-augment-vs-around
#------------------------------------------------------------------------------
around 'parse' => sub {
my $orig = shift;
my $self = shift;
if ( @_ == 1 and $_[0]->does('Firewall::Config::Content::Role') ) {
$self->setConfig( $_[0] );
$self->setFwId( $_[0]->fwId );
}
$self->$orig(@_);
$self->createReport;
return $self->elements;
};
#------------------------------------------------------------------------------
# è¾åºé
ç½®è§£ææ¥å
#-----------------------------------------------------------------------------
sub createReport {
my $self = shift;
# éåé²ç«å¢è®¿é®æ§å¶çç¥
for my $rule ( values %{$self->elements->{rule}} ) {
# 跳转æ 记为 ignore é
ç½®è¡
next if $rule->ignore;
( run in 0.522 second using v1.01-cache-2.11-cpan-39bf76dae61 )