simple_crowd 1.1.0 → 1.1.1

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.
@@ -35,7 +35,7 @@ module SimpleCrowd
35
35
  }.merge(no_validation_factors)}
36
36
  end
37
37
  end
38
- response.to_hash[:authenticate_application_response][:out][:token].to_s
38
+ clean_response(response.to_hash[:authenticate_application_response][:out])[:token].to_s.dup
39
39
  end
40
40
 
41
41
  # Authenticate user by name/pass and retrieve login token
@@ -59,9 +59,8 @@ module SimpleCrowd
59
59
  # NOTE: call will return true even if token is invalid
60
60
  # @return [Boolean] success (does not guarantee valid token)
61
61
  def invalidate_user_token token
62
- simple_soap_call :invalidate_principal_token, token do |res|
63
- !res.soap_fault? && res.to_hash.key?(:invalidate_principal_token_response)
64
- end
62
+ simple_soap_call :invalidate_principal_token, token
63
+ true
65
64
  end
66
65
 
67
66
  def is_valid_user_token? token, factors = nil
@@ -86,27 +85,23 @@ module SimpleCrowd
86
85
  end
87
86
 
88
87
  def update_group group, description, active
89
- simple_soap_call :update_group, group, description, active do |res|
90
- !res.soap_fault? && res.to_hash.key?(:update_group_response)
91
- end
88
+ simple_soap_call :update_group, group, description, active
89
+ true
92
90
  end
93
91
 
94
92
  def add_user_to_group user, group
95
- simple_soap_call :add_principal_to_group, user, group do |res|
96
- !res.soap_fault? && res.to_hash.key?(:add_principal_to_group_response)
97
- end
93
+ simple_soap_call :add_principal_to_group, user, group
94
+ true
98
95
  end
99
96
 
100
97
  def remove_user_from_group user, group
101
- simple_soap_call :remove_principal_from_group, user, group do |res|
102
- !res.soap_fault? && res.to_hash.key?(:remove_principal_from_group_response)
103
- end
98
+ simple_soap_call :remove_principal_from_group, user, group
99
+ true
104
100
  end
105
101
 
106
102
  def reset_user_password name
107
- simple_soap_call :reset_principal_credential, name do |res|
108
- !res.soap_fault? && res.to_hash.key?(:reset_principal_credential_response)
109
- end
103
+ simple_soap_call :reset_principal_credential, name
104
+ true
110
105
  end
111
106
 
112
107
  def find_all_user_names
@@ -165,16 +160,14 @@ module SimpleCrowd
165
160
  end
166
161
 
167
162
  def remove_user name
168
- simple_soap_call :remove_principal, name do |res|
169
- !res.soap_fault? && res.to_hash.key?(:remove_principal_response)
170
- end
163
+ simple_soap_call :remove_principal, name
164
+ true
171
165
  end
172
166
 
173
167
  def update_user_credential user, credential, encrypted = false
174
168
  simple_soap_call :update_principal_credential, user,
175
- {'auth:credential' => credential, 'auth:encryptedCredential' => encrypted} do |res|
176
- !res.soap_fault? && res.to_hash.key?(:update_principal_credential_response)
177
- end
169
+ {'auth:credential' => credential, 'auth:encryptedCredential' => encrypted}
170
+ true
178
171
  end
179
172
 
180
173
  # Only supports single value attributes
@@ -185,9 +178,8 @@ module SimpleCrowd
185
178
  def update_user_attribute user, name, value
186
179
  return unless (name.is_a?(String) || name.is_a?(Symbol)) && (value.is_a?(String) || value.is_a?(Array))
187
180
  soap_attr = SimpleCrowd::Mappers::SoapAttributes.produce({name => value})
188
- simple_soap_call :update_principal_attribute, user, soap_attr['int:SOAPAttribute'][0] do |res|
189
- !res.soap_fault? && res.to_hash.key?(:update_principal_attribute_response)
190
- end
181
+ simple_soap_call :update_principal_attribute, user, soap_attr['int:SOAPAttribute'][0]
182
+ true
191
183
  end
192
184
  alias_method :add_user_attribute, :update_user_attribute
193
185
 
@@ -245,8 +237,23 @@ module SimpleCrowd
245
237
  end
246
238
  end
247
239
  end
248
- # If a block is given then call it and pass in the response object, otherwise get the default out value
249
- block_given? ? yield(response) : response.to_hash[:"#{action}_response"][:out]
240
+ response_hash = clean_response response.to_hash[:"#{action}_response"][:out]
241
+ # If a block is given then call it and pass in the response, otherwise get the default out value
242
+ block_given? ? yield(response_hash) : response_hash
243
+ end
244
+
245
+ # Savon returns strings with embedded SOAP/XML attributes. These don't serialize
246
+ # well and users shouldn't care that we use SOAP. Remove these attributes.
247
+ def clean_response(r)
248
+ case r
249
+ when Hash
250
+ r.each {|k,v| r[k] = clean_response(v)}
251
+ when Array
252
+ r = r.map {|v| clean_response(v)}
253
+ when Nori::StringWithAttributes
254
+ r = r.to_s
255
+ end
256
+ r
250
257
  end
251
258
 
252
259
  def convert_soap_errors
@@ -1,3 +1,3 @@
1
1
  module SimpleCrowd
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
data/test/test_client.rb CHANGED
@@ -2,6 +2,10 @@ require 'helper'
2
2
 
3
3
  class TestClient < Test::Unit::TestCase
4
4
  CROWD_CONFIG = YAML.load_file($CROWD_CONFIG_PATH)['crowd']
5
+ TEST_USER="test"
6
+ TEST_PASSWORD="test"
7
+ TEST_GROUP="Testing"
8
+ TEST_EMAIL="test@testing.com"
5
9
  context "A Client" do
6
10
  setup do
7
11
  @client = SimpleCrowd::Client.new({:service_url => CROWD_CONFIG['service_url'],
@@ -42,31 +46,31 @@ class TestClient < Test::Unit::TestCase
42
46
  assert_requested :post, @service_url, :times => 2
43
47
  end
44
48
  should "authenticate user" do
45
- token = @client.authenticate_user "test", "test"
49
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD
46
50
  token.should_not be nil
47
51
  token.length.should == 24
48
52
 
49
53
  assert_requested :post, @service_url, :times => 2
50
54
  end
51
55
  should "authenticate user with validation factors" do
52
- token = @client.authenticate_user "test", "test", {:test_factor => "test1234"}
56
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD, {:test_factor => "test1234"}
53
57
  token.should_not be nil
54
58
  token.length.should == 24
55
59
 
56
60
  assert_requested :post, @service_url, :times => 2
57
61
  end
58
62
  should "create user token without password" do
59
- token = @client.create_user_token "test"
63
+ token = @client.create_user_token TEST_USER
60
64
  token.should_not be nil
61
65
  token.length.should == 24
62
66
 
63
67
  assert_requested :post, @service_url, :times => 2
64
68
  end
65
69
  should "return same user token with or without password" do
66
- token_with_pass = @client.authenticate_user "test", "test"
70
+ token_with_pass = @client.authenticate_user TEST_USER, TEST_PASSWORD
67
71
  token_with_pass.should_not be nil
68
72
  token_with_pass.length.should == 24
69
- token_without_pass = @client.create_user_token "test"
73
+ token_without_pass = @client.create_user_token TEST_USER
70
74
  token_without_pass.should_not be nil
71
75
  token_with_pass.length.should == 24
72
76
 
@@ -75,7 +79,7 @@ class TestClient < Test::Unit::TestCase
75
79
  assert_requested :post, @service_url, :times => 3
76
80
  end
77
81
  should "validate user token" do
78
- token = @client.authenticate_user "test", "test"
82
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD
79
83
  valid = @client.is_valid_user_token? token
80
84
  valid.should be true
81
85
  invalid = @client.is_valid_user_token?(token + "void")
@@ -83,15 +87,15 @@ class TestClient < Test::Unit::TestCase
83
87
  assert_requested :post, @service_url, :times => 4
84
88
  end
85
89
  should "validate user token with factors" do
86
- token = @client.authenticate_user "test", "test", {"Random-Number" => 6375}
90
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD, {"Random-Number" => 6375}
87
91
  @client.is_valid_user_token?(token).should be false
88
92
  @client.is_valid_user_token?(token, {"Random-Number" => 6375}).should be true
89
- token2 = @client.authenticate_user "test", "test"
93
+ token2 = @client.authenticate_user TEST_USER, TEST_PASSWORD
90
94
  @client.is_valid_user_token?(token2, {"Random-Number" => 48289}).should be false
91
95
  assert_requested :post, @service_url, :times => 6
92
96
  end
93
97
  should "invalidate user token (logout)" do
94
- token = @client.authenticate_user "test", "test"
98
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD
95
99
  @client.is_valid_user_token?(token).should be true
96
100
 
97
101
  # Invalidate nonexistant token
@@ -117,24 +121,24 @@ class TestClient < Test::Unit::TestCase
117
121
  }
118
122
  stub_request(:post, @service_url).to_return(:body => response, :status => 200)
119
123
 
120
- @client.reset_user_password("test").should be true
124
+ @client.reset_user_password(TEST_USER).should be true
121
125
  end
122
126
  should "find all user names" do
123
127
  names = @client.find_all_user_names
124
128
  names.should_not be nil
125
129
  names.is_a?(Array).should be true
126
130
  names.empty?.should be false
127
- names.include?("test").should be true
131
+ names.include?(TEST_USER).should be true
128
132
  end
129
133
  should "find user by name" do
130
- user = @client.find_user_by_name "test"
134
+ user = @client.find_user_by_name TEST_USER
131
135
  user.should_not be nil
132
136
  [:id, :username, :description, :active, :directory_id, :first_name, :last_name, :email].each {|v| user.key?(v).should be true}
133
137
  [:id, :username, :active, :directory_id].each {|v| user[v].should_not be nil}
134
138
  assert_requested :post, @service_url, :times => 2
135
139
  end
136
140
  should "find user by token" do
137
- token = @client.authenticate_user "test", "test"
141
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD
138
142
  user = @client.find_user_by_token token
139
143
  user.should_not be nil
140
144
  user.first_name.should == "Test"
@@ -142,22 +146,22 @@ class TestClient < Test::Unit::TestCase
142
146
  assert_requested :post, @service_url, :times => 3
143
147
  end
144
148
  should "find username by token" do
145
- token = @client.authenticate_user "test", "test"
149
+ token = @client.authenticate_user TEST_USER, TEST_PASSWORD
146
150
  user = @client.find_username_by_token token
147
151
  user.should_not be nil
148
152
  user.length.should > 0
149
- user.should == "test"
153
+ user.should == TEST_USER
150
154
 
151
155
  assert_requested :post, @service_url, :times => 3
152
156
  end
153
157
  should "find user by email" do
154
- user = @client.find_user_by_email "test@testing.com"
158
+ user = @client.find_user_by_email TEST_EMAIL
155
159
  user.should_not be nil
156
160
  user.first_name.should == "Test"
157
161
  user.last_name.should == "User"
158
162
 
159
163
  # partial searches should return nothing
160
- user = @client.find_user_by_email "test"
164
+ user = @client.find_user_by_email TEST_EMAIL
161
165
  user.should be nil
162
166
 
163
167
  assert_requested :post, @service_url, :times => 3
@@ -170,10 +174,10 @@ class TestClient < Test::Unit::TestCase
170
174
  assert_requested :post, @service_url, :times => 2
171
175
  end
172
176
  should "search users" do
173
- users = @client.search_users({'principal.email' => "test@testing.com"})
177
+ users = @client.search_users({'principal.email' => TEST_EMAIL})
174
178
  users.should_not be nil
175
179
  users.empty?.should_not be true
176
- users.all?{|u| u.email == "test@testing.com" }.should be true
180
+ users.all?{|u| u.email == TEST_EMAIL }.should be true
177
181
 
178
182
  users = @client.search_users({'principal.fullname' => "Test"})
179
183
  users.should_not be nil
@@ -188,11 +192,11 @@ class TestClient < Test::Unit::TestCase
188
192
  assert_requested :post, @service_url, :times => 2
189
193
  end
190
194
  should "update user credential" do
191
- @client.authenticate_user("test", "test").should_not be nil
192
- @client.update_user_credential("test", "testupdate").should be true
193
- lambda {@client.authenticate_user("test", "test")}.should raise_error
194
- @client.authenticate_user("test", "testupdate").should_not be nil
195
- @client.update_user_credential("test", "test").should be true
195
+ @client.authenticate_user(TEST_USER, TEST_PASSWORD).should_not be nil
196
+ @client.update_user_credential(TEST_USER, "testupdate").should be true
197
+ lambda {@client.authenticate_user(TEST_USER, TEST_PASSWORD)}.should raise_error
198
+ @client.authenticate_user(TEST_USER, "testupdate").should_not be nil
199
+ @client.update_user_credential(TEST_USER, TEST_PASSWORD).should be true
196
200
  end
197
201
  should "add/remove user" do
198
202
  localuser = FactoryGirl.build(:user)
@@ -284,7 +288,7 @@ class TestClient < Test::Unit::TestCase
284
288
  assert_requested :post, @service_url, :times => 2
285
289
  end
286
290
  should "find group by name" do
287
- group = @client.find_group_by_name("Testing")
291
+ group = @client.find_group_by_name(TEST_GROUP)
288
292
  group.should_not be nil
289
293
  assert_requested :post, @service_url, :times => 2
290
294
  end
@@ -293,13 +297,13 @@ class TestClient < Test::Unit::TestCase
293
297
  names.should_not be nil
294
298
  names.is_a?(Array).should be true
295
299
  names.empty?.should be false
296
- names.include?("Testing").should be true
300
+ names.include?(TEST_GROUP).should be true
297
301
  end
298
302
  should "add/remove user from group" do
299
- @client.add_user_to_group("test", "Testing").should be true
300
- @client.is_group_member?("Testing", "test").should be true
301
- @client.remove_user_from_group("test", "Testing").should be true
302
- @client.is_group_member?("Testing", "test").should be false
303
+ @client.add_user_to_group(TEST_USER, TEST_GROUP).should be true
304
+ @client.is_group_member?(TEST_GROUP, TEST_USER).should be true
305
+ @client.remove_user_from_group(TEST_USER, TEST_GROUP).should be true
306
+ @client.is_group_member?(TEST_GROUP, TEST_USER).should be false
303
307
  assert_requested :post, @service_url, :times => 5
304
308
  end
305
309
  # should "add/remove attribute from group" do
@@ -307,17 +311,17 @@ class TestClient < Test::Unit::TestCase
307
311
  # @client.remove_attribute_from_group("test", "tmpattribute").should be true
308
312
  # end
309
313
  should "update group" do
310
- @client.find_group_by_name("Testing").active.should be true
311
- @client.update_group("Testing", "Test Description", false).should be true
312
- updated_group = @client.find_group_by_name("Testing")
314
+ @client.find_group_by_name(TEST_GROUP).active.should be true
315
+ @client.update_group(TEST_GROUP, "Test Description", false).should be true
316
+ updated_group = @client.find_group_by_name(TEST_GROUP)
313
317
  updated_group.active.should be false
314
318
  updated_group.description.should == "Test Description"
315
- @client.update_group("Testing", "", true).should be true
319
+ @client.update_group(TEST_GROUP, "", true).should be true
316
320
  end
317
321
  should "check if user is group member" do
318
- @client.add_user_to_group("test", "Testing").should be true
319
- @client.is_group_member?("Testing", "test").should be true
320
- @client.is_group_member?("nonexistantgroup", "test").should be false
322
+ @client.add_user_to_group(TEST_USER, TEST_GROUP).should be true
323
+ @client.is_group_member?(TEST_GROUP, TEST_USER).should be true
324
+ @client.is_group_member?("nonexistantgroup", TEST_USER).should be false
321
325
  assert_requested :post, @service_url, :times => 4
322
326
  end
323
327
  should "accept cached app token" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_crowd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000 Z
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  version: '0'
125
125
  requirements: []
126
126
  rubyforge_project: simple_crowd
127
- rubygems_version: 1.8.21
127
+ rubygems_version: 1.8.24
128
128
  signing_key:
129
129
  specification_version: 3
130
130
  summary: Simple Atlassian Crowd client using REST and SOAP APIs where needed.