Sha256: 7ac6e7007c0118bd28f2ed8c60ba7430131805879d525c384de0077b4cadd231

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

require 'infrataster'
require 'net-ldap'

module Infrataster
  module Contexts
    class LdapContext < BaseContext

      def initialize(*args)
        @test_attr = {
          :cn => "test",
          :objectclass => [ "top", "structural" ]
        }
        super(*args)
      end

      def bind
        conn = connect(server)
        conn.bind
        return conn.get_operation_result
      end

      def add_result (dn = "cn=test,#{resource.basedn}", attr = @test_attr)
        conn = connect(server)
        conn.bind
        conn.add ({ :dn => dn, :attributes => attr })
        return conn.get_operation_result
      end

      def search_result (filter)
        conn = connect(server)
        conn.bind
        r = conn.search(
          :filter => filter,
          :base => resource.basedn
         )
         conn.get_operation_result
      end

      def connect (server)
        # Default options
        options = { port: 389,
                    username: '',
                    password: '',
                    basedn: 'dc=example,dc=com'
        }
        options = options.merge(server.options[:ldap]) if server.options[:ldap]

        server.forward_port(options[:port]) do |address, new_port|
          conn = Net::LDAP.new(
            :host => server.address,
            :port => new_port,
            :auth => {
              :method => :simple,
              :username => options[:username],
              :password => options[:password]
            }
          )
          return conn
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
infrataster-plugin-ldap-0.0.1 lib/infrataster/contexts/ldap_context.rb