socialcast 1.2.1.RC1 → 1.2.2
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.
- data/.gitignore +1 -0
- data/lib/socialcast/cli.rb +19 -3
- data/lib/socialcast/message.rb +2 -0
- data/lib/socialcast/net_ldap_ext.rb +4 -3
- data/lib/socialcast/version.rb +1 -1
- data/socialcast.gemspec +1 -1
- data/spec/cli_spec.rb +5 -4
- data/spec/fixtures/fake_attribute_map.rb +3 -0
- data/spec/fixtures/ldap_with_plugin_mapping.yml +53 -0
- metadata +11 -6
data/.gitignore
CHANGED
data/lib/socialcast/cli.rb
CHANGED
|
@@ -135,12 +135,28 @@ module Socialcast
|
|
|
135
135
|
|
|
136
136
|
permission_mappings = config.fetch 'permission_mappings', {}
|
|
137
137
|
membership_attribute = permission_mappings.fetch 'attribute_name', 'memberof'
|
|
138
|
-
attributes = mappings.values
|
|
138
|
+
attributes = mappings.values.map do |mapping_value|
|
|
139
|
+
mapping_value = begin
|
|
140
|
+
mapping_value.camelize.constantize
|
|
141
|
+
rescue NameError
|
|
142
|
+
mapping_value
|
|
143
|
+
end
|
|
144
|
+
case mapping_value
|
|
145
|
+
when Hash
|
|
146
|
+
dup_mapping_value = mapping_value.dup
|
|
147
|
+
dup_mapping_value.delete("value")
|
|
148
|
+
dup_mapping_value.values
|
|
149
|
+
when String
|
|
150
|
+
mapping_value
|
|
151
|
+
when Class, Module
|
|
152
|
+
fail "Please add the attributes method to #{mapping_value}" unless mapping_value.respond_to?(:attributes)
|
|
153
|
+
mapping_value.attributes
|
|
154
|
+
end
|
|
155
|
+
end.flatten
|
|
139
156
|
attributes << membership_attribute
|
|
140
|
-
|
|
141
157
|
user_identifier_list = %w{email unique_identifier employee_number}
|
|
142
158
|
user_whitelist = Set.new
|
|
143
|
-
|
|
159
|
+
count = 0
|
|
144
160
|
output_file = File.join Dir.pwd, options[:output]
|
|
145
161
|
Zlib::GzipWriter.open(output_file) do |gz|
|
|
146
162
|
xml = Builder::XmlMarkup.new(:target => gz, :indent => 1)
|
data/lib/socialcast/message.rb
CHANGED
|
@@ -6,15 +6,16 @@ class Net::LDAP::Entry
|
|
|
6
6
|
# abstracts away ldap multivalue attributes
|
|
7
7
|
def grab(attribute)
|
|
8
8
|
attribute = begin
|
|
9
|
-
attribute.
|
|
9
|
+
attribute.camelize.constantize
|
|
10
10
|
rescue NameError
|
|
11
11
|
attribute
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
case attribute
|
|
15
15
|
when Hash
|
|
16
|
-
|
|
17
|
-
value
|
|
16
|
+
dup_attribute = attribute.dup
|
|
17
|
+
value = dup_attribute.delete("value")
|
|
18
|
+
value % Hash[dup_attribute.map {|k,v| [k, grab(v)]}].symbolize_keys
|
|
18
19
|
when String
|
|
19
20
|
Array.wrap(self[attribute]).compact.first
|
|
20
21
|
when Class, Module
|
data/lib/socialcast/version.rb
CHANGED
data/socialcast.gemspec
CHANGED
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
|
13
13
|
s.description = %q{publish messages to your stream from a command line interface}
|
|
14
14
|
|
|
15
15
|
s.rubyforge_project = "socialcast"
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
s.add_runtime_dependency 'rest-client', '>= 1.4.0'
|
|
18
18
|
s.add_runtime_dependency 'json', '>= 1.4.6'
|
|
19
19
|
s.add_runtime_dependency 'thor', '>= 0.14.6'
|
data/spec/cli_spec.rb
CHANGED
|
@@ -7,8 +7,7 @@ describe Socialcast::CLI do
|
|
|
7
7
|
before do
|
|
8
8
|
Socialcast.stub(:credentials).and_return(YAML.load_file(File.join(File.dirname(__FILE__), 'fixtures', 'credentials.yml')))
|
|
9
9
|
stub_request(:post, "https://ryan%40socialcast.com:foo@test.staging.socialcast.com/api/messages.json").
|
|
10
|
-
with(:body =>
|
|
11
|
-
with(:body => /testing/).
|
|
10
|
+
with(:body => { "message" => { "body" => "testing", "url" => nil, "message_type" => nil, "attachment_ids" => [], "group_id" => nil }}).
|
|
12
11
|
with(:headers => {'Accept' => 'application/json'}).
|
|
13
12
|
to_return(:status => 200, :body => "", :headers => {})
|
|
14
13
|
|
|
@@ -175,14 +174,16 @@ describe Socialcast::CLI do
|
|
|
175
174
|
@result = ''
|
|
176
175
|
Zlib::GzipWriter.stub(:open).and_yield(@result)
|
|
177
176
|
Socialcast.stub(:credentials).and_return(YAML.load_file(File.join(File.dirname(__FILE__), 'fixtures', 'credentials.yml')))
|
|
178
|
-
Socialcast::CLI.any_instance.should_receive(:load_configuration).with('/my/path/to/ldap.yml').and_return(YAML.load_file(File.join(File.dirname(__FILE__), 'fixtures', '
|
|
177
|
+
Socialcast::CLI.any_instance.should_receive(:load_configuration).with('/my/path/to/ldap.yml').and_return(YAML.load_file(File.join(File.dirname(__FILE__), 'fixtures', 'ldap_with_plugin_mapping.yml')))
|
|
179
178
|
File.should_receive(:exists?).with('/my/path/to/ldap.yml').and_return(true)
|
|
180
179
|
File.stub(:open).with(/users.xml.gz/, anything).and_yield(@result)
|
|
181
180
|
RestClient::Resource.any_instance.stub(:post)
|
|
182
181
|
|
|
183
182
|
Socialcast::CLI.start ['provision', '-c', '/my/path/to/ldap.yml', '--plugins', [File.join(File.dirname(__FILE__), 'fixtures', 'fake_attribute_map')]]
|
|
184
183
|
end
|
|
185
|
-
it 'successfully processes' do
|
|
184
|
+
it 'successfully processes' do
|
|
185
|
+
@result.should =~ %r{rybn@exbmple.com}
|
|
186
|
+
end # see expectations
|
|
186
187
|
end
|
|
187
188
|
context 'with ldap.yml configuration excluding permission_mappings' do
|
|
188
189
|
before do
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
# LDAP connections
|
|
3
|
+
connections:
|
|
4
|
+
example_connection_1:
|
|
5
|
+
username: "cn=Directory Manager"
|
|
6
|
+
password: "test"
|
|
7
|
+
host: localhost
|
|
8
|
+
port: 1389
|
|
9
|
+
basedn: "dc=example,dc=com"
|
|
10
|
+
filter: "(mail=*)"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# LDAP attribute mappings
|
|
14
|
+
mappings:
|
|
15
|
+
first_name: socialcast/fake_attribute_map
|
|
16
|
+
last_name: sn
|
|
17
|
+
email: mail
|
|
18
|
+
# only use employee_number if the email is unknown
|
|
19
|
+
# employee_number: emp_id
|
|
20
|
+
# only use unique_identifier if you do not wish to use email as the main user identification method
|
|
21
|
+
# unique_identifier: samaccountname
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Map LDAP Group Memberships to Socialcast Permissions
|
|
25
|
+
# permission_mappings:
|
|
26
|
+
# # configure LDAP field for group memberships (ex: memberof, isMemberOf, etc)
|
|
27
|
+
# attribute_name: isMemberOf
|
|
28
|
+
# account_types:
|
|
29
|
+
# external: "cn=External,dc=example,dc=com"
|
|
30
|
+
# roles:
|
|
31
|
+
# tenant_admin: "cn=Admins,dc=example,dc=com"
|
|
32
|
+
# sbi_admin: "cn=SbiAdmins,dc=example,dc=com"
|
|
33
|
+
# reach_admin: "cn=ReachAdmins,dc=example,dc=com"
|
|
34
|
+
# town_hall_admin: "cn=TownHallAdmins,dc=example,dc=com"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# general script options
|
|
38
|
+
options:
|
|
39
|
+
# cleanup the extracted ldap data file after run is complete
|
|
40
|
+
delete_users_file: false
|
|
41
|
+
# skip sending emails to newly activated users
|
|
42
|
+
skip_emails: true
|
|
43
|
+
# do not actually provision accounts
|
|
44
|
+
# useful during testing
|
|
45
|
+
test: true
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# http options for connecting to Socialcast servers
|
|
49
|
+
http:
|
|
50
|
+
timeout: 660
|
|
51
|
+
# optional setting if script must connect to Socialcast server through a proxy
|
|
52
|
+
# proxy: "http://username:password@proxy.company.com:3128"
|
|
53
|
+
|
metadata
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: socialcast
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.2.2
|
|
5
|
+
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Ryan Sonnek
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2013-
|
|
13
|
+
date: 2013-08-28 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: rest-client
|
|
@@ -192,6 +192,7 @@ files:
|
|
|
192
192
|
- spec/fixtures/ldap_with_array_permission_mapping.yml
|
|
193
193
|
- spec/fixtures/ldap_with_interpolated_values.yml
|
|
194
194
|
- spec/fixtures/ldap_with_manager_attribute.yml
|
|
195
|
+
- spec/fixtures/ldap_with_plugin_mapping.yml
|
|
195
196
|
- spec/fixtures/ldap_without_permission_mappings.yml
|
|
196
197
|
- spec/net_ldap_ext_spec.rb
|
|
197
198
|
- spec/spec_helper.rb
|
|
@@ -209,13 +210,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
209
210
|
version: '0'
|
|
210
211
|
segments:
|
|
211
212
|
- 0
|
|
212
|
-
hash:
|
|
213
|
+
hash: 4299609609478338183
|
|
213
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
215
|
none: false
|
|
215
216
|
requirements:
|
|
216
|
-
- - ! '
|
|
217
|
+
- - ! '>='
|
|
217
218
|
- !ruby/object:Gem::Version
|
|
218
|
-
version:
|
|
219
|
+
version: '0'
|
|
220
|
+
segments:
|
|
221
|
+
- 0
|
|
222
|
+
hash: 4299609609478338183
|
|
219
223
|
requirements: []
|
|
220
224
|
rubyforge_project: socialcast
|
|
221
225
|
rubygems_version: 1.8.25
|
|
@@ -231,6 +235,7 @@ test_files:
|
|
|
231
235
|
- spec/fixtures/ldap_with_array_permission_mapping.yml
|
|
232
236
|
- spec/fixtures/ldap_with_interpolated_values.yml
|
|
233
237
|
- spec/fixtures/ldap_with_manager_attribute.yml
|
|
238
|
+
- spec/fixtures/ldap_with_plugin_mapping.yml
|
|
234
239
|
- spec/fixtures/ldap_without_permission_mappings.yml
|
|
235
240
|
- spec/net_ldap_ext_spec.rb
|
|
236
241
|
- spec/spec_helper.rb
|