Class: Adauth::AdObject
- Inherits:
-
Object
- Object
- Adauth::AdObject
- Defined in:
- lib/adauth/ad_object.rb
Overview
Active Directory Interface Object
Objects inherit from this class.
Provides all the common functions for Active Directory.
Direct Known Subclasses
Adauth::AdObjects::Computer, Adauth::AdObjects::Folder, Adauth::AdObjects::Group, Adauth::AdObjects::OU, Adauth::AdObjects::User
Class Method Summary collapse
-
.add_object_filter(filter) ⇒ Object
Adds the object filter to the passed filter.
-
.all ⇒ Object
Returns all objects which have the ObjectClass of the inherited class.
-
.filter(filter) ⇒ Object
Returns all LDAP objects that match the given filter.
-
.where(field, value) ⇒ Object
Returns all the objects which match the supplied query.
Instance Method Summary collapse
-
#cn_groups_nested ⇒ Object
The same as cn_groups, but with the parent groups included.
-
#dn_ous ⇒ Object
CSV Version of the ous list (can’t be pulled over from AD).
-
#groups ⇒ Object
Returns all the groups the object is a member of.
-
#handle_field(field) ⇒ Object
Handle the output for the given field.
-
#initialize(ldap_object) ⇒ AdObject
constructor
Creates a new instance of the object and sets @ldap_object to the passed Net::LDAP entity.
-
#is_a_member?(parent) ⇒ Boolean
Checks to see if the object is a member of a given parent (though DN).
-
#ldap_object ⇒ Object
Allows direct access to @ldap_object.
-
#members ⇒ Object
Returns an array of member objects for this object.
-
#method_missing(method, *args) ⇒ Object
Over ride method missing to see if the object has a field by that name.
-
#modify(operations) ⇒ Object
Runs a modify action on the current object, takes an aray of operations.
-
#ous ⇒ Object
Returns all the ous the object is in.
Constructor Details
#initialize(ldap_object) ⇒ AdObject
Creates a new instance of the object and sets @ldap_object to the passed Net::LDAP entity
56 57 58 |
# File 'lib/adauth/ad_object.rb', line 56 def initialize(ldap_object) @ldap_object = ldap_object end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
Over ride method missing to see if the object has a field by that name
66 67 68 69 70 |
# File 'lib/adauth/ad_object.rb', line 66 def method_missing(method, *args) field = self.class::Fields[method] return handle_field(field) if field return super end |
Class Method Details
.add_object_filter(filter) ⇒ Object
Adds the object filter to the passed filter
51 52 53 |
# File 'lib/adauth/ad_object.rb', line 51 def self.add_object_filter(filter) filter & self::ObjectFilter end |
.all ⇒ Object
Returns all objects which have the ObjectClass of the inherited class
19 20 21 22 |
# File 'lib/adauth/ad_object.rb', line 19 def self.all Adauth.logger.info(self.class.inspect) { "Searching for all objects matching filter \"#{self::ObjectFilter}\"" } self.filter(self::ObjectFilter) end |
.filter(filter) ⇒ Object
Returns all LDAP objects that match the given filter
Use with add_object_filter to make sure that you only get objects that match the object you are querying though
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/adauth/ad_object.rb', line 36 def self.filter(filter) results = [] result = Adauth.connection.search(:filter => filter) raise 'Search returned NIL' if result == nil result.each do |entry| results << self.new(entry) end results end |
.where(field, value) ⇒ Object
Returns all the objects which match the supplied query
Uses ObjectFilter to restrict to the current object
27 28 29 30 31 |
# File 'lib/adauth/ad_object.rb', line 27 def self.where(field, value) search_filter = Net::LDAP::Filter.eq(field, value) Adauth.logger.info(self.class.inspect) { "Searching for all \"#{self::ObjectFilter}\" where #{field} = #{value}" } filter(add_object_filter(search_filter)) end |
Instance Method Details
#cn_groups_nested ⇒ Object
The same as cn_groups, but with the parent groups included
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/adauth/ad_object.rb', line 89 def cn_groups_nested @cn_groups_nested = cn_groups cn_groups.each do |group| ado = Adauth::AdObjects::Group.where('name', group).first groups = convert_to_objects ado.cn_groups groups.each do |g| @cn_groups_nested.push g if !(@cn_groups_nested.include?(g)) end end return @cn_groups_nested end |
#dn_ous ⇒ Object
CSV Version of the ous list (can’t be pulled over from AD)
113 114 115 116 117 118 119 120 121 |
# File 'lib/adauth/ad_object.rb', line 113 def dn_ous unless @dn_ous @dn_ous = [] @ldap_object.dn.split(/,/).each do |entry| @dn_ous.push entry.gsub(/OU=/, '').gsub(/CN=/,'') if entry =~ /OU=/ or entry == "CN=Users" end end @dn_ous end |
#groups ⇒ Object
Returns all the groups the object is a member of
81 82 83 84 85 86 |
# File 'lib/adauth/ad_object.rb', line 81 def groups unless @groups @groups = convert_to_objects(cn_groups) end @groups end |
#handle_field(field) ⇒ Object
Handle the output for the given field
73 74 75 76 77 78 |
# File 'lib/adauth/ad_object.rb', line 73 def handle_field(field) case field when Symbol then return return_symbol_value(field) when Array then return @ldap_object.send(field.first).collect(&field.last) end end |
#is_a_member?(parent) ⇒ Boolean
Checks to see if the object is a member of a given parent (though DN)
146 147 148 149 150 151 152 153 |
# File 'lib/adauth/ad_object.rb', line 146 def is_a_member?(parent) my_split_dn = @ldap_object.dn.split(",") parent_split_dn = parent.ldap_object.dn.split(",") if (my_split_dn.count - 1) == parent_split_dn.count return true if my_split_dn[1] == parent_split_dn[0] end return false end |
#ldap_object ⇒ Object
Allows direct access to @ldap_object
61 62 63 |
# File 'lib/adauth/ad_object.rb', line 61 def ldap_object @ldap_object end |
#members ⇒ Object
Returns an array of member objects for this object
133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/adauth/ad_object.rb', line 133 def members unless @members @members = [] [Adauth::AdObjects::Computer, Adauth::AdObjects::OU, Adauth::AdObjects::User, Adauth::AdObjects::Group].each do |object| object.all.each do |entity| @members.push entity if entity.is_a_member?(self) end end end @members end |
#modify(operations) ⇒ Object
Runs a modify action on the current object, takes an aray of operations
124 125 126 127 128 129 130 |
# File 'lib/adauth/ad_object.rb', line 124 def modify(operations) Adauth.logger.info(self.class.inspect) { "Attempting modify operation" } unless Adauth.connection.modify :dn => @ldap_object.dn, :operations => operations Adauth.logger.fatal(self.class.inspect) { "Modify Operation Failed! Code: #{Adauth.connection.get_operation_result.code} Message: #{Adauth.connection.get_operation_result.}" } raise 'Modify Operation Failed (see log for details)' end end |
#ous ⇒ Object
Returns all the ous the object is in
102 103 104 105 106 107 108 109 110 |
# File 'lib/adauth/ad_object.rb', line 102 def ous unless @ous @ous = [] @ldap_object.dn.split(/,/).each do |entry| @ous.push Adauth::AdObjects::OU.where('name', entry.gsub(/OU=/, '')).first if entry =~ /OU=/ end end @ous end |