scim_engine 2.1.2 → 2.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d949ba2807cdfbd9d4a623e82eadbc082a5c750321e61eabd28bf0a5a3a6f6a
4
- data.tar.gz: 50238ef29ec508de2854fd7e2561ca34afee1cd681561ca1a68aa34ab86aca84
3
+ metadata.gz: c4935d10c2a0265d6ad74b30fe8bab2bd9a3d867d15b210c41d61e64816c0cd8
4
+ data.tar.gz: e413c98be8a8a3129f03b133a41f99706bb9600a1e2b9668fcb1df32faf03089
5
5
  SHA512:
6
- metadata.gz: c6c5f211824f11e7d10487bf7911f86e7f23bdc0975a96c9e54c425bae7b3e696433da7bfb868270d56aab24a055fab17616f0306847caa944d84b1977354b1a
7
- data.tar.gz: 4b80414d39224d0be9760c19f7d2479b4764ad7946f2153b6716d19e9121ae3fe1cf2227e33e2758b59e71c39c88cb50ae54370ed62b2b6266cb8524823cd9ef
6
+ metadata.gz: 7e97a91458c7d2cae077a0d20a430704ff96f8fcf3f3c2bb0a147bcc82977d5cb5e5ff49fc260ffb70fbb5b1851af29678ac96555626127c4d0a524e324fbf0f
7
+ data.tar.gz: 751fada99f37c2301930ba3a12bfbf323078ac2424437ae33b38e7f9d8e2cf79b5b5fac9093be9a4b22e3a309949b960ddffa4c4c37c5ffa0a66faa1d16c6c7b
@@ -7,6 +7,8 @@ module ScimEngine
7
7
 
8
8
  def authenticated?
9
9
  authenticate_with_http_basic do |name, password|
10
+ return handle_unauthorized unless password.present?
11
+
10
12
  name == ScimEngine::Engine.username && password == ScimEngine::Engine.password
11
13
  end
12
14
  end
@@ -23,6 +25,10 @@ module ScimEngine
23
25
  handle_scim_error(ErrorResponse.new(status: 400, detail: "Operation failed since record has become invalid: #{error_message}"))
24
26
  end
25
27
 
28
+ def handle_unauthorized
29
+ handle_scim_error(ErrorResponse.new(status: 401, detail: "Invalid credentails"))
30
+ end
31
+
26
32
  def handle_scim_error(error_response)
27
33
  render json: error_response, status: error_response.status
28
34
  end
@@ -1,3 +1,3 @@
1
1
  module ScimEngine
2
- VERSION = "2.1.2"
2
+ VERSION = "2.1.3"
3
3
  end
@@ -38,7 +38,6 @@ describe ScimEngine::ApplicationController do
38
38
  expect(response).not_to be_ok
39
39
  end
40
40
 
41
-
42
41
  it 'renders failure with bad user name and password' do
43
42
  request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('C', 'D')
44
43
 
@@ -46,8 +45,12 @@ describe ScimEngine::ApplicationController do
46
45
  expect(response).not_to be_ok
47
46
  end
48
47
 
48
+ it 'renders failure with blank password' do
49
+ request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('A', '')
49
50
 
50
-
51
+ get :index, params: { format: :scim }
52
+ expect(response).not_to be_ok
53
+ end
51
54
  end
52
55
 
53
56
 
@@ -1,227 +1,55 @@
1
- Processing by ScimEngine::ResourcesController#show as SCIM
2
- Parameters: {"id"=>"10"}
3
- Completed 200 OK in 44ms (Views: 2.3ms)
4
- Processing by ScimEngine::ResourcesController#create as SCIM
5
- Completed 400 Bad Request in 3ms (Views: 0.9ms)
6
- Processing by ScimEngine::ResourcesController#create as SCIM
7
- Parameters: {"displayName"=>"Sauron biz"}
8
- Completed 201 Created in 2ms (Views: 0.5ms)
9
- Processing by ScimEngine::ResourcesController#update as SCIM
10
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
11
- Completed 400 Bad Request in 11ms (Views: 0.8ms)
12
- Processing by ScimEngine::ResourcesController#update as SCIM
13
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
14
- Completed 400 Bad Request in 2ms (Views: 0.6ms)
15
- Processing by ScimEngine::ResourcesController#create as SCIM
16
- Parameters: {"displayName"=>"sauron", "id"=>"some-id"}
17
- Completed 400 Bad Request in 1ms (Views: 0.3ms)
18
- Processing by ScimEngine::ResourcesController#create as SCIM
19
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
20
- Completed 201 Created in 1ms (Views: 0.4ms)
21
- Processing by ScimEngine::ResourcesController#update as SCIM
22
- Parameters: {"id"=>"group-id"}
23
- Completed 400 Bad Request in 1ms (Views: 0.6ms)
24
- Processing by ScimEngine::ResourcesController#update as SCIM
25
- Parameters: {"displayName"=>"sauron", "id"=>"group-id"}
26
- Completed 200 OK in 2ms (Views: 0.4ms)
27
- Processing by ScimEngine::ResourcesController#update as SCIM
28
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
29
- Completed 400 Bad Request in 2ms (Views: 0.5ms)
30
- Processing by ScimEngine::ResourcesController#update as SCIM
31
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
32
- Completed 400 Bad Request in 3ms (Views: 0.8ms)
33
- Processing by ScimEngine::ResourcesController#destroy as SCIM
34
- Parameters: {"id"=>"group-id"}
35
- Completed 204 No Content in 0ms
36
- Processing by ScimEngine::ResourcesController#destroy as SCIM
37
- Parameters: {"id"=>"group-id"}
38
- Completed 500 Internal Server Error in 1ms (Views: 0.3ms)
39
- Processing by ScimEngine::ResourcesController#create as SCIM
40
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
41
- Completed 201 Created in 31ms (Views: 1.3ms)
42
- Processing by ScimEngine::ResourcesController#create as SCIM
43
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
44
- Completed 201 Created in 36ms (Views: 1.8ms)
45
- Processing by ScimEngine::ResourcesController#create as SCIM
46
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
47
- Completed 201 Created in 35ms (Views: 1.7ms)
48
- Processing by ScimEngine::ResourcesController#show as SCIM
49
- Parameters: {"id"=>"10"}
50
- Completed 200 OK in 32ms (Views: 1.4ms)
51
- Processing by ScimEngine::ResourcesController#show as SCIM
52
- Parameters: {"id"=>"10"}
53
- Completed 200 OK in 44ms (Views: 1.6ms)
54
- Processing by ScimEngine::ResourcesController#create as SCIM
55
- Completed 400 Bad Request in 2ms (Views: 0.5ms)
56
- Processing by ScimEngine::ResourcesController#create as SCIM
57
- Parameters: {"displayName"=>"Sauron biz"}
58
- Completed 201 Created in 1ms (Views: 0.3ms)
59
- Processing by ScimEngine::ResourcesController#update as SCIM
60
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
61
- Completed 400 Bad Request in 6ms (Views: 0.6ms)
62
- Processing by ScimEngine::ResourcesController#update as SCIM
63
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
64
- Completed 400 Bad Request in 2ms (Views: 0.5ms)
65
- Processing by ScimEngine::ResourcesController#create as SCIM
66
- Parameters: {"displayName"=>"sauron", "id"=>"some-id"}
67
- Completed 400 Bad Request in 0ms (Views: 0.1ms)
68
- Processing by ScimEngine::ResourcesController#create as SCIM
69
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
70
- Completed 201 Created in 1ms (Views: 0.2ms)
71
- Processing by ScimEngine::ResourcesController#update as SCIM
72
- Parameters: {"id"=>"group-id"}
73
- Completed 400 Bad Request in 1ms (Views: 0.4ms)
74
- Processing by ScimEngine::ResourcesController#update as SCIM
75
- Parameters: {"displayName"=>"sauron", "id"=>"group-id"}
76
- Completed 200 OK in 1ms (Views: 0.2ms)
77
- Processing by ScimEngine::ResourcesController#update as SCIM
78
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
79
- Completed 400 Bad Request in 1ms (Views: 0.4ms)
80
- Processing by ScimEngine::ResourcesController#update as SCIM
81
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
82
- Completed 400 Bad Request in 1ms (Views: 0.5ms)
83
- Processing by ScimEngine::ResourcesController#destroy as SCIM
84
- Parameters: {"id"=>"group-id"}
85
- Completed 204 No Content in 0ms
86
- Processing by ScimEngine::ResourcesController#destroy as SCIM
87
- Parameters: {"id"=>"group-id"}
88
- Completed 500 Internal Server Error in 0ms (Views: 0.1ms)
89
- Processing by ScimEngine::ApplicationController#index as SCIM
90
- Completed 200 OK in 1ms (Views: 0.2ms)
91
- Processing by ScimEngine::ApplicationController#index as SCIM
92
- Filter chain halted as :authenticate rendered or redirected
93
- Completed 401 Unauthorized in 2ms (Views: 0.2ms)
94
- Processing by ScimEngine::ApplicationController#index as SCIM
95
- Filter chain halted as :authenticate rendered or redirected
96
- Completed 401 Unauthorized in 0ms (Views: 0.2ms)
97
- Processing by ScimEngine::ApplicationController#index as SCIM
98
- Filter chain halted as :authenticate rendered or redirected
99
- Completed 401 Unauthorized in 1ms (Views: 0.4ms)
100
1
  Processing by ScimEngine::ApplicationController#index as SCIM
101
2
  Completed 200 OK in 0ms (Views: 0.2ms)
102
3
  Processing by ScimEngine::ApplicationController#index as SCIM
103
4
  Filter chain halted as :authenticate rendered or redirected
104
- Completed 401 Unauthorized in 1ms (Views: 0.2ms)
105
- Processing by ScimEngine::ApplicationController#index as SCIM
106
- Parameters: {"id"=>"10"}
107
- Completed 404 Not Found in 4ms (Views: 1.2ms)
108
- Processing by ScimEngine::ApplicationController#index as HTML
109
- Filter chain halted as :require_scim rendered or redirected
110
- Completed 406 Not Acceptable in 1ms (Views: 0.3ms)
111
- Processing by ScimEngine::ResourceTypesController#index as SCIM
112
- Completed 200 OK in 6ms (Views: 0.8ms)
113
- Processing by ScimEngine::ResourceTypesController#index as SCIM
114
- Completed 200 OK in 2ms (Views: 0.8ms)
115
- Processing by ScimEngine::ResourceTypesController#show as SCIM
116
- Parameters: {"name"=>"User"}
117
- Completed 200 OK in 1ms (Views: 0.3ms)
118
- Processing by ScimEngine::ResourceTypesController#show as SCIM
119
- Parameters: {"name"=>"Group"}
120
- Completed 200 OK in 2ms (Views: 0.6ms)
121
- Processing by ScimEngine::ResourceTypesController#show as SCIM
122
- Parameters: {"name"=>"Gaga"}
123
- Completed 200 OK in 2ms (Views: 0.4ms)
124
- Processing by ScimEngine::ResourcesController#show as SCIM
125
- Parameters: {"id"=>"10"}
126
- Completed 200 OK in 5ms (Views: 0.8ms)
127
- Processing by ScimEngine::ResourcesController#create as SCIM
128
- Completed 400 Bad Request in 1ms (Views: 0.7ms)
129
- Processing by ScimEngine::ResourcesController#create as SCIM
130
- Parameters: {"displayName"=>"Sauron biz"}
131
- Completed 201 Created in 1ms (Views: 0.5ms)
132
- Processing by ScimEngine::ResourcesController#update as SCIM
133
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
134
- Completed 400 Bad Request in 10ms (Views: 0.6ms)
135
- Processing by ScimEngine::ResourcesController#update as SCIM
136
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
137
- Completed 400 Bad Request in 2ms (Views: 0.8ms)
138
- Processing by ScimEngine::ResourcesController#create as SCIM
139
- Parameters: {"displayName"=>"sauron", "id"=>"some-id"}
140
- Completed 400 Bad Request in 0ms (Views: 0.2ms)
141
- Processing by ScimEngine::ResourcesController#create as SCIM
142
- Parameters: {"displayName"=>"sauron", "externalId"=>"some-id"}
143
- Completed 201 Created in 1ms (Views: 0.3ms)
144
- Processing by ScimEngine::ResourcesController#update as SCIM
145
- Parameters: {"id"=>"group-id"}
146
- Completed 400 Bad Request in 1ms (Views: 0.6ms)
147
- Processing by ScimEngine::ResourcesController#update as SCIM
148
- Parameters: {"displayName"=>"sauron", "id"=>"group-id"}
149
- Completed 200 OK in 1ms (Views: 0.2ms)
150
- Processing by ScimEngine::ResourcesController#update as SCIM
151
- Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
152
- Completed 400 Bad Request in 2ms (Views: 0.5ms)
153
- Processing by ScimEngine::ResourcesController#update as SCIM
154
- Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
155
- Completed 400 Bad Request in 2ms (Views: 0.6ms)
156
- Processing by ScimEngine::ResourcesController#destroy as SCIM
157
- Parameters: {"id"=>"group-id"}
158
- Completed 204 No Content in 0ms
159
- Processing by ScimEngine::ResourcesController#destroy as SCIM
160
- Parameters: {"id"=>"group-id"}
161
- Completed 500 Internal Server Error in 0ms (Views: 0.2ms)
162
- Processing by ScimEngine::SchemasController#index as SCIM
163
- Completed 200 OK in 4ms (Views: 3.3ms)
164
- Processing by ScimEngine::SchemasController#index as SCIM
165
- Parameters: {"name"=>"urn:ietf:params:scim:schemas:core:2.0:User"}
166
- Completed 200 OK in 3ms (Views: 2.5ms)
167
- Processing by ScimEngine::SchemasController#index as SCIM
168
- Parameters: {"name"=>"urn:ietf:params:scim:schemas:core:2.0:Group"}
169
- Completed 200 OK in 1ms (Views: 0.8ms)
170
- Processing by ScimEngine::SchemasController#index as SCIM
171
- Parameters: {"name"=>"License"}
172
- Completed 200 OK in 1ms (Views: 0.4ms)
173
- Processing by ScimEngine::ServiceProviderConfigurationsController#show as SCIM
174
- Parameters: {"id"=>"fake"}
175
- Completed 200 OK in 4ms (Views: 0.5ms)
176
- Processing by ScimEngine::ApplicationController#index as SCIM
177
- Completed 200 OK in 1ms (Views: 0.2ms)
5
+ Completed 401 Unauthorized in 1ms (Views: 0.1ms)
178
6
  Processing by ScimEngine::ApplicationController#index as SCIM
179
7
  Filter chain halted as :authenticate rendered or redirected
180
- Completed 401 Unauthorized in 2ms (Views: 0.2ms)
8
+ Completed 401 Unauthorized in 0ms (Views: 0.2ms)
181
9
  Processing by ScimEngine::ApplicationController#index as SCIM
182
10
  Filter chain halted as :authenticate rendered or redirected
183
- Completed 401 Unauthorized in 1ms (Views: 0.2ms)
11
+ Completed 401 Unauthorized in 0ms (Views: 0.1ms)
184
12
  Processing by ScimEngine::ApplicationController#index as SCIM
185
13
  Filter chain halted as :authenticate rendered or redirected
186
- Completed 401 Unauthorized in 0ms (Views: 0.2ms)
14
+ Completed 401 Unauthorized in 0ms (Views: 0.1ms)
187
15
  Processing by ScimEngine::ApplicationController#index as SCIM
188
16
  Completed 200 OK in 0ms (Views: 0.1ms)
189
17
  Processing by ScimEngine::ApplicationController#index as SCIM
190
18
  Filter chain halted as :authenticate rendered or redirected
191
- Completed 401 Unauthorized in 0ms (Views: 0.2ms)
19
+ Completed 401 Unauthorized in 0ms (Views: 0.1ms)
192
20
  Processing by ScimEngine::ApplicationController#index as SCIM
193
21
  Parameters: {"id"=>"10"}
194
- Completed 404 Not Found in 2ms (Views: 0.7ms)
22
+ Completed 404 Not Found in 1ms (Views: 0.2ms)
195
23
  Processing by ScimEngine::ApplicationController#index as HTML
196
24
  Filter chain halted as :require_scim rendered or redirected
197
25
  Completed 406 Not Acceptable in 0ms (Views: 0.2ms)
198
26
  Processing by ScimEngine::ResourceTypesController#index as SCIM
199
- Completed 200 OK in 4ms (Views: 0.6ms)
27
+ Completed 200 OK in 2ms (Views: 0.3ms)
200
28
  Processing by ScimEngine::ResourceTypesController#index as SCIM
201
- Completed 200 OK in 1ms (Views: 0.4ms)
29
+ Completed 200 OK in 1ms (Views: 0.3ms)
202
30
  Processing by ScimEngine::ResourceTypesController#show as SCIM
203
31
  Parameters: {"name"=>"User"}
204
32
  Completed 200 OK in 1ms (Views: 0.2ms)
205
33
  Processing by ScimEngine::ResourceTypesController#show as SCIM
206
34
  Parameters: {"name"=>"Group"}
207
- Completed 200 OK in 1ms (Views: 0.3ms)
35
+ Completed 200 OK in 1ms (Views: 0.2ms)
208
36
  Processing by ScimEngine::ResourceTypesController#show as SCIM
209
37
  Parameters: {"name"=>"Gaga"}
210
38
  Completed 200 OK in 1ms (Views: 0.2ms)
211
39
  Processing by ScimEngine::ResourcesController#show as SCIM
212
40
  Parameters: {"id"=>"10"}
213
- Completed 200 OK in 3ms (Views: 0.2ms)
41
+ Completed 200 OK in 2ms (Views: 0.2ms)
214
42
  Processing by ScimEngine::ResourcesController#create as SCIM
215
- Completed 400 Bad Request in 1ms (Views: 0.5ms)
43
+ Completed 400 Bad Request in 0ms (Views: 0.1ms)
216
44
  Processing by ScimEngine::ResourcesController#create as SCIM
217
45
  Parameters: {"displayName"=>"Sauron biz"}
218
46
  Completed 201 Created in 1ms (Views: 0.2ms)
219
47
  Processing by ScimEngine::ResourcesController#update as SCIM
220
48
  Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
221
- Completed 400 Bad Request in 7ms (Views: 0.5ms)
49
+ Completed 400 Bad Request in 4ms (Views: 0.1ms)
222
50
  Processing by ScimEngine::ResourcesController#update as SCIM
223
51
  Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
224
- Completed 400 Bad Request in 2ms (Views: 0.6ms)
52
+ Completed 400 Bad Request in 1ms (Views: 0.1ms)
225
53
  Processing by ScimEngine::ResourcesController#create as SCIM
226
54
  Parameters: {"displayName"=>"sauron", "id"=>"some-id"}
227
55
  Completed 400 Bad Request in 0ms (Views: 0.1ms)
@@ -230,33 +58,33 @@ Processing by ScimEngine::ResourcesController#create as SCIM
230
58
  Completed 201 Created in 1ms (Views: 0.3ms)
231
59
  Processing by ScimEngine::ResourcesController#update as SCIM
232
60
  Parameters: {"id"=>"group-id"}
233
- Completed 400 Bad Request in 1ms (Views: 0.5ms)
61
+ Completed 400 Bad Request in 0ms (Views: 0.1ms)
234
62
  Processing by ScimEngine::ResourcesController#update as SCIM
235
63
  Parameters: {"displayName"=>"sauron", "id"=>"group-id"}
236
64
  Completed 200 OK in 1ms (Views: 0.2ms)
237
65
  Processing by ScimEngine::ResourcesController#update as SCIM
238
66
  Parameters: {"name"=>{"email"=>"a@b.com"}, "id"=>"group-id"}
239
- Completed 400 Bad Request in 2ms (Views: 0.8ms)
67
+ Completed 400 Bad Request in 1ms (Views: 0.2ms)
240
68
  Processing by ScimEngine::ResourcesController#update as SCIM
241
69
  Parameters: {"displayName"=>"invalid name", "id"=>"group-id"}
242
- Completed 400 Bad Request in 1ms (Views: 0.5ms)
70
+ Completed 400 Bad Request in 1ms (Views: 0.1ms)
243
71
  Processing by ScimEngine::ResourcesController#destroy as SCIM
244
72
  Parameters: {"id"=>"group-id"}
245
73
  Completed 204 No Content in 0ms
246
74
  Processing by ScimEngine::ResourcesController#destroy as SCIM
247
75
  Parameters: {"id"=>"group-id"}
248
- Completed 500 Internal Server Error in 0ms (Views: 0.2ms)
76
+ Completed 500 Internal Server Error in 0ms (Views: 0.1ms)
249
77
  Processing by ScimEngine::SchemasController#index as SCIM
250
- Completed 200 OK in 3ms (Views: 2.2ms)
78
+ Completed 200 OK in 2ms (Views: 1.7ms)
251
79
  Processing by ScimEngine::SchemasController#index as SCIM
252
80
  Parameters: {"name"=>"urn:ietf:params:scim:schemas:core:2.0:User"}
253
- Completed 200 OK in 2ms (Views: 1.5ms)
81
+ Completed 200 OK in 2ms (Views: 1.3ms)
254
82
  Processing by ScimEngine::SchemasController#index as SCIM
255
83
  Parameters: {"name"=>"urn:ietf:params:scim:schemas:core:2.0:Group"}
256
84
  Completed 200 OK in 1ms (Views: 0.7ms)
257
85
  Processing by ScimEngine::SchemasController#index as SCIM
258
86
  Parameters: {"name"=>"License"}
259
- Completed 200 OK in 1ms (Views: 0.4ms)
87
+ Completed 200 OK in 1ms (Views: 0.3ms)
260
88
  Processing by ScimEngine::ServiceProviderConfigurationsController#show as SCIM
261
89
  Parameters: {"id"=>"fake"}
262
- Completed 200 OK in 5ms (Views: 0.7ms)
90
+ Completed 200 OK in 3ms (Views: 0.3ms)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scim_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-04 00:00:00.000000000 Z
11
+ date: 2020-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -201,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
201
  version: '0'
202
202
  requirements: []
203
203
  rubyforge_project:
204
- rubygems_version: 2.7.6
204
+ rubygems_version: 2.7.7
205
205
  signing_key:
206
206
  specification_version: 4
207
207
  summary: A general purpase SCIM implementation that could be plugged into rails applications