cratus 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3b9d1523a8cf677c94486af757db8d9a5a47cc1
4
- data.tar.gz: 2117c80712931b5b6f3dbbf50168805fbde36022
3
+ metadata.gz: 03546e33c0cbcd721059db8bee9f197fc831b55c
4
+ data.tar.gz: 9880fb938e1a84cd89fc28d0f4d762a6b3d5371a
5
5
  SHA512:
6
- metadata.gz: 053d6b9673cf6cb84b1e7f65d2a95e58a821aec6f2d6864df34b7d7789e1a7e3c07b0f2f4d98cb778dd65852c0aafd8c60633bf1aff5f0b55adc16d96a019031
7
- data.tar.gz: 38ad9ac3ad5ed03b117f4bfca4b0ed4c2d78a9cebd3c04bae3fb6e6ad1312891227c943552ac4068529dded2b7eb8939eb2fa7896fa619e70d8a555b7fe88abd
6
+ metadata.gz: 0aeb98394522da853724b82fda06d2a429185c29115cb0b74f275362cc8ad738902a144dcf1da5861fc970f012309915927a76c3dee9da5771d160c3d4ce927c
7
+ data.tar.gz: 80ecee4931f58e86b5cb497d1a34ac0699b9738f65f4734b4217b29273273f9f924af8a0968ba31696394d2d80f03b8eb50da28037498f7706835fea4805d1ae
@@ -12,3 +12,4 @@ Cratus.config.load
12
12
  require 'cratus/ldap'
13
13
  require 'cratus/group'
14
14
  require 'cratus/user'
15
+ require 'cratus/exceptions/failed_ldap_search'
@@ -23,6 +23,7 @@ module Cratus
23
23
  all_members[:groups]
24
24
  end
25
25
 
26
+ # Recursively determine group memberships of a group
26
27
  def member_of
27
28
  memrof_attr = Cratus.config.group_memberof_attribute
28
29
 
@@ -48,16 +49,49 @@ module Cratus
48
49
  all_the_groups.uniq(&:name)
49
50
  end
50
51
 
52
+ # Returns the LDAP dn for a Group
53
+ def dn
54
+ @raw_ldap_data[:dn].last
55
+ end
56
+
51
57
  # LDAP description attribute
52
58
  def description
53
59
  @raw_ldap_data[Cratus.config.group_description_attribute].last
54
60
  end
55
61
 
62
+ # Add a User to the group
63
+ def add_user(user)
64
+ raise 'InvalidUser' unless user.respond_to?(:dn)
65
+ direct_members = @raw_ldap_data[Cratus.config.group_member_attribute]
66
+ return true if direct_members.include?(user.dn)
67
+
68
+ direct_members << user.dn
69
+ Cratus::LDAP.replace_attribute(
70
+ dn,
71
+ Cratus.config.group_member_attribute,
72
+ direct_members.uniq
73
+ )
74
+ end
75
+
76
+ # Remove a User from the group
77
+ def remove_user(user)
78
+ raise 'InvalidUser' unless user.respond_to?(:dn)
79
+ direct_members = @raw_ldap_data[Cratus.config.group_member_attribute]
80
+ return true unless direct_members.include?(user.dn)
81
+
82
+ direct_members.delete(user.dn)
83
+ Cratus::LDAP.replace_attribute(
84
+ dn,
85
+ Cratus.config.group_member_attribute,
86
+ direct_members.uniq
87
+ )
88
+ end
89
+
56
90
  # All the LDAP Groups
57
91
  def self.all
58
92
  filter = "(#{ldap_dn_attribute}=*)"
59
93
  Cratus::LDAP.search(filter, basedn: ldap_search_base, attrs: ldap_dn_attribute).map do |entry|
60
- new(entry[ldap_dn_attribute].last)
94
+ new(entry[ldap_dn_attribute.to_sym].last)
61
95
  end
62
96
  end
63
97
 
@@ -82,6 +116,8 @@ module Cratus
82
116
  Cratus.config.group_basedn.to_s
83
117
  end
84
118
 
119
+ # Compare based on the group's name
120
+ # TODO: possibly change to dn
85
121
  def <=>(other)
86
122
  @name <=> other.name
87
123
  end
@@ -58,7 +58,16 @@ module Cratus
58
58
  base: options[:basedn], filter: filter,
59
59
  scope: scope_class, attributes: [*attrs].map(&:to_s)
60
60
  )
61
- results.nil? ? raise('Search Failed') : results.compact
61
+ results.nil? ? raise(Exceptions::FailedLDAPSearch) : results.compact
62
+ end
63
+
64
+ # Modify an LDAP object's attribute
65
+ def self.replace_attribute(dn, attribute, values)
66
+ validate_ldap_connection
67
+ validate_ldap_bound
68
+ validate_attribute_values(values)
69
+
70
+ connection.replace_attribute(dn, attribute, values)
62
71
  end
63
72
 
64
73
  # Validation Methods
@@ -79,10 +88,14 @@ module Cratus
79
88
  end
80
89
  end
81
90
 
91
+ def self.validate_attribute_values(values)
92
+ raise 'Values Must Be Array' unless values.is_a?(Array)
93
+ end
94
+
82
95
  def self.validate_connection_options(options)
83
96
  raise 'Invalid Options' unless options.respond_to?(:key?)
84
97
 
85
- [:host, :port, :basedn, :username, :password].each do |key|
98
+ %i[host port basedn username password].each do |key|
86
99
  raise "Missing Option: #{key}" unless options.key?(key)
87
100
  end
88
101
  end
@@ -14,6 +14,20 @@ module Cratus
14
14
  ).last
15
15
  end
16
16
 
17
+ # Add a user to a group
18
+ def add_to_group(group)
19
+ raise 'InvalidGroup' unless group.respond_to?(:add_user)
20
+ # just be lazy and hand off to the group to do the work...
21
+ group.add_user(self)
22
+ end
23
+
24
+ # Remove a user from a group
25
+ def remove_from_group(group)
26
+ raise 'InvalidGroup' unless group.respond_to?(:remove_user)
27
+ # just be lazy and hand off to the group to do the work...
28
+ group.remove_user(self)
29
+ end
30
+
17
31
  def department
18
32
  @raw_ldap_data[Cratus.config.user_department_attribute].last
19
33
  end
@@ -2,8 +2,8 @@
2
2
  module Cratus
3
3
  def self.version
4
4
  major = 0 # Breaking, incompatible releases
5
- minor = 3 # Compatible, but new features
6
- patch = 9 # Fixes to existing features
5
+ minor = 4 # Compatible, but new features
6
+ patch = 0 # Fixes to existing features
7
7
  [major, minor, patch].map(&:to_s).join('.')
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cratus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-20 00:00:00.000000000 Z
12
+ date: 2017-04-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize