ldap_tools 0.8.0 → 0.8.1

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: c580acd38fa44077ad2175af8c7525b25c22dfcd
4
- data.tar.gz: 9002e5285f2eb0964a53e587b757cbf60492392c
3
+ metadata.gz: fb5a40099b907acf70a59b0b522fdc27b6bf07de
4
+ data.tar.gz: 31070ab008f94eb5251247a43429edac810afc87
5
5
  SHA512:
6
- metadata.gz: 372a3e9e8013fe642ddbcfbceb1f1dead4a0e68874f7b968e6957bca2709697ad0fc7d303a6730cdde21216b536a596c5f17ccd83983e49712d1b664f75fad12
7
- data.tar.gz: d3662bc277bd26599a19dba670f96c261c55ddf617b93196f68762836c75ed4e190162e54088a1d810b2aa138bf00ddf997cc90e6e7fdf6cba3b8a697e1a746a
6
+ metadata.gz: d1bd83b23b788f86d3b13bd5bb337de356b697685b700e98bd058a6dc8de71aa48180544321aaa31457167994565b4b01ce69e13c9c06e52ea8043e9890f12ac
7
+ data.tar.gz: 6e39d5db0f86fa1faf48679f8d444141a1e1a5fdd68e6ae682b0522d264b60c839f7a3dd82aeb103959eed8ec6ab4f5bb14e5db318e06f40791653d82cd3de37
@@ -0,0 +1,75 @@
1
+ require 'memoist'
2
+ module Tapjoy::LDAP::API
3
+ # API methods for managing LDAP Groups
4
+ module Group
5
+ class << self
6
+ extend Memoist
7
+ def create(group_name, group_type)
8
+ Tapjoy::LDAP.client.add(
9
+ distinguished_name(group_name),
10
+ ldap_attr(group_name, group_type)
11
+ )
12
+ end
13
+
14
+ def destroy(group_name)
15
+ Tapjoy::LDAP.client.delete(distinguished_name(group_name))
16
+ end
17
+
18
+ def update(group_name, username, operation)
19
+ Tapjoy::LDAP.client.modify(
20
+ distinguished_name(group_name),
21
+ [[operation, :memberUid, username]]
22
+ )
23
+ end
24
+
25
+ def index
26
+ Tapjoy::LDAP.client.search('*', group_object_class_filter)
27
+ end
28
+
29
+ # Lookup GID for the given group
30
+ def lookup_id(groupname)
31
+ gidnumber = []
32
+
33
+ cn_filter = Net::LDAP::Filter.eq('cn', groupname)
34
+ filter = Net::LDAP::Filter.join(
35
+ group_object_class_filter, cn_filter)
36
+
37
+ results = Tapjoy::LDAP.client.search(['gidNumber'], filter)
38
+
39
+ # Make sure we return one, and only one group
40
+ if results.size < 1
41
+ abort('Group not found')
42
+ elsif results.size > 1
43
+ abort('Multiple groups found. Please narrow your search.')
44
+ end
45
+
46
+ results.each { |result| gidnumber = result.gidnumber }
47
+ return gidnumber[0]
48
+ end
49
+
50
+ private
51
+
52
+ def group_object_class_filter
53
+ Net::LDAP::Filter.eq('objectClass', 'posixGroup')
54
+ end
55
+ memoize :group_object_class_filter
56
+
57
+ def distinguished_name(group_name)
58
+ %W(
59
+ cn=#{group_name}
60
+ ou=Group
61
+ #{Tapjoy::LDAP.client.basedn}).join(',')
62
+ end
63
+ memoize :distinguished_name
64
+
65
+ def ldap_attr(group_name, group_type)
66
+ {
67
+ cn: group_name,
68
+ objectclass: %w(top posixGroup),
69
+ gidnumber: Tapjoy::LDAP.client.get_max_id('group', group_type)
70
+ }
71
+ end
72
+ memoize :ldap_attr
73
+ end
74
+ end
75
+ end
@@ -9,24 +9,24 @@ module Tapjoy
9
9
  # Properly capitalize names
10
10
  fname, lname = [fname, lname].map(&:capitalize)
11
11
 
12
- Tapjoy::LDAP::client.add(
12
+ Tapjoy::LDAP.client.add(
13
13
  distinguished_name(fname, lname, type),
14
14
  ldap_attr(fname, lname, type, group)
15
15
  )
16
16
  end
17
17
 
18
18
  def destroy(username, type)
19
- Tapjoy::LDAP::client.delete(
19
+ Tapjoy::LDAP.client.delete(
20
20
  distinguished_name(*name_of_user(username), type)
21
21
  )
22
22
  end
23
23
 
24
24
  def index
25
- Tapjoy::LDAP::client.search('*', filter(uid: '*'))
25
+ Tapjoy::LDAP.client.search('*', filter(uid: '*'))
26
26
  end
27
27
 
28
28
  def show(username)
29
- Tapjoy::LDAP::client.search('*', filter(uid: username))
29
+ Tapjoy::LDAP.client.search('*', filter(uid: username))
30
30
  end
31
31
 
32
32
  private
@@ -52,7 +52,7 @@ module Tapjoy
52
52
  %W(
53
53
  uid=#{username(fname, lname)}
54
54
  ou=#{organizational_unit(type)}
55
- #{Tapjoy::LDAP::client.basedn}).join(',')
55
+ #{Tapjoy::LDAP.client.basedn}).join(',')
56
56
  end
57
57
  memoize :distinguished_name
58
58
 
@@ -61,7 +61,7 @@ module Tapjoy
61
61
  when 'user'
62
62
  'People'
63
63
  when 'service'
64
- Tapjoy::LDAP::client.service_ou
64
+ Tapjoy::LDAP.client.service_ou
65
65
  else
66
66
  puts 'Unknown type'
67
67
  end
@@ -89,12 +89,12 @@ module Tapjoy
89
89
  memoize :ldap_attr
90
90
 
91
91
  def uidnumber(type)
92
- Tapjoy::LDAP::client.get_max_id('user', type)
92
+ Tapjoy::LDAP.client.get_max_id('user', type)
93
93
  end
94
94
  memoize :uidnumber
95
95
 
96
96
  def gidnumber(group)
97
- Tapjoy::LDAP::Group.lookup_id(group)
97
+ Tapjoy::LDAP::API::Group.lookup_id(group)
98
98
  end
99
99
  memoize :gidnumber
100
100
 
@@ -32,7 +32,7 @@ module Tapjoy
32
32
  end
33
33
 
34
34
  def results
35
- @results ||= Tapjoy::LDAP::client.search(attributes, filter)
35
+ @results ||= Tapjoy::LDAP.client.search(attributes, filter)
36
36
  end
37
37
 
38
38
  def group_results
@@ -7,7 +7,7 @@ module Tapjoy
7
7
  SUB_COMMANDS = %w(by_user by_group raw)
8
8
 
9
9
  def commands
10
- Trollop::options do
10
+ Trollop.options do
11
11
  usage 'user [SUB_COMMAND] [options]'
12
12
  synopsis "\nThis object is used for auditing LDAP permissions\nAvailable subcommands are: #{SUB_COMMANDS}"
13
13
 
@@ -35,7 +35,7 @@ module Tapjoy
35
35
  end
36
36
 
37
37
  def raw
38
- puts Tapjoy::LDAP::client.search.inspect
38
+ puts Tapjoy::LDAP.client.search.inspect
39
39
  end
40
40
 
41
41
  # Get hash of groups with list of members of each group
@@ -43,7 +43,7 @@ module Tapjoy
43
43
  filter = Net::LDAP::Filter.eq('objectclass', 'posixGroup')
44
44
  attributes = %w(cn memberUid)
45
45
 
46
- results = Tapjoy::LDAP::client.search(attributes, filter)
46
+ results = Tapjoy::LDAP.client.search(attributes, filter)
47
47
  end
48
48
 
49
49
 
@@ -26,9 +26,9 @@ module Tapjoy
26
26
  filter = Net::LDAP::Filter.eq('objectclass','*'))
27
27
  @entries = []
28
28
  if @conn
29
- @conn.search :base => @basedn,
30
- :filter => filter,
31
- :attributes => attributes do |entry|
29
+ @conn.search base: @basedn,
30
+ filter: filter,
31
+ attributes: attributes do |entry|
32
32
  @entries.push(entry)
33
33
  end
34
34
  else
@@ -40,7 +40,7 @@ module Tapjoy
40
40
 
41
41
  # Add objects to LDAP
42
42
  def add(distinguished_name, attributes)
43
- @conn.add(:dn => distinguished_name, :attributes => attributes)
43
+ @conn.add(dn: distinguished_name, attributes: attributes)
44
44
  return return_result
45
45
  end
46
46
 
@@ -141,16 +141,12 @@ module Tapjoy
141
141
  def ldap_connect(host, ldap_password_file)
142
142
  port = @ldap_info['port']
143
143
  auth = {
144
- :method => :simple,
145
- :username => @ldap_info['rootdn'],
146
- :password => File.read(ldap_password_file).chomp
144
+ method: :simple,
145
+ username: @ldap_info['rootdn'],
146
+ password: File.read(ldap_password_file).chomp
147
147
  }
148
148
 
149
- ldap = Net::LDAP.new :host => host,
150
- :port => port,
151
- :base => @basedn,
152
- :auth => auth
153
- return ldap
149
+ Net::LDAP.new(host: host, port: port, base: @base, auth: auth)
154
150
  end
155
151
 
156
152
  # Find valid LDAP host
@@ -0,0 +1,28 @@
1
+ module Tapjoy
2
+ module LDAP
3
+ module CLI
4
+ module Group
5
+ # Add existing user to existing group
6
+ class AddUser
7
+ def add_user
8
+ puts Tapjoy::LDAP::API::Group.update(
9
+ opts[:group], opts[:username], :add)
10
+ end
11
+
12
+ private
13
+
14
+ def opts
15
+ @opts ||= Trollop.options do
16
+ # Set help message
17
+ usage 'group add_user [options]'
18
+ synopsis "\nThis command is for adding existing users to existing groups"
19
+
20
+ opt(:group, 'Specify group', type: :string, required: true)
21
+ opt(:username, 'Specify username', type: :string, required: true)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Tapjoy
2
+ module LDAP
3
+ module CLI
4
+ module Group
5
+ # Create LDAP group
6
+ class Create
7
+ def create
8
+ # Check for errors
9
+ Trollop.die :type, "argument must be 'user' or 'service'" unless ['user', 'service'].include?(opts[:type])
10
+
11
+ puts Tapjoy::LDAP::API::Group.create(opts[:name], opts[:type])
12
+ end
13
+
14
+ private def opts
15
+ @opts ||= Trollop.options do
16
+ # Set help message
17
+ usage 'group create [options]'
18
+ synopsis "\nThis command is for creating new LDAP groups"
19
+
20
+ opt :name, 'Specify group to create', type: :string, required: true
21
+ opt :type, 'Specfy if this is a user or service group', type: :string, default: 'user'
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ module Tapjoy
2
+ module LDAP
3
+ module CLI
4
+ module Group
5
+ # Delete LDAP group
6
+ class Delete
7
+ def delete
8
+ confirm unless opts[:force]
9
+ puts Tapjoy::LDAP::API::Group.destroy(opts[:name])
10
+ end
11
+
12
+ private
13
+
14
+ def opts
15
+ @opts ||= Trollop.options do
16
+ # Set help message
17
+ usage 'group delete [options]'
18
+ synopsis "\nThis command is for deleting LDAP groups"
19
+
20
+ opt :name, 'Specify group', type: :string, required: true
21
+ opt :force, 'Force delete'
22
+ end
23
+ end
24
+
25
+ def confirm
26
+ puts "Confirm that you want to delete group #{opts[:name]} (yes/no)"
27
+ print '>'
28
+ confirm = STDIN.gets.chomp.downcase
29
+ abort("Deletion of #{opts[:name]} aborted") unless confirm.start_with?('y')
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ module Tapjoy
2
+ module LDAP
3
+ module CLI
4
+ module Group
5
+ # Manipulates data to a format usable
6
+ # by the API structure for group display
7
+ class Index
8
+ # Make the API call to show an LDAP user
9
+ def index
10
+ Tapjoy::LDAP::API::Group.index.each do |entry|
11
+ puts "#{entry.cn.first}:\t#{entry.gidnumber.first}"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module Tapjoy
2
+ module LDAP
3
+ module CLI
4
+ module Group
5
+ # Remove existing user to existing group
6
+ class RemoveUser
7
+ def remove_user
8
+ confirm unless opts[:force]
9
+ puts Tapjoy::LDAP::API::Group.update(
10
+ opts[:group], opts[:username], :delete)
11
+ end
12
+
13
+ private
14
+
15
+ def opts
16
+ @opts ||= Trollop.options do
17
+ # Set help message
18
+ usage 'group remove_user [options]'
19
+ synopsis "\nThis command is for removing existing users from existing groups"
20
+
21
+ opt(:group, 'Specify group', type: :string, required: true)
22
+ opt(:username, 'Specify username', type: :string, required: true)
23
+ end
24
+ end
25
+
26
+ def confirm
27
+ puts "Confirm that you want to remove user #{opts[:username]} from group #{opts[:group]} (yes/no)"
28
+ print '>'
29
+ confirm = STDIN.gets.chomp.downcase
30
+ abort("Deletion of #{opts[:name]} aborted") unless confirm.start_with?('y')
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,65 @@
1
+ require_relative 'group/create'
2
+ require_relative 'group/delete'
3
+ require_relative 'group/add_user'
4
+ require_relative 'group/remove_user'
5
+ require_relative 'group/index'
6
+ require_relative '../api/group'
7
+
8
+ module Tapjoy
9
+ module LDAP
10
+ module CLI
11
+ # Entry point for all group subcommands
12
+ module Group
13
+ class << self
14
+
15
+ SUB_COMMANDS = %w(create delete add_user remove_user)
16
+
17
+ def commands
18
+ Trollop.options do
19
+ usage 'group [SUB_COMMAND] [options]'
20
+ synopsis "\nThis object is used for group management\nAvailable subcommands are: #{SUB_COMMANDS}"
21
+
22
+ stop_on SUB_COMMANDS
23
+ end
24
+
25
+ cmd = ARGV.shift
26
+
27
+ case cmd
28
+ when 'create', 'delete', 'add_user', 'remove_user', 'index'
29
+ send(cmd) # call method with respective name
30
+ else
31
+ raise Tapjoy::LDAP::InvalidArgument
32
+ end
33
+ end
34
+
35
+ # Create Group
36
+ def create
37
+ group = Tapjoy::LDAP::CLI::Group::Create.new
38
+ group.create
39
+ end
40
+
41
+ # Delete group
42
+ def delete
43
+ group = Tapjoy::LDAP::CLI::Group::Delete.new
44
+ group.delete
45
+ end
46
+
47
+ def add_user
48
+ group = Tapjoy::LDAP::CLI::Group::AddUser.new
49
+ group.add_user
50
+ end
51
+
52
+ def remove_user
53
+ group = Tapjoy::LDAP::CLI::Group::RemoveUser.new
54
+ group.remove_user
55
+ end
56
+
57
+ def index
58
+ group = Tapjoy::LDAP::CLI::Group::Index.new
59
+ group.index
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -15,7 +15,7 @@ module Tapjoy
15
15
 
16
16
  private
17
17
  def opts
18
- @opts ||= Trollop::options do
18
+ @opts ||= Trollop.options do
19
19
  # Set help message
20
20
  usage 'user create [options]'
21
21
  synopsis "\nThis command is for creating new LDAP users"
@@ -32,8 +32,8 @@ module Tapjoy
32
32
  end
33
33
 
34
34
  def verify_arguments
35
- Trollop::die :user, 'argument count must be two' if opts[:user].size != 2
36
- Trollop::die :type, "argument must be 'user' or 'service'" unless %w(user service).include?opts[:type]
35
+ Trollop.die :user, 'argument count must be two' if opts[:user].size != 2
36
+ Trollop.die :type, "argument must be 'user' or 'service'" unless %w(user service).include?(opts[:type])
37
37
  end
38
38
  end
39
39
  end
@@ -14,7 +14,7 @@ module Tapjoy
14
14
 
15
15
  private
16
16
  def opts
17
- @opts ||= Trollop::options do
17
+ @opts ||= Trollop.options do
18
18
  # Set help message
19
19
  usage "user delete [options]"
20
20
 
@@ -27,14 +27,12 @@ module Tapjoy
27
27
  def confirm
28
28
  puts "Confirm that you want to delete user: #{opts[:user]} (yes/no)"
29
29
  print '>'
30
- confirm = STDIN.gets.chomp().downcase
31
- unless confirm.eql?('y') || confirm.eql?('yes')
32
- abort("Deletion of #{ opts[:user] } aborted")
33
- end
30
+ confirm = STDIN.gets.chomp.downcase
31
+ abort("Deletion of #{opts[:user]} aborted") unless confirm.start_with?('y')
34
32
  end
35
33
 
36
34
  def verify_arguments
37
- Trollop::die :type, "argument must be 'user' or 'service'" unless %w(user service).include?opts[:type]
35
+ Trollop.die :type, "argument must be 'user' or 'service'" unless %w(user service).include?(opts[:type])
38
36
  end
39
37
  end
40
38
  end
@@ -20,7 +20,7 @@ module Tapjoy
20
20
 
21
21
  private
22
22
  def opts
23
- @opts ||= Trollop::options do
23
+ @opts ||= Trollop.options do
24
24
  # Set help message
25
25
  usage "user show [options]"
26
26
 
@@ -11,7 +11,7 @@ module Tapjoy
11
11
  SUB_COMMANDS = %w(create delete index show)
12
12
 
13
13
  def commands
14
- Trollop::options do
14
+ Trollop.options do
15
15
  usage 'user [SUB_COMMAND] [options]'
16
16
  synopsis "\nThis object is used for user management\nAvailable subcommands are: #{SUB_COMMANDS}"
17
17
 
@@ -1,4 +1,5 @@
1
1
  require_relative 'cli/user'
2
+ require_relative 'cli/group'
2
3
 
3
4
  module Tapjoy
4
5
  module LDAP
@@ -6,7 +7,7 @@ module Tapjoy
6
7
  class << self
7
8
  def commands
8
9
  subcommand = %w(user group key audit)
9
- Trollop::options do
10
+ Trollop.options do
10
11
  usage '[SUB_COMMAND] [options]'
11
12
  synopsis "\nTool to manage LDAP resources.\nAvailable subcommands are: #{subcommand}"
12
13
  version "#{File.basename($PROGRAM_NAME)} #{Tapjoy::LDAP::VERSION} \u00A9 2015 Tapjoy, Inc."
@@ -18,7 +19,7 @@ module Tapjoy
18
19
  when 'user'
19
20
  Tapjoy::LDAP::CLI::User.commands
20
21
  when 'group'
21
- Tapjoy::LDAP::Group.commands
22
+ Tapjoy::LDAP::CLI::Group.commands
22
23
  when 'key'
23
24
  Tapjoy::LDAP::Key.commands
24
25
  when 'audit'
@@ -8,14 +8,14 @@ module Tapjoy
8
8
  filter_users.each do |result|
9
9
  confirm_ldap_schema(result)
10
10
  keys.each do |key|
11
- puts Tapjoy::LDAP::client.add_attribute(result.dn, :sshPublicKey, key)
11
+ puts Tapjoy::LDAP.client.add_attribute(result.dn, :sshPublicKey, key)
12
12
  end
13
13
  end
14
14
  end
15
15
 
16
16
  private
17
17
  def opts
18
- @opts ||= Trollop::options do
18
+ @opts ||= Trollop.options do
19
19
  # Set help message
20
20
  usage 'key add [options]'
21
21
  synopsis "\nThis command is for adding user keys to a given user's profile"
@@ -32,7 +32,7 @@ module Tapjoy
32
32
 
33
33
  def filter_users
34
34
  filter = Net::LDAP::Filter.eq('uid', opts[:user])
35
- results = Tapjoy::LDAP::client.search(attributes = ['*'], filter = filter)
35
+ results = Tapjoy::LDAP.client.search(attributes = ['*'], filter = filter)
36
36
 
37
37
  Tapjoy::LDAP::Key.verify_user(opts[:user], results)
38
38
 
@@ -15,7 +15,7 @@ module Tapjoy
15
15
 
16
16
  private
17
17
  def opts
18
- @opts ||= Trollop::options do
18
+ @opts ||= Trollop.options do
19
19
  # Set help message
20
20
  usage 'key install'
21
21
  synopsis "\nThis command is for adding keys to the appropriate authorized_keys file"
@@ -9,13 +9,13 @@ module Tapjoy
9
9
  Tapjoy::LDAP::Key.verify_user(opts[:user], results)
10
10
 
11
11
  confirm unless opts[:force]
12
- Tapjoy::LDAP::client.replace_attribute(
12
+ Tapjoy::LDAP.client.replace_attribute(
13
13
  @user_dn, :sshPublicKey, keep_keys)
14
14
  end
15
15
 
16
16
  private
17
17
  def opts
18
- @opts ||= Trollop::options do
18
+ @opts ||= Trollop.options do
19
19
  # Set help message
20
20
  usage 'key remove [options]'
21
21
  synopsis "\nThis command is for removing a user's SSH key(s)"
@@ -36,7 +36,7 @@ module Tapjoy
36
36
  end
37
37
 
38
38
  def results
39
- @results ||= Tapjoy::LDAP::client.search(['sshPublicKey'], filter)
39
+ @results ||= Tapjoy::LDAP.client.search(['sshPublicKey'], filter)
40
40
  end
41
41
 
42
42
  def current_keys
@@ -74,17 +74,10 @@ module Tapjoy
74
74
  get_confirmation
75
75
  end
76
76
 
77
- def fd
78
- @fd ||= IO.sysopen('/dev/tty', 'w+')
79
- end
80
-
81
77
  def get_confirmation
82
78
  print '>'
83
- confirm = gets.chomp
84
- # IO.open(fd, 'w+') { |io| confirm = io.gets.chomp }
85
- unless confirm.eql?('y') || confirm.eql?('yes')
86
- abort("Deletion of #{ opts[:user] } aborted")
87
- end
79
+ confirm = STDIN.gets.chomp.downcase
80
+ abort('Deletion of key aborted') unless confirm.start_with?('y')
88
81
  end
89
82
  end
90
83
  end
@@ -12,7 +12,7 @@ module Tapjoy
12
12
 
13
13
  private
14
14
  def opts
15
- @opts ||= Trollop::options do
15
+ @opts ||= Trollop.options do
16
16
  # Set help message
17
17
  usage 'key show [options]'
18
18
  synopsis "\nThis command is for showing a specific user's SSH keys"
@@ -11,7 +11,7 @@ module Tapjoy
11
11
  SUB_COMMANDS = %w(add remove install list show)
12
12
 
13
13
  def commands
14
- Trollop::options do
14
+ Trollop.options do
15
15
  usage 'key [SUB_COMMAND] [options]'
16
16
  synopsis "\nThis object is used for user key management\nAvailable subcommands are: #{SUB_COMMANDS}"
17
17
 
@@ -57,7 +57,7 @@ module Tapjoy
57
57
  key_results = {}
58
58
  filter = Net::LDAP::Filter.eq('sshPublicKey', '*')
59
59
  attributes = %w(uid sshPublicKey)
60
- results = Tapjoy::LDAP::client.search(attributes, filter)
60
+ results = Tapjoy::LDAP.client.search(attributes, filter)
61
61
  results.each {|result| key_results[result.uid[0]] = result.sshPublicKey}
62
62
  key_results
63
63
  end
@@ -3,7 +3,7 @@ module Tapjoy
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 8
6
- PATCH = 0
6
+ PATCH = 1
7
7
  end
8
8
 
9
9
  VERSION = [Version::MAJOR, Version::MINOR, Version::PATCH].join('.')
data/lib/tapjoy/ldap.rb CHANGED
@@ -1,23 +1,29 @@
1
1
  require 'net/ldap'
2
2
  require 'yaml'
3
3
  require 'trollop'
4
+ require 'memoist'
4
5
  require_relative 'ldap/cli'
5
6
  require_relative 'ldap/base'
6
- require_relative 'ldap/group'
7
7
  require_relative 'ldap/key'
8
8
  require_relative 'ldap/audit'
9
9
  require_relative 'ldap/version'
10
10
 
11
+
11
12
  module Tapjoy
12
13
  module LDAP
14
+ class << self
15
+ attr_reader :client
16
+ extend Memoist
13
17
 
14
- def self.client
15
- @@client ||= Tapjoy::LDAP::Base.new
18
+ def client
19
+ Tapjoy::LDAP::Base.new
20
+ end
21
+ memoize :client
16
22
  end
17
23
 
18
24
  class InvalidArgument < ArgumentError
19
25
  def initialize
20
- Trollop::educate
26
+ Trollop.educate
21
27
  end
22
28
  end
23
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ldap_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Tayarani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-23 00:00:00.000000000 Z
11
+ date: 2016-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trollop
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0.1'
181
+ - !ruby/object:Gem::Dependency
182
+ name: codacy-coverage
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.0'
181
195
  description: A set of tools to make managing LDAP users, groups, and keys easier
182
196
  email: ali.tayarani@tapjoy.com
183
197
  executables:
@@ -187,21 +201,23 @@ extra_rdoc_files: []
187
201
  files:
188
202
  - bin/ldaptools
189
203
  - lib/tapjoy/ldap.rb
204
+ - lib/tapjoy/ldap/api/group.rb
190
205
  - lib/tapjoy/ldap/api/user.rb
191
206
  - lib/tapjoy/ldap/audit.rb
192
207
  - lib/tapjoy/ldap/audit/by_group.rb
193
208
  - lib/tapjoy/ldap/audit/by_user.rb
194
209
  - lib/tapjoy/ldap/base.rb
195
210
  - lib/tapjoy/ldap/cli.rb
211
+ - lib/tapjoy/ldap/cli/group.rb
212
+ - lib/tapjoy/ldap/cli/group/add_user.rb
213
+ - lib/tapjoy/ldap/cli/group/create.rb
214
+ - lib/tapjoy/ldap/cli/group/delete.rb
215
+ - lib/tapjoy/ldap/cli/group/index.rb
216
+ - lib/tapjoy/ldap/cli/group/remove_user.rb
196
217
  - lib/tapjoy/ldap/cli/user.rb
197
218
  - lib/tapjoy/ldap/cli/user/create.rb
198
219
  - lib/tapjoy/ldap/cli/user/delete.rb
199
220
  - lib/tapjoy/ldap/cli/user/show.rb
200
- - lib/tapjoy/ldap/group.rb
201
- - lib/tapjoy/ldap/group/add_user.rb
202
- - lib/tapjoy/ldap/group/create.rb
203
- - lib/tapjoy/ldap/group/delete.rb
204
- - lib/tapjoy/ldap/group/remove_user.rb
205
221
  - lib/tapjoy/ldap/key.rb
206
222
  - lib/tapjoy/ldap/key/add.rb
207
223
  - lib/tapjoy/ldap/key/install.rb
@@ -1,34 +0,0 @@
1
- module Tapjoy
2
- module LDAP
3
- module Group
4
- # Add existing user to existing group
5
- class AddUser
6
- def add_user
7
- puts Tapjoy::LDAP::client.modify(distinguished_name, operations)
8
- end
9
-
10
- private
11
- def opts
12
- @opts ||= Trollop::options do
13
- # Set help message
14
- usage 'group add_user [options]'
15
- synopsis "\nThis command is for adding existing users to existing groups"
16
-
17
- opt(:group, 'Specify group', :type => :string, :required => true)
18
- opt(:username, 'Specify username', :type => :string, :required => true)
19
- end
20
- end
21
-
22
- def distinguished_name
23
- @distinguished_name ||= "cn=#{opts[:group]},ou=Group,#{Tapjoy::LDAP::client.basedn}"
24
- end
25
-
26
- def operations
27
- # Format is LDAP operation, attribute modified, value modified
28
- # i.e, add the username to the memberuid attribute for the specified group
29
- @operations ||= [[:add, :memberUid, opts[:username]]]
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,40 +0,0 @@
1
- module Tapjoy
2
- module LDAP
3
- module Group
4
- # Create LDAP group
5
- class Create
6
- def create
7
- # Check for errors
8
- Trollop::die :type, "argument must be 'user' or 'service'" unless ['user', 'service'].include?opts[:type]
9
-
10
- puts Tapjoy::LDAP::client.add(distinguished_name, ldap_attr)
11
- end
12
-
13
- private
14
-
15
- def opts
16
- @opts ||= Trollop::options do
17
- # Set help message
18
- usage 'group create [options]'
19
- synopsis "\nThis command is for creating new LDAP groups"
20
-
21
- opt :name, 'Specify group to create', type: :string, required: true
22
- opt :type, 'Specfy if this is a user or service group', type: :string, default: 'user'
23
- end
24
- end
25
-
26
- def distinguished_name
27
- @distinguished_name ||= "cn=#{opts[:name]},ou=Group,#{Tapjoy::LDAP::client.basedn}"
28
- end
29
-
30
- def ldap_attr
31
- @ldap_attr ||= {
32
- :cn => opts[:name],
33
- :objectclass => %w(top posixGroup),
34
- :gidnumber => Tapjoy::LDAP::client.get_max_id('group', opts[:type])
35
- }
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,38 +0,0 @@
1
- module Tapjoy
2
- module LDAP
3
- module Group
4
- # Delete LDAP group
5
- class Delete
6
- def delete
7
- confirm unless opts[:force]
8
- puts Tapjoy::LDAP::client.delete(distinguished_name)
9
- end
10
-
11
- private
12
- def opts
13
- @opts ||= Trollop::options do
14
- # Set help message
15
- usage 'group delete [options]'
16
- synopsis "\nThis command is for deleting LDAP groups"
17
-
18
- opt :name, 'Specify group', type: :string, required: true
19
- opt :force, 'Force delete'
20
- end
21
- end
22
-
23
- def distinguished_name
24
- @distinguished_name ||= "cn=#{opts[:name]},ou=Group,#{Tapjoy::LDAP::client.basedn}"
25
- end
26
-
27
- def confirm
28
- puts "Confirm that you want to delete group #{opts[:name]} (yes/no)"
29
- print '>'
30
- confirm = STDIN.gets.chomp().downcase
31
- unless confirm.eql?('y') || confirm.eql?('yes')
32
- abort("Deletion of #{ opts[:name] } aborted")
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,44 +0,0 @@
1
- module Tapjoy
2
- module LDAP
3
- module Group
4
- # Remove existing user to existing group
5
- class RemoveUser
6
- def remove_user
7
- confirm unless opts[:force]
8
- puts Tapjoy::LDAP::client.modify(distinguished_name, operations)
9
- end
10
-
11
- private
12
- def opts
13
- @opts ||= Trollop::options do
14
- # Set help message
15
- usage 'group remove_user [options]'
16
- synopsis "\nThis command is for removing existing users from existing groups"
17
-
18
- opt(:group, 'Specify group', :type => :string, :required => true)
19
- opt(:username, 'Specify username', :type => :string, :required => true)
20
- end
21
- end
22
-
23
- def distinguished_name
24
- @distinguished_name ||= "cn=#{opts[:group]},ou=Group,#{Tapjoy::LDAP::client.basedn}"
25
- end
26
-
27
- def operations
28
- # Format is LDAP operation, attribute modified, value modified
29
- # i.e, remove the username to the memberuid attribute for the specified group
30
- @operations ||= [[:delete, :memberUid, opts[:username]]]
31
- end
32
-
33
- def confirm
34
- puts "Confirm that you want to remove user #{opts[:username]} from group #{opts[:group]} (yes/no)"
35
- print '>'
36
- confirm = STDIN.gets.chomp().downcase
37
- unless confirm.eql?('y') || confirm.eql?('yes')
38
- abort("Deletion of #{ opts[:name] } aborted")
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,77 +0,0 @@
1
- require_relative 'group/create'
2
- require_relative 'group/delete'
3
- require_relative 'group/add_user'
4
- require_relative 'group/remove_user'
5
-
6
- module Tapjoy
7
- module LDAP
8
- # Entry point for all group subcommands
9
- module Group
10
- class << self
11
-
12
- SUB_COMMANDS = %w(create delete add_user remove_user)
13
-
14
- def commands
15
- Trollop::options do
16
- usage 'group [SUB_COMMAND] [options]'
17
- synopsis "\nThis object is used for group management\nAvailable subcommands are: #{SUB_COMMANDS}"
18
-
19
- stop_on SUB_COMMANDS
20
- end
21
-
22
- cmd = ARGV.shift
23
-
24
- case cmd
25
- when 'create', 'delete', 'add_user', 'remove_user'
26
- send(cmd) # call method with respective name
27
- else
28
- raise Tapjoy::LDAP::InvalidArgument
29
- end
30
- end
31
-
32
- # Lookup GID for the given group
33
- def lookup_id(groupname)
34
- gidnumber = []
35
-
36
- oc_filter = Net::LDAP::Filter.eq('objectclass', 'posixGroup')
37
- cn_filter = Net::LDAP::Filter.eq('cn', groupname)
38
- filter = Net::LDAP::Filter.join(oc_filter, cn_filter)
39
-
40
- results = Tapjoy::LDAP::client.search(['gidNumber'], filter)
41
-
42
- # Make sure we return one, and only one group
43
- if results.size < 1
44
- abort('Group not found')
45
- elsif results.size > 1
46
- abort('Multiple groups found. Please narrow your search.')
47
- end
48
-
49
- results.each { |result| gidnumber = result.gidnumber }
50
- return gidnumber[0]
51
- end
52
-
53
- # Create Group
54
- def create
55
- group = Tapjoy::LDAP::Group::Create.new
56
- group.create
57
- end
58
-
59
- # Delete group
60
- def delete
61
- group = Tapjoy::LDAP::Group::Delete.new
62
- group.delete
63
- end
64
-
65
- def add_user
66
- group = Tapjoy::LDAP::Group::AddUser.new
67
- group.add_user
68
- end
69
-
70
- def remove_user
71
- group = Tapjoy::LDAP::Group::RemoveUser.new
72
- group.remove_user
73
- end
74
- end
75
- end
76
- end
77
- end