socialcast 1.2.1.RC1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|