lib/cratus/user.rb in cratus-0.4.0 vs lib/cratus/user.rb in cratus-0.5.0
- old
+ new
@@ -5,15 +5,11 @@
attr_reader :username, :search_base
def initialize(username)
@username = username
@search_base = self.class.ldap_search_base
- @raw_ldap_data = Cratus::LDAP.search(
- "(#{self.class.ldap_dn_attribute}=#{@username})",
- basedn: @search_base,
- attrs: self.class.ldap_return_attributes
- ).last
+ refresh
end
# Add a user to a group
def add_to_group(group)
raise 'InvalidGroup' unless group.respond_to?(:add_user)
@@ -30,18 +26,56 @@
def department
@raw_ldap_data[Cratus.config.user_department_attribute].last
end
+ # Disables an enabled user
+ def disable
+ if enabled?
+ Cratus::LDAP.replace_attribute(
+ dn,
+ Cratus.config.user_account_control_attribute,
+ ['514']
+ )
+ refresh
+ else
+ true
+ end
+ end
+
+ def disabled?
+ status = @raw_ldap_data[Cratus.config.user_account_control_attribute].last
+ status.to_s == '514'
+ end
+
def dn
@raw_ldap_data[:dn].last
end
def email
@raw_ldap_data[Cratus.config.user_mail_attribute].last
end
+ # Enables a disabled user
+ def enable
+ if disabled?
+ Cratus::LDAP.replace_attribute(
+ dn,
+ Cratus.config.user_account_control_attribute,
+ ['512']
+ )
+ refresh
+ else
+ true
+ end
+ end
+
+ def enabled?
+ status = @raw_ldap_data[Cratus.config.user_account_control_attribute].last
+ status.to_s == '512'
+ end
+
def fullname
@raw_ldap_data[Cratus.config.user_displayname_attribute].last
end
def lockouttime
@@ -88,10 +122,36 @@
all_the_groups.uniq(&:name)
end
alias groups member_of
+ def refresh
+ @raw_ldap_data = Cratus::LDAP.search(
+ "(#{self.class.ldap_dn_attribute}=#{@username})",
+ basedn: @search_base,
+ attrs: self.class.ldap_return_attributes
+ ).last
+ end
+
+ # Unlocks a user
+ # @return `true` on success (or if user is already unlocked)
+ # @return `false` when the account is disabled (unlocking not permitted)
+ def unlock
+ if locked? && enabled?
+ Cratus::LDAP.replace_attribute(
+ dn,
+ Cratus.config.user_lockout_attribute,
+ ['0']
+ )
+ refresh
+ elsif disabled?
+ false
+ else
+ true
+ end
+ end
+
def <=>(other)
@username <=> other.username
end
# All the LDAP Users
@@ -119,10 +179,11 @@
Cratus.config.user_dn_attribute.to_s,
Cratus.config.user_department_attribute.to_s,
Cratus.config.user_mail_attribute.to_s,
Cratus.config.user_displayname_attribute.to_s,
Cratus.config.user_memberof_attribute.to_s,
- Cratus.config.user_lockout_attribute.to_s
+ Cratus.config.user_lockout_attribute.to_s,
+ Cratus.config.user_account_control_attribute.to_s
]
end
def self.ldap_search_base
Cratus.config.user_basedn.to_s