socialcast 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.rvmrc +1 -1
- data/lib/socialcast/command_line/cli.rb +0 -1
- data/lib/socialcast/command_line/ldap_connector.rb +29 -28
- data/lib/socialcast/command_line/provision.rb +0 -42
- data/lib/socialcast/command_line/version.rb +1 -1
- data/spec/socialcast/command_line/cli_spec.rb +0 -31
- metadata +39 -39
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NjU1MmUyYjE3ZWI1NmE2NjhiZjFiMWI3ZTFlYTU2ODNkMGM4YmI2ZA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 059c8d71c405b6bd225ddf6bcadd22c55448c244
|
4
|
+
data.tar.gz: 73dc16b3f63221865f07dd46c74f992d0f8ae96a
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NThmYTA2ZjViY2M4MDY5ZDQ3Y2QyOTI3NmY1ZTRjNjNiYzMxYjk1ODUzYmI2
|
11
|
-
MmIwMzg0NzRkNWJmMDMzYTk4ZTk1NjE0YWRjMjJjZDA1MmEzYzM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YTkwYTYwZjA3NzU4ZWI2YTRjM2MxZmJmOWNjODhjYTY3MjY3YjBkYzc2NjQw
|
14
|
-
ZGZjZGMzMTBhOWRmNDI4Nzg2NTkwZjE3YWNiZGFiOWEzMzk4NmQ5NzQzYmEx
|
15
|
-
ZTJjODk3MGQyY2Y3YWFkMWY2ZmIwOWViMmYyZmQ1NDE3MTg4NjE=
|
6
|
+
metadata.gz: 49c4a5675ab1f9832d56aa7ee23678977424020cd002573c72183f1842f6a72adb23ffb1a18464720abcdaf42da17ea5594545866f59174cf86c4746332c1cff
|
7
|
+
data.tar.gz: 9ca90bb330803ed0dae3fe8ae78b86fccdb1c86c934ed43bf3497c41e455ba494f740abecba293132496149ad6d4eaf292b9d90586239cb7909d90769919b635
|
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm use ruby-1.
|
1
|
+
rvm use ruby-2.1.1@socialcast-command-line --create
|
@@ -104,7 +104,6 @@ module Socialcast
|
|
104
104
|
method_option :test, :type => :boolean, :desc => 'Do not persist changes'
|
105
105
|
method_option :skip_emails, :type => :boolean, :desc => 'Do not send signup emails to users'
|
106
106
|
method_option :force, :type => :boolean, :aliases => '-f', :default => false, :desc => 'Proceed with provisioning even if no users are found, which would deactivate all users in the community'
|
107
|
-
method_option :sanity_check, :type => :boolean, :default => false, :desc => 'Double check that users marked for termination really no longer exist'
|
108
107
|
method_option :plugins, :type => :array, :desc => "Pass in an array of plugins. Can be either the gem require or the absolute path to a ruby file"
|
109
108
|
def provision
|
110
109
|
config = ldap_config options
|
@@ -50,33 +50,6 @@ module Socialcast
|
|
50
50
|
nil
|
51
51
|
end
|
52
52
|
|
53
|
-
def ldap_search_attributes
|
54
|
-
membership_attribute = permission_mappings.fetch 'attribute_name', 'memberof'
|
55
|
-
attributes = attribute_mappings.values.map do |mapping_value|
|
56
|
-
value = begin
|
57
|
-
mapping_value.camelize.constantize
|
58
|
-
rescue NameError
|
59
|
-
mapping_value
|
60
|
-
end
|
61
|
-
|
62
|
-
case value
|
63
|
-
when Hash
|
64
|
-
dup_mapping_value = value.dup
|
65
|
-
dup_mapping_value.delete("value")
|
66
|
-
dup_mapping_value.values
|
67
|
-
when String
|
68
|
-
value
|
69
|
-
when Class, Module
|
70
|
-
if value.respond_to?(:attributes)
|
71
|
-
value.attributes
|
72
|
-
else
|
73
|
-
mapping_value
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end.flatten
|
77
|
-
attributes << membership_attribute
|
78
|
-
end
|
79
|
-
|
80
53
|
def attribute_mappings
|
81
54
|
@attribute_mappings ||= connection_config['mappings']
|
82
55
|
@attribute_mappings ||= @config.fetch 'mappings', {}
|
@@ -107,11 +80,39 @@ module Socialcast
|
|
107
80
|
end
|
108
81
|
end
|
109
82
|
|
83
|
+
private
|
84
|
+
|
110
85
|
def connection_config
|
111
86
|
@config["connections"][connection_name]
|
112
87
|
end
|
113
88
|
|
114
|
-
|
89
|
+
def ldap_search_attributes
|
90
|
+
membership_attribute = permission_mappings.fetch 'attribute_name', 'memberof'
|
91
|
+
attributes = attribute_mappings.values.map do |mapping_value|
|
92
|
+
value = begin
|
93
|
+
mapping_value.camelize.constantize
|
94
|
+
rescue NameError
|
95
|
+
mapping_value
|
96
|
+
end
|
97
|
+
|
98
|
+
case value
|
99
|
+
when Hash
|
100
|
+
dup_mapping_value = value.dup
|
101
|
+
dup_mapping_value.delete("value")
|
102
|
+
dup_mapping_value.values
|
103
|
+
when String
|
104
|
+
value
|
105
|
+
when Class, Module
|
106
|
+
if value.respond_to?(:attributes)
|
107
|
+
value.attributes
|
108
|
+
else
|
109
|
+
mapping_value
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end.flatten
|
113
|
+
attributes << membership_attribute
|
114
|
+
end
|
115
|
+
|
115
116
|
|
116
117
|
def ldap
|
117
118
|
@ldap ||= Net::LDAP.new(:host => connection_config["host"], :port => connection_config["port"], :base => connection_config["basedn"]).tap do |ldap_instance|
|
@@ -52,24 +52,6 @@ module Socialcast
|
|
52
52
|
end # export
|
53
53
|
end # gzip
|
54
54
|
|
55
|
-
if @options[:sanity_check]
|
56
|
-
puts "Sanity checking users currently marked as needing to be terminated"
|
57
|
-
each_ldap_connector do |connector|
|
58
|
-
attr_mappings = connector.attribute_mappings
|
59
|
-
(current_socialcast_users(http_config) - user_whitelist).each do |user_identifiers|
|
60
|
-
combined_filters = []
|
61
|
-
['email', 'unique_identifier', 'employee_number'].each_with_index do |identifier, index|
|
62
|
-
combined_filters << ((attr_mappings[identifier].blank? || user_identifiers[index].nil?) ? nil : Net::LDAP::Filter.eq(attr_mappings[identifier], user_identifiers[index]))
|
63
|
-
end
|
64
|
-
combined_filters.compact!
|
65
|
-
filter = ((combined_filters.size > 1) ? '(|%s)' : '%s') % combined_filters.join(' ')
|
66
|
-
filter = Net::LDAP::Filter.construct(filter) & Net::LDAP::Filter.construct(connector.connection_config["filter"])
|
67
|
-
ldap_result = connector.ldap.search(:return_result => true, :base => connector.connection_config["basedn"], :filter => filter, :attributes => connector.ldap_search_attributes)
|
68
|
-
raise ProvisionError.new "Found user marked for termination that should not be terminated: #{user_identifiers}" unless ldap_result.blank?
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
55
|
if user_whitelist.empty? && !@options[:force]
|
74
56
|
raise ProvisionError.new "Skipping upload to Socialcast since no users were found"
|
75
57
|
else
|
@@ -177,30 +159,6 @@ module Socialcast
|
|
177
159
|
end
|
178
160
|
puts "Finished scanning #{count} users"
|
179
161
|
end
|
180
|
-
|
181
|
-
def current_socialcast_users(http_config)
|
182
|
-
current_socialcast_list = Set.new
|
183
|
-
request_params = {:per_page => 500}
|
184
|
-
request_params[:page] = 1
|
185
|
-
resource = create_socialcast_user_index_request(http_config, request_params)
|
186
|
-
loop do
|
187
|
-
response = resource.get :accept => :json
|
188
|
-
result = JSON.parse(response)
|
189
|
-
users = result["users"]
|
190
|
-
break if users.blank?
|
191
|
-
request_params[:page] += 1
|
192
|
-
resource = create_socialcast_user_index_request(http_config, request_params)
|
193
|
-
users.each do |user|
|
194
|
-
current_socialcast_list << [user['contact_info']['email'], user['company_login'], user['employee_number']]
|
195
|
-
end
|
196
|
-
end
|
197
|
-
current_socialcast_list
|
198
|
-
end
|
199
|
-
|
200
|
-
def create_socialcast_user_index_request(http_config, request_params)
|
201
|
-
path_template = "/api/users?per_page=%{per_page}&page=%{page}"
|
202
|
-
Socialcast::CommandLine.resource_for_path((path_template % request_params), http_config)
|
203
|
-
end
|
204
162
|
end
|
205
163
|
end
|
206
164
|
end
|
@@ -497,36 +497,5 @@ describe Socialcast::CommandLine::CLI do
|
|
497
497
|
@result.should =~ /<label>manager_email<\/label>\s*<value>bossman@example.com<\/value>/
|
498
498
|
end
|
499
499
|
end
|
500
|
-
|
501
|
-
context "with a user marked for termination that shouldn't be and sanity_check option passed" do
|
502
|
-
before do
|
503
|
-
@entry = Net::LDAP::Entry.new("cn=Ryan,dc=example,dc=com")
|
504
|
-
@entry[:mail] = 'ryan@example.com'
|
505
|
-
@valid_entry = Net::LDAP::Entry.new("cn=Sean,dc=example,dc=com")
|
506
|
-
@valid_entry[:mail] = 'sean@example.com'
|
507
|
-
ldap_search_block = double("ldapsearchblock")
|
508
|
-
ldap_search_block.should_receive(:search).and_yield(@entry)
|
509
|
-
ldap_return = double("ldapreturn")
|
510
|
-
ldap_return.should_receive(:search).with(include(:filter => Net::LDAP::Filter.construct("(&(mail=sean@example.com)(mail=*))"))).and_return(@valid_entry)
|
511
|
-
|
512
|
-
Socialcast::CommandLine::LDAPConnector.any_instance.should_receive(:ldap).and_return(ldap_search_block, ldap_return)
|
513
|
-
|
514
|
-
@result = ''
|
515
|
-
Zlib::GzipWriter.stub(:open).and_yield(@result)
|
516
|
-
Socialcast::CommandLine::CLI.any_instance.should_receive(:ldap_config).and_return(ldap_default_config)
|
517
|
-
File.stub(:open).with(/users.xml.gz/, anything).and_yield(@result)
|
518
|
-
|
519
|
-
Socialcast::CommandLine::Provision.any_instance.should_receive(:create_socialcast_user_index_request).and_return(
|
520
|
-
double("request1", :get => {"users" => [{"contact_info" => {"email" => @entry[:mail][0]}}]}.to_json),
|
521
|
-
double("request2", :get => {"users" => [{"contact_info" => {"email" => @valid_entry[:mail][0]}}]}.to_json),
|
522
|
-
double("empty_request", :get => {"users" => []}.to_json)
|
523
|
-
)
|
524
|
-
|
525
|
-
RestClient::Resource.any_instance.should_receive(:post).never
|
526
|
-
end
|
527
|
-
it 'does not post to Socialcast and throws Kernel.abort' do
|
528
|
-
lambda { Socialcast::CommandLine::CLI.start ['provision', '--sanity_check', true] }.should raise_error SystemExit
|
529
|
-
end
|
530
|
-
end
|
531
500
|
end
|
532
501
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: socialcast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
@@ -10,162 +10,162 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-05-
|
13
|
+
date: 2014-05-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '1.4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - ~>
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '1.4'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: json
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '1.4'
|
36
|
-
- -
|
36
|
+
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: 1.4.6
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
|
-
- - ~>
|
43
|
+
- - "~>"
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '1.4'
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 1.4.6
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: thor
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0.14'
|
56
|
-
- -
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: 0.14.6
|
59
59
|
type: :runtime
|
60
60
|
prerelease: false
|
61
61
|
version_requirements: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- - ~>
|
63
|
+
- - "~>"
|
64
64
|
- !ruby/object:Gem::Version
|
65
65
|
version: '0.14'
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.14.6
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: highline
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '1.6'
|
76
|
-
- -
|
76
|
+
- - ">="
|
77
77
|
- !ruby/object:Gem::Version
|
78
78
|
version: 1.6.2
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- - ~>
|
83
|
+
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '1.6'
|
86
|
-
- -
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 1.6.2
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: socialcast-net-ldap
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
|
-
- - ~>
|
93
|
+
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0.1'
|
96
|
-
- -
|
96
|
+
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: 0.1.6
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
101
|
version_requirements: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- - ~>
|
103
|
+
- - "~>"
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0.1'
|
106
|
-
- -
|
106
|
+
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: 0.1.6
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
110
|
name: activeresource
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
112
112
|
requirements:
|
113
|
-
- - ~>
|
113
|
+
- - "~>"
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '4.0'
|
116
116
|
type: :runtime
|
117
117
|
prerelease: false
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
|
-
- - ~>
|
120
|
+
- - "~>"
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '4.0'
|
123
123
|
- !ruby/object:Gem::Dependency
|
124
124
|
name: activesupport
|
125
125
|
requirement: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
|
-
- - ~>
|
127
|
+
- - "~>"
|
128
128
|
- !ruby/object:Gem::Version
|
129
129
|
version: '4.0'
|
130
130
|
type: :runtime
|
131
131
|
prerelease: false
|
132
132
|
version_requirements: !ruby/object:Gem::Requirement
|
133
133
|
requirements:
|
134
|
-
- - ~>
|
134
|
+
- - "~>"
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '4.0'
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: rspec
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
|
-
- - ~>
|
141
|
+
- - "~>"
|
142
142
|
- !ruby/object:Gem::Version
|
143
143
|
version: '2.11'
|
144
144
|
type: :development
|
145
145
|
prerelease: false
|
146
146
|
version_requirements: !ruby/object:Gem::Requirement
|
147
147
|
requirements:
|
148
|
-
- - ~>
|
148
|
+
- - "~>"
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: '2.11'
|
151
151
|
- !ruby/object:Gem::Dependency
|
152
152
|
name: webmock
|
153
153
|
requirement: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- - ~>
|
155
|
+
- - "~>"
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '1.7'
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: 1.7.7
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- - ~>
|
165
|
+
- - "~>"
|
166
166
|
- !ruby/object:Gem::Version
|
167
167
|
version: '1.7'
|
168
|
-
- -
|
168
|
+
- - ">="
|
169
169
|
- !ruby/object:Gem::Version
|
170
170
|
version: 1.7.7
|
171
171
|
- !ruby/object:Gem::Dependency
|
@@ -186,14 +186,14 @@ dependencies:
|
|
186
186
|
name: pry
|
187
187
|
requirement: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
|
-
- - ~>
|
189
|
+
- - "~>"
|
190
190
|
- !ruby/object:Gem::Version
|
191
191
|
version: '0.9'
|
192
192
|
type: :development
|
193
193
|
prerelease: false
|
194
194
|
version_requirements: !ruby/object:Gem::Requirement
|
195
195
|
requirements:
|
196
|
-
- - ~>
|
196
|
+
- - "~>"
|
197
197
|
- !ruby/object:Gem::Version
|
198
198
|
version: '0.9'
|
199
199
|
description: publish messages to your stream from a command line interface
|
@@ -204,11 +204,11 @@ executables:
|
|
204
204
|
extensions: []
|
205
205
|
extra_rdoc_files: []
|
206
206
|
files:
|
207
|
-
- .document
|
208
|
-
- .gitignore
|
209
|
-
- .rspec
|
210
|
-
- .rvmrc
|
211
|
-
- .travis.yml
|
207
|
+
- ".document"
|
208
|
+
- ".gitignore"
|
209
|
+
- ".rspec"
|
210
|
+
- ".rvmrc"
|
211
|
+
- ".travis.yml"
|
212
212
|
- CONTRIBUTORS.txt
|
213
213
|
- Gemfile
|
214
214
|
- LICENSE.txt
|
@@ -259,12 +259,12 @@ require_paths:
|
|
259
259
|
- lib
|
260
260
|
required_ruby_version: !ruby/object:Gem::Requirement
|
261
261
|
requirements:
|
262
|
-
- -
|
262
|
+
- - ">="
|
263
263
|
- !ruby/object:Gem::Version
|
264
264
|
version: '0'
|
265
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
266
|
requirements:
|
267
|
-
- -
|
267
|
+
- - ">="
|
268
268
|
- !ruby/object:Gem::Version
|
269
269
|
version: '0'
|
270
270
|
requirements: []
|