Firewall-Policy-Designer

 view release on metacpan or  search on metacpan

lib/Firewall/Policy/Designer/ClearPolicy/Netscreen.pm  view on Meta::CPAN

package Firewall::Policy::Designer::ClearPolicy::Netscreen;

#------------------------------------------------------------------------------
# 加载系统模块,辅助构造函数功能和属性
#------------------------------------------------------------------------------
use Moose;
use namespace::autoclean;

#------------------------------------------------------------------------------
# 加载项目模块
#------------------------------------------------------------------------------
use Firewall::Utils::Date;

has commandText => ( is => 'ro', isa => 'ArrayRef[Str]', default => sub { [] }, );

sub addToCommandText {
  my ( $self, @commands ) = @_;
  push( @{$self->commandText}, @commands );
}

sub design {
  my ( $self, $designReport ) = @_;
  if ( $designReport->{clearSrv} ) {

    #清理ip加port的策略
    return $self->design2($designReport);
  }
  else {

    #清理ip的所有策略
    return $self->design1($designReport);
  }
}

sub design1 {
  my ( $self, $designReport ) = @_;
  my $rules = $designReport->{rule};
  my @commandStr;
  for my $rule ( @{$rules} ) {

    if ( ref($rule) eq 'HASH' and defined $rule->{policyId} ) {
      if ( $rule->{memberCounter} == 1 ) {
        push @commandStr, "unset policy id $rule->{policyId}";
      }
      else {
        my $srcOrDstStr = $rule->{zone} eq $rule->{fromZone} ? "src-address" : "dst-address";
        my $comStr      = "set policy id $rule->{policyId}\n";
        $comStr .= "unset $srcOrDstStr $rule->{addrName}\n";
        $comStr .= "exit\n";
        push @commandStr, $comStr;
      }

    }
  } ## end for my $rule ( @{$rules...})

  my $realIpAndGroup = $designReport->{address}{realIp};
  if ( defined $realIpAndGroup ) {
    for my $addInfo ( values $realIpAndGroup ) {
      my $addName  = $addInfo->{name};
      my $zone     = $addInfo->{zone};
      my $addGroup = $addInfo->{addressGroup};
      if ( defined $addGroup ) {
        for my $gn ( keys $addGroup ) {
          push @commandStr, "unset group address $zone $addGroup remove $addName";

        }
      }

      push @commandStr, "unset address $zone $addName" if defined $addName;

    }
  }
  my $natIpAndGroup = $designReport->{address}{natIp};
  if ( defined $natIpAndGroup ) {



( run in 0.560 second using v1.01-cache-2.11-cpan-39bf76dae61 )