ldap_tools 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/ldaptools +3 -32
- data/lib/tapjoy/ldap/api/user.rb +112 -0
- data/lib/tapjoy/ldap/cli/user/create.rb +42 -0
- data/lib/tapjoy/ldap/cli/user/delete.rb +43 -0
- data/lib/tapjoy/ldap/cli/user/show.rb +34 -0
- data/lib/tapjoy/ldap/cli/user.rb +62 -0
- data/lib/tapjoy/ldap/cli.rb +33 -0
- data/lib/tapjoy/ldap/version.rb +2 -2
- data/lib/tapjoy/ldap.rb +1 -1
- metadata +122 -6
- data/lib/tapjoy/ldap/user/create.rb +0 -92
- data/lib/tapjoy/ldap/user/delete.rb +0 -51
- data/lib/tapjoy/ldap/user.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c580acd38fa44077ad2175af8c7525b25c22dfcd
|
4
|
+
data.tar.gz: 9002e5285f2eb0964a53e587b757cbf60492392c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 372a3e9e8013fe642ddbcfbceb1f1dead4a0e68874f7b968e6957bca2709697ad0fc7d303a6730cdde21216b536a596c5f17ccd83983e49712d1b664f75fad12
|
7
|
+
data.tar.gz: d3662bc277bd26599a19dba670f96c261c55ddf617b93196f68762836c75ed4e190162e54088a1d810b2aa138bf00ddf997cc90e6e7fdf6cba3b8a697e1a746a
|
data/bin/ldaptools
CHANGED
@@ -1,35 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'tapjoy/ldap'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
usage "#{object} [SUB_COMMAND] [options]"
|
8
|
-
synopsis "\n#{synopsis}.\nAvailable subcommands are: #{sub_commands}"
|
9
|
-
stop_on sub_commands
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
SUB_COMMANDS = %w(user group key audit)
|
14
|
-
Trollop::options do
|
15
|
-
usage '[SUB_COMMAND] [options]'
|
16
|
-
synopsis "\nTool to manage LDAP resources.\nAvailable subcommands are: #{SUB_COMMANDS}"
|
17
|
-
version "#{File.basename($PROGRAM_NAME)} #{Tapjoy::LDAP::VERSION} \u00A9 2015 Tapjoy, Inc."
|
18
|
-
stop_on SUB_COMMANDS
|
19
|
-
end
|
20
|
-
|
21
|
-
cmd = ARGV.shift # get the subcommand
|
22
|
-
case cmd
|
23
|
-
when 'user' # run commands associated with user object
|
24
|
-
Tapjoy::LDAP::User.commands
|
25
|
-
when 'group'
|
26
|
-
Tapjoy::LDAP::Group.commands
|
27
|
-
when 'key'
|
28
|
-
Tapjoy::LDAP::Key.commands
|
29
|
-
when 'audit'
|
30
|
-
# AUDIT_SUB_COMMANDS = %w(by_user by_group raw)
|
31
|
-
# commands(, cmd, AUDIT_SUB_COMMANDS)
|
32
|
-
Tapjoy::LDAP::Audit.commands
|
33
|
-
else
|
34
|
-
raise Tapjoy::LDAP::InvalidArgument
|
35
|
-
end
|
4
|
+
Tapjoy::LDAP::CLI.commands
|
5
|
+
# Tapjoy::LDAP::API::User.create('ali', 'tayarani', 'user', 'users')
|
6
|
+
# Tapjoy::LDAP::API::User.destroy('ali.tayarani', 'user')
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'memoist'
|
2
|
+
module Tapjoy
|
3
|
+
module LDAP
|
4
|
+
module API
|
5
|
+
module User
|
6
|
+
class << self
|
7
|
+
extend Memoist
|
8
|
+
def create(fname, lname, type, group)
|
9
|
+
# Properly capitalize names
|
10
|
+
fname, lname = [fname, lname].map(&:capitalize)
|
11
|
+
|
12
|
+
Tapjoy::LDAP::client.add(
|
13
|
+
distinguished_name(fname, lname, type),
|
14
|
+
ldap_attr(fname, lname, type, group)
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def destroy(username, type)
|
19
|
+
Tapjoy::LDAP::client.delete(
|
20
|
+
distinguished_name(*name_of_user(username), type)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
def index
|
25
|
+
Tapjoy::LDAP::client.search('*', filter(uid: '*'))
|
26
|
+
end
|
27
|
+
|
28
|
+
def show(username)
|
29
|
+
Tapjoy::LDAP::client.search('*', filter(uid: username))
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Filter users for #show and #index
|
35
|
+
def filter(uid: '*')
|
36
|
+
Net::LDAP::Filter.eq('uid', uid)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Given a username, return First and Last names
|
40
|
+
def name_of_user(username)
|
41
|
+
username.split('.').map(&:capitalize)
|
42
|
+
end
|
43
|
+
memoize :name_of_user
|
44
|
+
|
45
|
+
# Given First and Last names, return a username
|
46
|
+
def username(fname, lname)
|
47
|
+
[fname, lname].join('.').downcase
|
48
|
+
end
|
49
|
+
memoize :username
|
50
|
+
|
51
|
+
def distinguished_name(fname, lname, type)
|
52
|
+
%W(
|
53
|
+
uid=#{username(fname, lname)}
|
54
|
+
ou=#{organizational_unit(type)}
|
55
|
+
#{Tapjoy::LDAP::client.basedn}).join(',')
|
56
|
+
end
|
57
|
+
memoize :distinguished_name
|
58
|
+
|
59
|
+
def organizational_unit(type)
|
60
|
+
case type
|
61
|
+
when 'user'
|
62
|
+
'People'
|
63
|
+
when 'service'
|
64
|
+
Tapjoy::LDAP::client.service_ou
|
65
|
+
else
|
66
|
+
puts 'Unknown type'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
memoize :organizational_unit
|
70
|
+
|
71
|
+
def ldap_attr(fname, lname, type, group)
|
72
|
+
uid = username(fname, lname)
|
73
|
+
{
|
74
|
+
uid: uid,
|
75
|
+
cn: [fname, lname].join(' '),
|
76
|
+
objectclass: %w(top posixAccount shadowAccount inetOrgPerson
|
77
|
+
organizationalPerson person ldapPublicKey),
|
78
|
+
sn: lname,
|
79
|
+
givenname: fname,
|
80
|
+
# Empty string is an alias for the root of the FS
|
81
|
+
homedirectory: File.join('','home', uid),
|
82
|
+
loginshell: File.join('','bin', 'bash'),
|
83
|
+
mail: "#{uid}@tapjoy.com",
|
84
|
+
uidnumber: uidnumber(type),
|
85
|
+
gidnumber: gidnumber(group),
|
86
|
+
userpassword: '{SSHA}' + create_password
|
87
|
+
}
|
88
|
+
end
|
89
|
+
memoize :ldap_attr
|
90
|
+
|
91
|
+
def uidnumber(type)
|
92
|
+
Tapjoy::LDAP::client.get_max_id('user', type)
|
93
|
+
end
|
94
|
+
memoize :uidnumber
|
95
|
+
|
96
|
+
def gidnumber(group)
|
97
|
+
Tapjoy::LDAP::Group.lookup_id(group)
|
98
|
+
end
|
99
|
+
memoize :gidnumber
|
100
|
+
|
101
|
+
def create_password
|
102
|
+
# Super-Salt: bad for blood pressure, good for secure passwords
|
103
|
+
# We can get away with this, since we're not planning on using passwords
|
104
|
+
salt = SecureRandom.base64(32)
|
105
|
+
password = SecureRandom.base64(64)
|
106
|
+
password = Digest::SHA1.base64digest(password + salt)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module CLI
|
4
|
+
module User
|
5
|
+
# Manipulates data to a format usable by the API structure
|
6
|
+
class Create
|
7
|
+
# Tapjoy::LDAP::CLI::User::Create#create
|
8
|
+
# Make the API call to create an LDAP user
|
9
|
+
def create
|
10
|
+
verify_arguments
|
11
|
+
fname, lname = opts[:user]
|
12
|
+
puts Tapjoy::LDAP::API::User.create(fname, lname,
|
13
|
+
opts[:type], opts[:group])
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def opts
|
18
|
+
@opts ||= Trollop::options do
|
19
|
+
# Set help message
|
20
|
+
usage 'user create [options]'
|
21
|
+
synopsis "\nThis command is for creating new LDAP users"
|
22
|
+
|
23
|
+
# Username is two arguments
|
24
|
+
# Trollop will accept more, but we will only parse two later
|
25
|
+
# TODO: support given names that include a space
|
26
|
+
opt :user, "Specify user's first and last name", type: :strings, required: true
|
27
|
+
|
28
|
+
# Groupname is a single string, for primary group setting
|
29
|
+
opt :group, 'Specify name of primary group', type: :string, required: true
|
30
|
+
opt :type, 'Specfy if this is a user or service account', type: :string, default: 'user'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
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]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module CLI
|
4
|
+
module User
|
5
|
+
# Manipulates data to a format usable
|
6
|
+
# by the API structure for user removal
|
7
|
+
class Delete
|
8
|
+
# Make the API call to remove an LDAP user
|
9
|
+
def delete
|
10
|
+
verify_arguments
|
11
|
+
confirm unless opts[:force]
|
12
|
+
puts Tapjoy::LDAP::API::User.destroy(opts[:user], opts[:type])
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def opts
|
17
|
+
@opts ||= Trollop::options do
|
18
|
+
# Set help message
|
19
|
+
usage "user delete [options]"
|
20
|
+
|
21
|
+
opt :user, 'Specify username', type: :string, required: true
|
22
|
+
opt :force, 'Force delete'
|
23
|
+
opt :type, 'Specfy if this is a user or service account', type: :string, default: 'user'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def confirm
|
28
|
+
puts "Confirm that you want to delete user: #{opts[:user]} (yes/no)"
|
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
|
34
|
+
end
|
35
|
+
|
36
|
+
def verify_arguments
|
37
|
+
Trollop::die :type, "argument must be 'user' or 'service'" unless %w(user service).include?opts[:type]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Tapjoy
|
2
|
+
module LDAP
|
3
|
+
module CLI
|
4
|
+
module User
|
5
|
+
# Manipulates data to a format usable
|
6
|
+
# by the API structure for user display
|
7
|
+
class Show
|
8
|
+
# Make the API call to show an LDAP user
|
9
|
+
def show
|
10
|
+
Tapjoy::LDAP::API::User.show(opts[:user]).each do |entry|
|
11
|
+
puts "DN: #{entry.dn}"
|
12
|
+
entry.each do |attribute, values|
|
13
|
+
puts " #{attribute}:"
|
14
|
+
values.each do |value|
|
15
|
+
puts " --->#{value}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def opts
|
23
|
+
@opts ||= Trollop::options do
|
24
|
+
# Set help message
|
25
|
+
usage "user show [options]"
|
26
|
+
|
27
|
+
opt :user, 'Specify username', type: :string, required: true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require_relative 'user/create'
|
2
|
+
require_relative 'user/delete'
|
3
|
+
require_relative 'user/show'
|
4
|
+
require_relative '../api/user'
|
5
|
+
module Tapjoy
|
6
|
+
module LDAP
|
7
|
+
module CLI
|
8
|
+
# CLI Module for all user commands
|
9
|
+
module User
|
10
|
+
class << self
|
11
|
+
SUB_COMMANDS = %w(create delete index show)
|
12
|
+
|
13
|
+
def commands
|
14
|
+
Trollop::options do
|
15
|
+
usage 'user [SUB_COMMAND] [options]'
|
16
|
+
synopsis "\nThis object is used for user management\nAvailable subcommands are: #{SUB_COMMANDS}"
|
17
|
+
|
18
|
+
stop_on SUB_COMMANDS
|
19
|
+
end
|
20
|
+
|
21
|
+
cmd = ARGV.shift
|
22
|
+
|
23
|
+
case cmd
|
24
|
+
when 'create', 'delete', 'index', 'show'
|
25
|
+
send(cmd) # call method with respective name
|
26
|
+
else
|
27
|
+
raise Tapjoy::LDAP::InvalidArgument
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def create
|
32
|
+
user = Tapjoy::LDAP::CLI::User::Create.new
|
33
|
+
user.create
|
34
|
+
end
|
35
|
+
|
36
|
+
def delete
|
37
|
+
user = Tapjoy::LDAP::CLI::User::Delete.new
|
38
|
+
user.delete
|
39
|
+
end
|
40
|
+
|
41
|
+
def index
|
42
|
+
Tapjoy::LDAP::API::User.index.each do |entry|
|
43
|
+
puts "DN: #{entry.dn}"
|
44
|
+
entry.each do |attribute, values|
|
45
|
+
puts " #{attribute}:"
|
46
|
+
values.each do |value|
|
47
|
+
puts " --->#{value}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def show
|
54
|
+
user = Tapjoy::LDAP::CLI::User::Show.new
|
55
|
+
user.show
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'cli/user'
|
2
|
+
|
3
|
+
module Tapjoy
|
4
|
+
module LDAP
|
5
|
+
module CLI
|
6
|
+
class << self
|
7
|
+
def commands
|
8
|
+
subcommand = %w(user group key audit)
|
9
|
+
Trollop::options do
|
10
|
+
usage '[SUB_COMMAND] [options]'
|
11
|
+
synopsis "\nTool to manage LDAP resources.\nAvailable subcommands are: #{subcommand}"
|
12
|
+
version "#{File.basename($PROGRAM_NAME)} #{Tapjoy::LDAP::VERSION} \u00A9 2015 Tapjoy, Inc."
|
13
|
+
stop_on subcommand
|
14
|
+
end
|
15
|
+
|
16
|
+
cmd = ARGV.shift # get the subcommand
|
17
|
+
case cmd
|
18
|
+
when 'user'
|
19
|
+
Tapjoy::LDAP::CLI::User.commands
|
20
|
+
when 'group'
|
21
|
+
Tapjoy::LDAP::Group.commands
|
22
|
+
when 'key'
|
23
|
+
Tapjoy::LDAP::Key.commands
|
24
|
+
when 'audit'
|
25
|
+
Tapjoy::LDAP::Audit.commands
|
26
|
+
else
|
27
|
+
raise Tapjoy::LDAP::InvalidArgument
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/tapjoy/ldap/version.rb
CHANGED
data/lib/tapjoy/ldap.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'net/ldap'
|
2
2
|
require 'yaml'
|
3
3
|
require 'trollop'
|
4
|
+
require_relative 'ldap/cli'
|
4
5
|
require_relative 'ldap/base'
|
5
6
|
require_relative 'ldap/group'
|
6
7
|
require_relative 'ldap/key'
|
7
|
-
require_relative 'ldap/user'
|
8
8
|
require_relative 'ldap/audit'
|
9
9
|
require_relative 'ldap/version'
|
10
10
|
|
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.
|
4
|
+
version: 0.8.0
|
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-
|
11
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trollop
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: memoist
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.14'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.2'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.2'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rspec
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +94,90 @@ dependencies:
|
|
66
94
|
- - "~>"
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '3.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.8'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.8'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.13'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.13'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-bundler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.1'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.1'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: guard-rubycritic
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.9'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.9'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: guard-yard
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2.1'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '2.1'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: guard-yardstick
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.1'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.1'
|
69
181
|
description: A set of tools to make managing LDAP users, groups, and keys easier
|
70
182
|
email: ali.tayarani@tapjoy.com
|
71
183
|
executables:
|
@@ -75,10 +187,16 @@ extra_rdoc_files: []
|
|
75
187
|
files:
|
76
188
|
- bin/ldaptools
|
77
189
|
- lib/tapjoy/ldap.rb
|
190
|
+
- lib/tapjoy/ldap/api/user.rb
|
78
191
|
- lib/tapjoy/ldap/audit.rb
|
79
192
|
- lib/tapjoy/ldap/audit/by_group.rb
|
80
193
|
- lib/tapjoy/ldap/audit/by_user.rb
|
81
194
|
- lib/tapjoy/ldap/base.rb
|
195
|
+
- lib/tapjoy/ldap/cli.rb
|
196
|
+
- lib/tapjoy/ldap/cli/user.rb
|
197
|
+
- lib/tapjoy/ldap/cli/user/create.rb
|
198
|
+
- lib/tapjoy/ldap/cli/user/delete.rb
|
199
|
+
- lib/tapjoy/ldap/cli/user/show.rb
|
82
200
|
- lib/tapjoy/ldap/group.rb
|
83
201
|
- lib/tapjoy/ldap/group/add_user.rb
|
84
202
|
- lib/tapjoy/ldap/group/create.rb
|
@@ -89,9 +207,6 @@ files:
|
|
89
207
|
- lib/tapjoy/ldap/key/install.rb
|
90
208
|
- lib/tapjoy/ldap/key/remove.rb
|
91
209
|
- lib/tapjoy/ldap/key/show.rb
|
92
|
-
- lib/tapjoy/ldap/user.rb
|
93
|
-
- lib/tapjoy/ldap/user/create.rb
|
94
|
-
- lib/tapjoy/ldap/user/delete.rb
|
95
210
|
- lib/tapjoy/ldap/version.rb
|
96
211
|
homepage: https://github.com/Tapjoy/ldap_tools
|
97
212
|
licenses:
|
@@ -105,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
220
|
requirements:
|
106
221
|
- - ">="
|
107
222
|
- !ruby/object:Gem::Version
|
108
|
-
version: '2.
|
223
|
+
version: '2.2'
|
109
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
225
|
requirements:
|
111
226
|
- - ">="
|
@@ -118,3 +233,4 @@ signing_key:
|
|
118
233
|
specification_version: 4
|
119
234
|
summary: Tapjoy LDAP Tools
|
120
235
|
test_files: []
|
236
|
+
has_rdoc:
|
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'digest'
|
2
|
-
require 'securerandom'
|
3
|
-
module Tapjoy
|
4
|
-
module LDAP
|
5
|
-
module User
|
6
|
-
# Create LDAP user
|
7
|
-
class Create
|
8
|
-
def create
|
9
|
-
# Check for errors
|
10
|
-
Trollop::die :user, 'argument count must be two' if opts[:user].size != 2
|
11
|
-
Trollop::die :type, "argument must be 'user' or 'service'" unless ['user', 'service'].include?opts[:type]
|
12
|
-
|
13
|
-
puts Tapjoy::LDAP::client.add(distinguished_name, ldap_attr)
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
def create_password
|
18
|
-
# Super-Salt: bad for blood pressure, good for secure passwords
|
19
|
-
# We can get away with this, since we're not planning on using passwords
|
20
|
-
@create_password ||= begin
|
21
|
-
salt = SecureRandom.base64(32)
|
22
|
-
password = SecureRandom.base64(64)
|
23
|
-
password = Digest::SHA1.base64digest(password + salt)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def username
|
28
|
-
@username ||= opts[:user].join('.').downcase
|
29
|
-
end
|
30
|
-
|
31
|
-
def ldap_attr
|
32
|
-
@ldap_attr ||= {
|
33
|
-
:uid => username,
|
34
|
-
:cn => "#{opts[:user].join}",
|
35
|
-
:objectclass => ['top','posixAccount','shadowAccount','inetOrgPerson',
|
36
|
-
'organizationalPerson','person', 'ldapPublicKey'],
|
37
|
-
:sn => opts[:user][1],
|
38
|
-
:givenname => opts[:user][0],
|
39
|
-
:homedirectory => "/home/#{ username }",
|
40
|
-
:loginshell => '/bin/bash',
|
41
|
-
:mail => "#{username}@tapjoy.com".downcase,
|
42
|
-
:uidnumber => uidnumber,
|
43
|
-
:gidnumber => gidnumber,
|
44
|
-
:userpassword => '{SSHA}' + create_password
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def distinguished_name
|
49
|
-
@distinguished_name ||= "uid=#{username},ou=#{organizational_unit},#{Tapjoy::LDAP::client.basedn}"
|
50
|
-
end
|
51
|
-
|
52
|
-
def organizational_unit
|
53
|
-
@organizational_unit ||= begin
|
54
|
-
case opts[:type]
|
55
|
-
when 'user'
|
56
|
-
'People'
|
57
|
-
when 'service'
|
58
|
-
Tapjoy::LDAP::client.service_ou
|
59
|
-
else
|
60
|
-
puts 'Unknown type'
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def uidnumber
|
66
|
-
@uidnumber ||= Tapjoy::LDAP::client.get_max_id('user', opts[:type])
|
67
|
-
end
|
68
|
-
|
69
|
-
def gidnumber
|
70
|
-
@gidnumber ||= Tapjoy::LDAP::Group.lookup_id(opts[:group])
|
71
|
-
end
|
72
|
-
|
73
|
-
def opts
|
74
|
-
@opts ||= Trollop::options do
|
75
|
-
# Set help message
|
76
|
-
usage 'user create [options]'
|
77
|
-
synopsis "\nThis command is for creating new LDAP users"
|
78
|
-
|
79
|
-
# Username is two arguments
|
80
|
-
# Trollop will accept more, but we will only parse two later
|
81
|
-
# TODO: support given names that include a space
|
82
|
-
opt :user, "Specify user's first and last name", type: :strings, required: true
|
83
|
-
|
84
|
-
# Groupname is a single string, for primary group setting
|
85
|
-
opt :group, 'Specify name of primary group', type: :string, required: true
|
86
|
-
opt :type, 'Specfy if this is a user or service account', type: :string, default: 'user'
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Tapjoy
|
2
|
-
module LDAP
|
3
|
-
module User
|
4
|
-
# Delete LDAP user
|
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 "user delete [options]"
|
16
|
-
|
17
|
-
opt :user, 'Specify username', type: :string, required: true
|
18
|
-
opt :force, 'Force delete'
|
19
|
-
opt :type, 'Specfy if this is a user or service account', type: :string, default: 'user'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def distinguished_name
|
24
|
-
@distinguished_name ||= "uid=#{opts[:user]},ou=#{organizational_unit},#{Tapjoy::LDAP::client.basedn}"
|
25
|
-
end
|
26
|
-
|
27
|
-
def confirm
|
28
|
-
puts "Confirm that you want to delete user: #{opts[:user]} (yes/no)"
|
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
|
34
|
-
end
|
35
|
-
|
36
|
-
def organizational_unit
|
37
|
-
@organizational_unit ||= begin
|
38
|
-
case opts[:type]
|
39
|
-
when 'user'
|
40
|
-
'People'
|
41
|
-
when 'service'
|
42
|
-
Tapjoy::LDAP::client.service_ou
|
43
|
-
else
|
44
|
-
puts 'Unknown type'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/tapjoy/ldap/user.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require_relative 'user/create'
|
2
|
-
require_relative 'user/delete'
|
3
|
-
|
4
|
-
module Tapjoy
|
5
|
-
module LDAP
|
6
|
-
# Entry point for all user subcommands
|
7
|
-
module User
|
8
|
-
class << self
|
9
|
-
SUB_COMMANDS = %w(create delete)
|
10
|
-
|
11
|
-
def commands
|
12
|
-
Trollop::options do
|
13
|
-
usage 'user [SUB_COMMAND] [options]'
|
14
|
-
synopsis "\nThis object is used for user management\nAvailable subcommands are: #{SUB_COMMANDS}"
|
15
|
-
|
16
|
-
stop_on SUB_COMMANDS
|
17
|
-
end
|
18
|
-
|
19
|
-
cmd = ARGV.shift
|
20
|
-
|
21
|
-
case cmd
|
22
|
-
when 'create', 'delete'
|
23
|
-
send(cmd) # call method with respective name
|
24
|
-
else
|
25
|
-
raise Tapjoy::LDAP::InvalidArgument
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def create
|
30
|
-
user = Tapjoy::LDAP::User::Create.new
|
31
|
-
user.create
|
32
|
-
end
|
33
|
-
|
34
|
-
def delete
|
35
|
-
user = Tapjoy::LDAP::User::Delete.new
|
36
|
-
user.delete
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|