scim_rails 0.2.0 → 0.4.0

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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -0
  3. data/Rakefile +1 -1
  4. data/app/controllers/concerns/scim_rails/exception_handler.rb +8 -5
  5. data/app/controllers/scim_rails/application_controller.rb +20 -4
  6. data/app/controllers/scim_rails/scim_users_controller.rb +28 -10
  7. data/config/environment.rb +0 -0
  8. data/lib/generators/scim_rails/templates/initializer.rb +19 -3
  9. data/lib/scim_rails.rb +1 -0
  10. data/lib/scim_rails/config.rb +17 -5
  11. data/lib/scim_rails/encoder.rb +25 -0
  12. data/lib/scim_rails/version.rb +3 -1
  13. data/spec/controllers/scim_rails/scim_users_controller_spec.rb +144 -59
  14. data/spec/controllers/scim_rails/scim_users_request_spec.rb +41 -19
  15. data/spec/dummy/config/initializers/scim_rails_config.rb +3 -0
  16. data/spec/dummy/config/routes.rb +1 -1
  17. data/spec/dummy/db/development.sqlite3 +0 -0
  18. data/spec/dummy/db/test.sqlite3 +0 -0
  19. data/spec/dummy/log/test.log +5267 -56757
  20. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K3/K3kRdEIVqv2uHDkXatQjmCumpOCKxtnexZuiH4Ad37A.cache +1 -0
  21. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TH/THOPrXYljWHCQGbFjofWsaZNw7w-hfqfI3-hnxWyGas.cache +1 -0
  22. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TW/TW6bO0RoLe0_sbLapNXYMgZbgPTnnSFdrhh6pv917KA.cache +2 -0
  23. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kW/kWKxWPvgf53JDnfwnEOVTJYtSWS971rKq3BhmUzYaXY.cache +1 -0
  24. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mX/mX1nlsL_SWOB4y22W5FheRX0YEONKyOY7xUeIvRiHco.cache +2 -0
  25. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pR/pRHZ5T7C7u6vDXHn5oM357U3KshRFgRMbA53zz4Azcw.cache +0 -0
  26. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q8/q8BHffCjwsZ85QWxK1lyx5t_0jQSLlTtLGhRrwuWXGI.cache +0 -0
  27. data/spec/factories/company.rb +4 -1
  28. data/spec/lib/scim_rails/encoder_spec.rb +62 -0
  29. data/spec/support/scim_rails_config.rb +3 -0
  30. metadata +65 -15
  31. data/spec/dummy/log/development.log +0 -37
@@ -0,0 +1 @@
1
+ "%�aY}�)�vH`�=�T��y��-��0�@��g~�
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=a9d06834a4c5a044d2334d66055c72553c283ddbc7e32583225f5d011eb3d0e0:ET
@@ -0,0 +1,2 @@
1
+ "%��T���l�
2
+ %�`H�!o��"��}�M�g�
@@ -0,0 +1 @@
1
+ "%��B�����șo�$'�A�d��L���xR�U
@@ -2,6 +2,9 @@ FactoryBot.define do
2
2
  factory :company do
3
3
  name { "Test Company" }
4
4
  subdomain { "test" }
5
- api_token { "1" }
5
+
6
+ after(:build) do |company|
7
+ company.api_token = ScimRails::Encoder.encode(company)
8
+ end
6
9
  end
7
10
  end
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+
3
+ describe ScimRails::Encoder do
4
+ let(:company) { Company.new(subdomain: "test") }
5
+
6
+ describe "::encode" do
7
+ context "with signing configuration" do
8
+ it "generates a signed token with the company attribute" do
9
+ token = ScimRails::Encoder.encode(company)
10
+ payload = ScimRails::Encoder.decode(token)
11
+
12
+ expect(token).to match /[a-z|A-Z|0-9.]{16,}\.[a-z|A-Z|0-9.]{16,}/
13
+ expect(payload).to contain_exactly(["iat", Integer], ["subdomain", "test"])
14
+ end
15
+ end
16
+
17
+ context "without signing configuration" do
18
+ before do
19
+ allow(ScimRails.config).to receive(:signing_secret).and_return(nil)
20
+ allow(ScimRails.config).to receive(:signing_algorithm).and_return(ScimRails::Config::ALGO_NONE)
21
+ end
22
+
23
+ it "generates an unsigned token with the company attribute" do
24
+ token = ScimRails::Encoder.encode(company)
25
+ payload = ScimRails::Encoder.decode(token)
26
+
27
+ expect(token).to match /[a-z|A-Z|0-9.]{16,}/
28
+ expect(payload).to contain_exactly(["iat", Integer], ["subdomain", "test"])
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "::decode" do
34
+ let(:token) { ScimRails::Encoder.encode(company) }
35
+
36
+ it "raises InvalidCredentials error for an invalid token" do
37
+ token = "f487bf84bfub4f74fj4894fnh483f4h4u8f"
38
+ expect { ScimRails::Encoder.decode(token) }.to raise_error ScimRails::ExceptionHandler::InvalidCredentials
39
+ end
40
+
41
+ context "with signing configuration" do
42
+ it "decodes a signed token, returning the company attributes" do
43
+ payload = ScimRails::Encoder.decode(token)
44
+
45
+ expect(payload).to contain_exactly(["iat", Integer], ["subdomain", "test"])
46
+ end
47
+ end
48
+
49
+ context "without signing configuration" do
50
+ before do
51
+ allow(ScimRails.config).to receive(:signing_secret).and_return(nil)
52
+ allow(ScimRails.config).to receive(:signing_algorithm).and_return(ScimRails::Config::ALGO_NONE)
53
+ end
54
+
55
+ it "decodes an unsigned token, returning the company attributes" do
56
+ payload = ScimRails::Encoder.decode(token)
57
+
58
+ expect(payload).to contain_exactly(["iat", Integer], ["subdomain", "test"])
59
+ end
60
+ end
61
+ end
62
+ end
@@ -10,6 +10,9 @@ ScimRails.configure do |config|
10
10
  config.scim_users_scope = :users
11
11
  config.scim_users_list_order = :id
12
12
 
13
+ config.signing_algorithm = "HS256"
14
+ config.signing_secret = "2d6806dd11c2fece2e81b8ca76dcb0062f5b08e28e3264e8ba1c44bbd3578b70"
15
+
13
16
  config.user_deprovision_method = :archive!
14
17
  config.user_reprovision_method = :unarchive!
15
18
 
metadata CHANGED
@@ -1,29 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scim_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spencer Alan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-09 00:00:00.000000000 Z
11
+ date: 2021-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '5.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '5.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: jwt
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.5'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.5'
47
+ - !ruby/object:Gem::Dependency
48
+ name: appraisal
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
27
61
  - !ruby/object:Gem::Dependency
28
62
  name: bundler
29
63
  requirement: !ruby/object:Gem::Requirement
@@ -58,28 +92,28 @@ dependencies:
58
92
  requirements:
59
93
  - - "~>"
60
94
  - !ruby/object:Gem::Version
61
- version: '10.0'
95
+ version: '13.0'
62
96
  type: :development
63
97
  prerelease: false
64
98
  version_requirements: !ruby/object:Gem::Requirement
65
99
  requirements:
66
100
  - - "~>"
67
101
  - !ruby/object:Gem::Version
68
- version: '10.0'
102
+ version: '13.0'
69
103
  - !ruby/object:Gem::Dependency
70
104
  name: rspec-rails
71
105
  requirement: !ruby/object:Gem::Requirement
72
106
  requirements:
73
107
  - - "~>"
74
108
  - !ruby/object:Gem::Version
75
- version: '3.0'
109
+ version: '5.0'
76
110
  type: :development
77
111
  prerelease: false
78
112
  version_requirements: !ruby/object:Gem::Requirement
79
113
  requirements:
80
114
  - - "~>"
81
115
  - !ruby/object:Gem::Version
82
- version: '3.0'
116
+ version: '5.0'
83
117
  - !ruby/object:Gem::Dependency
84
118
  name: sqlite3
85
119
  requirement: !ruby/object:Gem::Requirement
@@ -89,7 +123,7 @@ dependencies:
89
123
  version: '1.3'
90
124
  - - "<"
91
125
  - !ruby/object:Gem::Version
92
- version: '1.4'
126
+ version: '1.5'
93
127
  type: :development
94
128
  prerelease: false
95
129
  version_requirements: !ruby/object:Gem::Requirement
@@ -99,7 +133,7 @@ dependencies:
99
133
  version: '1.3'
100
134
  - - "<"
101
135
  - !ruby/object:Gem::Version
102
- version: '1.4'
136
+ version: '1.5'
103
137
  description: SCIM Adapter for Rails.
104
138
  email:
105
139
  - devops@lessonly.com
@@ -119,6 +153,7 @@ files:
119
153
  - app/models/scim_rails/authorize_api_request.rb
120
154
  - app/models/scim_rails/scim_count.rb
121
155
  - app/models/scim_rails/scim_query_parser.rb
156
+ - config/environment.rb
122
157
  - config/initializers/mime_types.rb
123
158
  - config/routes.rb
124
159
  - lib/generators/scim_rails/USAGE
@@ -126,6 +161,7 @@ files:
126
161
  - lib/generators/scim_rails/templates/initializer.rb
127
162
  - lib/scim_rails.rb
128
163
  - lib/scim_rails/config.rb
164
+ - lib/scim_rails/encoder.rb
129
165
  - lib/scim_rails/engine.rb
130
166
  - lib/scim_rails/version.rb
131
167
  - lib/tasks/scim_rails_tasks.rake
@@ -184,7 +220,6 @@ files:
184
220
  - spec/dummy/db/schema.rb
185
221
  - spec/dummy/db/seeds.rb
186
222
  - spec/dummy/db/test.sqlite3
187
- - spec/dummy/log/development.log
188
223
  - spec/dummy/log/test.log
189
224
  - spec/dummy/public/404.html
190
225
  - spec/dummy/public/422.html
@@ -192,8 +227,16 @@ files:
192
227
  - spec/dummy/public/apple-touch-icon-precomposed.png
193
228
  - spec/dummy/public/apple-touch-icon.png
194
229
  - spec/dummy/public/favicon.ico
230
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/K3/K3kRdEIVqv2uHDkXatQjmCumpOCKxtnexZuiH4Ad37A.cache
231
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/TH/THOPrXYljWHCQGbFjofWsaZNw7w-hfqfI3-hnxWyGas.cache
232
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/TW/TW6bO0RoLe0_sbLapNXYMgZbgPTnnSFdrhh6pv917KA.cache
233
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/kW/kWKxWPvgf53JDnfwnEOVTJYtSWS971rKq3BhmUzYaXY.cache
234
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/mX/mX1nlsL_SWOB4y22W5FheRX0YEONKyOY7xUeIvRiHco.cache
235
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pR/pRHZ5T7C7u6vDXHn5oM357U3KshRFgRMbA53zz4Azcw.cache
236
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/q8/q8BHffCjwsZ85QWxK1lyx5t_0jQSLlTtLGhRrwuWXGI.cache
195
237
  - spec/factories/company.rb
196
238
  - spec/factories/user.rb
239
+ - spec/lib/scim_rails/encoder_spec.rb
197
240
  - spec/spec_helper.rb
198
241
  - spec/support/auth_helper.rb
199
242
  - spec/support/factory_bot.rb
@@ -202,7 +245,7 @@ homepage: https://github.com/lessonly/scim_rails
202
245
  licenses:
203
246
  - MIT
204
247
  metadata: {}
205
- post_install_message:
248
+ post_install_message:
206
249
  rdoc_options: []
207
250
  require_paths:
208
251
  - lib
@@ -218,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
261
  version: '0'
219
262
  requirements: []
220
263
  rubygems_version: 3.0.3
221
- signing_key:
264
+ signing_key:
222
265
  specification_version: 4
223
266
  summary: SCIM Adapter for Rails.
224
267
  test_files:
@@ -283,11 +326,18 @@ test_files:
283
326
  - spec/dummy/db/migrate/20181206184313_create_companies.rb
284
327
  - spec/dummy/db/development.sqlite3
285
328
  - spec/dummy/log/test.log
286
- - spec/dummy/log/development.log
329
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/K3/K3kRdEIVqv2uHDkXatQjmCumpOCKxtnexZuiH4Ad37A.cache
330
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/kW/kWKxWPvgf53JDnfwnEOVTJYtSWS971rKq3BhmUzYaXY.cache
331
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/q8/q8BHffCjwsZ85QWxK1lyx5t_0jQSLlTtLGhRrwuWXGI.cache
332
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/TW/TW6bO0RoLe0_sbLapNXYMgZbgPTnnSFdrhh6pv917KA.cache
333
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pR/pRHZ5T7C7u6vDXHn5oM357U3KshRFgRMbA53zz4Azcw.cache
334
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/mX/mX1nlsL_SWOB4y22W5FheRX0YEONKyOY7xUeIvRiHco.cache
335
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/TH/THOPrXYljWHCQGbFjofWsaZNw7w-hfqfI3-hnxWyGas.cache
287
336
  - spec/support/factory_bot.rb
288
337
  - spec/support/auth_helper.rb
289
338
  - spec/support/scim_rails_config.rb
290
339
  - spec/factories/company.rb
291
340
  - spec/factories/user.rb
341
+ - spec/lib/scim_rails/encoder_spec.rb
292
342
  - spec/controllers/scim_rails/scim_users_request_spec.rb
293
343
  - spec/controllers/scim_rails/scim_users_controller_spec.rb
@@ -1,37 +0,0 @@
1
-  (1.5ms) CREATE TABLE "companies" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar NOT NULL, "subdomain" varchar NOT NULL, "api_token" varchar NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
2
-  (0.9ms) CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "first_name" varchar NOT NULL, "last_name" varchar NOT NULL, "email" varchar NOT NULL, "company_id" integer, "archived_at" datetime, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
3
-  (0.9ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY)
4
-  (0.1ms) SELECT version FROM "schema_migrations"
5
-  (0.7ms) INSERT INTO "schema_migrations" (version) VALUES (20181206184313)
6
-  (0.1ms) select sqlite_version(*)
7
-  (0.7ms) INSERT INTO "schema_migrations" (version) VALUES
8
- (20181206184304);
9
-
10
- 
11
-  (1.0ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
12
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ? [["key", "environment"], ["LIMIT", 1]]
13
-  (0.0ms) begin transaction
14
- SQL (0.3ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["key", "environment"], ["value", "development"], ["created_at", "2019-04-04 18:34:57.670031"], ["updated_at", "2019-04-04 18:34:57.670031"]]
15
-  (0.7ms) commit transaction
16
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ? [["key", "environment"], ["LIMIT", 1]]
17
-  (0.0ms) begin transaction
18
-  (0.0ms) commit transaction
19
-  (0.9ms) CREATE TABLE "companies" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar NOT NULL, "subdomain" varchar NOT NULL, "api_token" varchar NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
20
-  (1.0ms) CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "first_name" varchar NOT NULL, "last_name" varchar NOT NULL, "email" varchar NOT NULL, "company_id" integer, "archived_at" datetime, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
21
-  (0.9ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY)
22
-  (0.1ms) SELECT version FROM "schema_migrations"
23
-  (0.8ms) INSERT INTO "schema_migrations" (version) VALUES (20181206184313)
24
-  (0.0ms) select sqlite_version(*)
25
-  (0.8ms) INSERT INTO "schema_migrations" (version) VALUES
26
- (20181206184304);
27
-
28
- 
29
-  (0.9ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
30
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ? [["key", "environment"], ["LIMIT", 1]]
31
-  (0.0ms) begin transaction
32
- SQL (0.3ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["key", "environment"], ["value", "development"], ["created_at", "2019-04-04 18:34:57.684014"], ["updated_at", "2019-04-04 18:34:57.684014"]]
33
-  (0.6ms) commit transaction
34
- ActiveRecord::InternalMetadata Load (0.1ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? LIMIT ? [["key", "environment"], ["LIMIT", 1]]
35
-  (0.0ms) begin transaction
36
- SQL (0.2ms) UPDATE "ar_internal_metadata" SET "value" = ?, "updated_at" = ? WHERE "ar_internal_metadata"."key" = ? [["value", "test"], ["updated_at", "2019-04-04 18:34:57.686570"], ["key", "environment"]]
37
-  (0.6ms) commit transaction