Sha256: d45e4d87119de23445f468174c294254b8251fd163bde0df4fa7f9014632182f

Contents?: true

Size: 1.83 KB

Versions: 12

Compression:

Stored size: 1.83 KB

Contents

module Fog
  module Bouncer
    module IPPermissions
      def self.from(protocols, options = {})
        permissions = []

        protocols.each do |protocol|
          next if (options[:remote_only] && protocol.local?) ||
                  (options[:local_only] && protocol.remote?)

          source = protocol.source
          permission = permissions.find { |permission| permission["IpProtocol"] == protocol.type && permission["FromPort"] == protocol.from && permission["ToPort"] == protocol.to }

          if permission.nil?
            permission = { "Groups" => [], "IpRanges" => [], "IpProtocol" => protocol.type, "FromPort" => protocol.from, "ToPort" => protocol.to }
            permissions << permission
          end

          if source.is_a?(Fog::Bouncer::Sources::CIDR)
            permission["IpRanges"] << { "CidrIp" => source.range }
          else
            permission["Groups"] << { "UserId" => source.user_id, "GroupName" => source.name }
          end
        end

        permissions
      end

      def self.to(group, permissions)
        permissions.each do |permission|
          remote_sources = []
          remote_sources = remote_sources | permission["groups"].collect { |group| "#{group["groupName"]}@#{group["userId"]}" }
          remote_sources = remote_sources | permission["ipRanges"].collect { |range| range["cidrIp"] }
          remote_sources.each do |remote_source|
            source = group.sources.find { |s| s.match(remote_source) }

            if source.nil?
              source = Sources.for(remote_source, group)
              group.sources << source
            end

            source.remote = true

            protocol = source.add_protocol(permission["ipProtocol"], Range.new(permission["fromPort"], permission["toPort"]))
            protocol.remote = true
          end
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
fog-bouncer-0.2.7 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.6 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.5 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.4 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.3 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.2 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.1 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.2.0 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.1.1 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.1.0 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.0.8 lib/fog/bouncer/ip_permissions.rb
fog-bouncer-0.0.6 lib/fog/bouncer/ip_permissions.rb