module MxHero::API class Directory attr_accessor :domain, :type, :address, :port, :ssl, :user, :password, :filter, :base, :next_update, :last_update, :error, :override, :dn_authenticate, :properties def initialize(data = {}) return if data.empty? [ :domain, [:type, :directoryType], [:address, :addres], :port, [:ssl, :sslFlag], :user, :password, :filter, :base, [:next_update, :nextUpdate], [:last_update, :lastUpdate], :error, [:override, :overrideFlag], [:dn_authenticate, :dnAuthenticate], :properties ].each do |property| case property when Symbol send "#{property}=", data[property] when Array send "#{property.first}=", data[property.first] || data[property.last] end end end def last_update=(date) parse_update_dates(:last_update, date) end def next_update=(date) parse_update_dates(:next_update, date) end def to_json { domain: domain, directoryType: type, addres: address, port: port, sslFlag: ssl, # || false, user: user, password: password, filter: filter, base: base, nextUpdate: next_update, # || DateTime.now.strftime('%Q'), lastUpdate: last_update, # || DateTime.now.strftime('%Q'), error: error, overrideFlag: override, #override.nil? ? true : override, dnAuthenticate: dn_authenticate, properties: properties || [] }.to_json end private def parse_update_dates(property, date) if date.is_a? Fixnum or date.is_a? String instance_variable_set "@#{property}", DateTime.strptime(date.to_s, '%Q') else instance_variable_set "@#{property}", date end end end class Directories include Communication include Urls attr_reader :domain def initialize(domain, config = {}) @domain = domain @service_url = config[:api_url] @username = config[:username] @password = config[:password] @verbose = config[:verbose] || false end # Fetch the directory information # # @return [MxHero::API::Directory | nil] the directory or nil when not exist. def fetch response = call(:get, directories_url) if (200..299).include? response.code hash = json_parse response.content return Directory.new hash end nil end # Create a directory configuration # # @return [MxHero::API::Response] that Directory created # In case on error, may be one of the following: # + domain.ldap.alredy.exists # def create(directory) directory.domain = domain response = call(:post, directories_url, directory.to_json, throw_exception: false) wrap_response_from response end # Update the directory configuration # # @return [MxHero::API::Response] that Directory updated # In case on error, may be one of the following: # + domain.ldap.not.found # def update(directory) directory.domain = domain response = call(:put, directories_url, directory.to_json, throw_exception: false) wrap_response_from response end # Delete the directory configuration # # @return [MxHero::API::Response] with content empty. # In case on error, may be one of the following: # + domain.ldap.not.found : Inexistent group def delete response = call(:delete, directories_url, throw_exception: false) wrap_response_from response end # ------------------------------------------------------------------------- private def wrap_response_from(response) content = (200..299).include?(response.code) ? directory_from(response) : json_parse(response.content) Response.new(response.status, content) end def directory_from(response) return nil if response.content.nil? || response.content.empty? hash = json_parse response.content Directory.new hash end def directories_url "http://test.mxhero.com/webapi/api/v1/domains/#{domain}/adldap" end end end