Sha256: 6e1b2f7debb85136f43d4460c1c5be03c8d9ffc511aeddb91395cb8f24ec4f2a

Contents?: true

Size: 1.79 KB

Versions: 11

Compression:

Stored size: 1.79 KB

Contents

require 'set'
require 'forwardable'
require_relative 'ip_permission.rb'

class SecurityGroups
  include Enumerable

  def initialize(provider, config)
    @groups = provider.security_groups
    @config = config
  end

  def each(&block)
    groups = @groups.select { |sg| !@config.exclusions.match(sg.name) }
    groups.each { |group|
      if block_given?
        block.call SecurityGroup.new(@groups, group, @config)
      else
        yield SecurityGroup.new(@groups, group, @config)
      end
    }
  end

  def size
    @groups.size
  end
end

class SecurityGroup
  extend Forwardable

  def_delegator :@group, :name

  def initialize(all_groups, group, config)
    @all_groups = all_groups
    @group = group
    @config = config
  end

  def permissions
    ingress_permissions = @group.ip_permissions.collect { |ip|
      IpPermission.new(@group, ip, true, @config.exclusions)
    }
    egress_permissions = @group.ip_permissions_egress.collect { |ip|
      IpPermission.new(@group, ip, false, @config.exclusions)
    }
    ingress_permissions + egress_permissions
  end

  def traffic
    all_traffic = permissions.collect { |permission|
      permission.traffic
    }.flatten.uniq
    CidrGroupMapping.new(@all_groups, @config.groups).map(all_traffic)
  end
end

class CidrGroupMapping
  def initialize(all_groups, user_groups)
    @all_groups = all_groups
    @user_groups = user_groups
  end

  def map(all_traffic)
    traffic = all_traffic.collect { |traffic|
      traffic.copy(mapping(traffic.from), mapping(traffic.to))
    }
    traffic.uniq.group_by {|t| [t.from, t.to, t.ingress]}.collect {|k,v| Traffic.grouped(v)}.uniq
  end

  private
  def mapping(val)
    group = @all_groups.find { |g| g.group_id == val }
    name = group.nil? ? val : group.name
    @user_groups[name] ? @user_groups[name] : name
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
aws_security_viz-0.1.3.pre.alpha.pre.68 lib/ec2/security_groups.rb
aws_security_viz-0.1.3.pre.alpha.pre.64 lib/ec2/security_groups.rb
aws_security_viz-0.1.3.pre.alpha.pre.63 lib/ec2/security_groups.rb
aws_security_viz-0.1.2 lib/ec2/security_groups.rb
aws_security_viz-0.1.2.pre.alpha.pre.61 lib/ec2/security_groups.rb
aws_security_viz-0.1.2.pre.alpha.pre.60 lib/ec2/security_groups.rb
aws_security_viz-0.1.2.pre.alpha.pre.59 lib/ec2/security_groups.rb
aws_security_viz-0.1.2.pre.alpha.pre.58 lib/ec2/security_groups.rb
aws_security_viz-0.1.1 lib/ec2/security_groups.rb
aws_security_viz-0.1.1.pre.alpha.pre.56 lib/ec2/security_groups.rb
aws_security_viz-0.1.0 lib/ec2/security_groups.rb