Module ActiveLdap::Validations
In: lib/active_ldap/validations.rb
Error AttributeAssignmentError AdapterNotSpecified OperationNotPermitted RequiredObjectClassMissed ConnectionError RequiredAttributeMissed LdifInvalid LdapError DistinguishedNameNotSetError EntryNotFound SaveError StrongAuthenticationRequired AdapterNotFound TimeoutError AuthenticationError AttributeValueInvalid EntryNotSaved DistinguishedNameInputInvalid EntryAlreadyExist ObjectClassError UnknownAttribute EntryInvalid DeleteError ConfigurationError ConnectionNotSetup DistinguishedNameInvalid Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] DistinguishedName Base Reloadable::Deprecated Reloadable::Subclasses Enumerable Ldif Collection EntryAttribute StandardError Children HasManyWrap HasMany BelongsToMany Proxy BelongsTo Common Find LDIF Delete Update Normalizable GetText Parser ActiveRecord::Callbacks ActiveRecord::Validations Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/jndi.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Jndi Ldap NetLdap GetTextSupport Xml JndiConnection lib/active_ldap/distinguished_name.rb lib/active_ldap/base.rb lib/active_ldap/xml.rb lib/active_ldap/schema.rb lib/active_ldap/entry_attribute.rb lib/active_ldap/ldif.rb lib/active_ldap/ldap_error.rb Compatible ClassMethods Associations LdapBenchmarking ActionController Populate lib/active_ldap/association/has_many_wrap.rb lib/active_ldap/association/children.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/proxy.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb lib/active_ldap/association/has_many.rb HasManyUtils Association ClassMethods Tree Acts Command Update Common ModifyNameRecordLoadable AddOperationModifiable DeleteOperationModifiable ReplaceOperationModifiable ModifyRecordLoadable DeleteRecordLoadable AddRecordLoadable ContentRecordLoadable LDIF Delete Find Operations GetTextSupport Escape ClassMethods Normalizable Attributes ClassMethods Configuration ClassMethods ObjectClass lib/active_ldap/get_text/parser.rb GetText ClassMethods Callbacks Validations lib/active_ldap/adapter/jndi_connection.rb lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb lib/active_ldap/adapter/jndi.rb Adapter Helper GetTextFallback ClassMethods HumanReadable Salt UserPassword ClassMethods Connection ActiveLdap dot/m_46_0.png

Methods

Included Modules

ActiveRecord::Validations

External Aliases

human_attribute_name -> human_attribute_name_active_ldap
human_attribute_name -> human_attribute_name_active_record
human_attribute_name_active_ldap -> human_attribute_name

Public Class methods

[Source]

    # File lib/active_ldap/validations.rb, line 3
 3:     def self.append_features(base)
 4:       super
 5: 
 6:       base.class_eval do
 7:         alias_method :new_record?, :new_entry?
 8:         class << self
 9:           alias_method :human_attribute_name_active_ldap,
10:                        :human_attribute_name
11:         end
12:         include ActiveRecord::Validations
13:         class << self
14:           alias_method :human_attribute_name_active_record,
15:                        :human_attribute_name
16:           alias_method :human_attribute_name,
17:                        :human_attribute_name_active_ldap
18:           unless method_defined?(:human_attribute_name_with_gettext)
19:             def human_attribute_name_with_gettext(attribute_key_name)
20:               s_("#{self}|#{attribute_key_name.humanize}")
21:             end
22:           end
23:         end
24: 
25:         # Workaround for GetText's ugly implementation
26:         begin
27:           instance_method(:save_without_validation)
28:         rescue NameError
29:           alias_method_chain :save, :validation
30:           alias_method_chain :save!, :validation
31:           alias_method_chain :update_attribute, :validation_skipping
32:         end
33: 
34:         validate_on_create :validate_duplicated_dn_creation
35:         validate :validate_dn
36:         validate :validate_excluded_classes
37:         validate :validate_required_ldap_values
38:         validate :validate_ldap_values
39: 
40:         class << self
41:           if method_defined?(:evaluate_condition)
42:             def evaluate_condition_with_active_ldap_support(condition, entry)
43:               evaluate_condition_without_active_ldap_support(condition, entry)
44:             rescue ActiveRecord::ActiveRecordError
45:               raise Error, $!.message
46:             end
47:             alias_method_chain :evaluate_condition, :active_ldap_support
48:           end
49:         end
50: 
51:         def save_with_active_ldap_support!
52:           save_without_active_ldap_support!
53:         rescue ActiveRecord::RecordInvalid
54:           raise EntryInvalid, $!.message
55:         end
56:         alias_method_chain :save!, :active_ldap_support
57: 
58:         private
59:         def run_validations_with_active_ldap_support(validation_method)
60:           run_validations_without_active_ldap_support(validation_method)
61:         rescue ActiveRecord::ActiveRecordError
62:           raise Error, $!.message
63:         end
64:         if private_method_defined?(:run_validations)
65:           alias_method_chain :run_validations, :active_ldap_support
66:         else
67:           alias_method(:run_callbacks_with_active_ldap_support,
68:                        :run_validations_with_active_ldap_support)
69:           alias_method_chain :run_callbacks, :active_ldap_support
70:           alias_method(:run_validations_without_active_ldap_support,
71:                        :run_callbacks_without_active_ldap_support)
72:         end
73:       end
74:     end

[Source]

    # File lib/active_ldap/validations.rb, line 42
42:             def evaluate_condition_with_active_ldap_support(condition, entry)
43:               evaluate_condition_without_active_ldap_support(condition, entry)
44:             rescue ActiveRecord::ActiveRecordError
45:               raise Error, $!.message
46:             end

[Source]

    # File lib/active_ldap/validations.rb, line 19
19:             def human_attribute_name_with_gettext(attribute_key_name)
20:               s_("#{self}|#{attribute_key_name.humanize}")
21:             end

Public Instance methods

[Source]

    # File lib/active_ldap/validations.rb, line 59
59:         def run_validations_with_active_ldap_support(validation_method)
60:           run_validations_without_active_ldap_support(validation_method)
61:         rescue ActiveRecord::ActiveRecordError
62:           raise Error, $!.message
63:         end

[Source]

    # File lib/active_ldap/validations.rb, line 51
51:         def save_with_active_ldap_support!
52:           save_without_active_ldap_support!
53:         rescue ActiveRecord::RecordInvalid
54:           raise EntryInvalid, $!.message
55:         end

Private Instance methods

[Source]

     # File lib/active_ldap/validations.rb, line 93
 93:     def validate_dn
 94:       dn
 95:     rescue DistinguishedNameInvalid
 96:       format = _("%{fn} is invalid: %s")
 97:       format = format.sub(/^%\{fn\} /, '') unless ActiveLdap.get_text_supported?
 98:       errors.add("dn", format % $!.message)
 99:     rescue DistinguishedNameNotSetError
100:       format = _("%{fn} isn't set: %s")
101:       format = format.sub(/^%\{fn\} /, '') unless ActiveLdap.get_text_supported?
102:       errors.add("dn", format % $!.message)
103:     end

[Source]

    # File lib/active_ldap/validations.rb, line 77
77:     def validate_duplicated_dn_creation
78:       _dn = nil
79:       begin
80:         _dn = dn
81:       rescue DistinguishedNameInvalid, DistinguishedNameNotSetError
82:         return
83:       end
84:       if _dn and exist?
85:         format = _("%{fn} is duplicated: %s")
86:         unless ActiveLdap.get_text_supported?
87:           format = format.sub(/^%\{fn\} /, '')
88:         end
89:         errors.add("dn", format % _dn)
90:       end
91:     end

[Source]

     # File lib/active_ldap/validations.rb, line 105
105:     def validate_excluded_classes
106:       return if self.class.excluded_classes.empty?
107: 
108:       _schema = schema
109:       unexpected_classes = self.class.excluded_classes.collect do |name|
110:         _schema.object_class(name)
111:       end
112:       unexpected_classes -= classes.collect do |name|
113:         _schema.object_class(name)
114:       end
115:       return if unexpected_classes.empty?
116: 
117:       names = unexpected_classes.collect do |object_class|
118:         self.class.human_object_class_name(object_class)
119:       end
120:       format = n_("%{fn} has excluded value: %s",
121:                   "%{fn} has excluded values: %s",
122:                   names.size)
123:       format = format.sub(/^%\{fn\} /, '') unless ActiveLdap.get_text_supported?
124:       errors.add("objectClass", format % names.join(", "))
125:     end

[Source]

     # File lib/active_ldap/validations.rb, line 174
174:     def validate_ldap_value(attribute, name, value)
175:       failed_reason, option = attribute.validate(value)
176:       return if failed_reason.nil?
177:       params = [self.class.human_readable_format(value),
178:                 self.class.human_syntax_description(attribute.syntax),
179:                 failed_reason]
180:       if option
181:         format = _("%{fn}(%s) has invalid format: %s: required syntax: %s: %s")
182:       else
183:         format = _("%{fn} has invalid format: %s: required syntax: %s: %s")
184:       end
185:       params.unshift(option) if option
186:       unless ActiveLdap.get_text_supported?
187:         format = format.sub(/^%\{fn\} ?/, '')
188:       end
189:       errors.add(name, format % params)
190:     end

[Source]

     # File lib/active_ldap/validations.rb, line 166
166:     def validate_ldap_values
167:       entry_attribute.schemata.each do |name, attribute|
168:         value = self[name]
169:         next if self.class.blank_value?(value)
170:         validate_ldap_value(attribute, name, value)
171:       end
172:     end

validate_required_ldap_values

Basic validation:

  • Verify that every ‘MUST’ specified in the schema has a value defined

[Source]

     # File lib/active_ldap/validations.rb, line 131
131:     def validate_required_ldap_values
132:       _schema = nil
133:       # Make sure all MUST attributes have a value
134:       entry_attribute.object_classes.each do |object_class|
135:         object_class.must.each do |required_attribute|
136:           # Normalize to ensure we catch schema problems
137:           # needed?
138:           real_name = to_real_attribute_name(required_attribute.name, true)
139:           raise UnknownAttribute.new(required_attribute) if real_name.nil?
140: 
141:           next if required_attribute.read_only?
142: 
143:           value = @data[real_name] || []
144:           next unless self.class.blank_value?(value)
145: 
146:           _schema ||= schema
147:           aliases = required_attribute.aliases.collect do |name|
148:             self.class.human_attribute_name(name)
149:           end
150:           args = [self.class.human_object_class_name(object_class)]
151:           if aliases.empty?
152:             format = _("%{fn} is required attribute by objectClass '%s'")
153:           else
154:             format = _("%{fn} is required attribute by objectClass " \
155:                        "'%s': aliases: %s")
156:             args << aliases.join(', ')
157:           end
158:           unless ActiveLdap.get_text_supported?
159:             format = format.sub(/^%\{fn\} /, '')
160:           end
161:           errors.add(real_name, format % args)
162:         end
163:       end
164:     end

[Validate]