scim_rails 0.2.0 → 0.4.0

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