scimaenaga 0.7.0 → 0.9.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -7
  3. data/Rakefile +6 -8
  4. data/app/controllers/concerns/{scim_rails → scimaenaga}/exception_handler.rb +47 -37
  5. data/app/controllers/concerns/scimaenaga/response.rb +94 -0
  6. data/app/controllers/scimaenaga/application_controller.rb +72 -0
  7. data/app/controllers/{scim_rails → scimaenaga}/scim_groups_controller.rb +26 -26
  8. data/app/controllers/scimaenaga/scim_schemas_controller.rb +42 -0
  9. data/app/controllers/scimaenaga/scim_users_controller.rb +104 -0
  10. data/app/helpers/{scim_rails → scimaenaga}/application_helper.rb +1 -1
  11. data/app/libraries/scim_patch.rb +16 -9
  12. data/app/libraries/scim_patch_operation.rb +51 -141
  13. data/app/libraries/scim_patch_operation_converter.rb +90 -0
  14. data/app/libraries/scim_patch_operation_group.rb +100 -0
  15. data/app/libraries/scim_patch_operation_user.rb +53 -0
  16. data/app/models/{scim_rails → scimaenaga}/application_record.rb +1 -1
  17. data/app/models/scimaenaga/authorize_api_request.rb +39 -0
  18. data/app/models/{scim_rails → scimaenaga}/scim_count.rb +8 -4
  19. data/app/models/scimaenaga/scim_query_parser.rb +49 -0
  20. data/config/routes.rb +15 -13
  21. data/lib/generators/scimaenaga/USAGE +8 -0
  22. data/lib/generators/scimaenaga/scimaenaga_generator.rb +7 -0
  23. data/lib/generators/{scim_rails → scimaenaga}/templates/initializer.rb +128 -22
  24. data/lib/{scim_rails → scimaenaga}/config.rb +9 -7
  25. data/lib/scimaenaga/encoder.rb +27 -0
  26. data/lib/scimaenaga/engine.rb +12 -0
  27. data/lib/scimaenaga/version.rb +5 -0
  28. data/lib/scimaenaga.rb +6 -0
  29. data/lib/tasks/{scim_rails_tasks.rake → scimaenaga_tasks.rake} +1 -1
  30. data/spec/controllers/{scim_rails → scimaenaga}/scim_groups_controller_spec.rb +8 -8
  31. data/spec/controllers/{scim_rails → scimaenaga}/scim_groups_request_spec.rb +18 -18
  32. data/spec/controllers/scimaenaga/scim_schemas_controller_spec.rb +238 -0
  33. data/spec/controllers/scimaenaga/scim_schemas_request_spec.rb +39 -0
  34. data/spec/controllers/{scim_rails → scimaenaga}/scim_users_controller_spec.rb +14 -15
  35. data/spec/controllers/{scim_rails → scimaenaga}/scim_users_request_spec.rb +20 -20
  36. data/spec/dummy/app/assets/config/manifest.js +1 -1
  37. data/spec/dummy/config/application.rb +1 -2
  38. data/spec/dummy/config/initializers/{scim_rails_config.rb → scimaenaga_config.rb} +25 -25
  39. data/spec/dummy/config/routes.rb +1 -1
  40. data/spec/factories/company.rb +3 -3
  41. data/spec/lib/scimaenaga/encoder_spec.rb +64 -0
  42. data/spec/libraries/scim_patch_operation_group_spec.rb +165 -0
  43. data/spec/libraries/scim_patch_operation_user_spec.rb +101 -0
  44. data/spec/libraries/scim_patch_spec.rb +129 -45
  45. data/spec/models/scim_query_parser_spec.rb +5 -6
  46. metadata +107 -108
  47. data/app/controllers/concerns/scim_rails/response.rb +0 -94
  48. data/app/controllers/scim_rails/application_controller.rb +0 -72
  49. data/app/controllers/scim_rails/scim_users_controller.rb +0 -107
  50. data/app/models/scim_rails/authorize_api_request.rb +0 -40
  51. data/app/models/scim_rails/scim_query_parser.rb +0 -49
  52. data/lib/generators/scim_rails/USAGE +0 -8
  53. data/lib/generators/scim_rails/scim_rails_generator.rb +0 -7
  54. data/lib/scim_rails/encoder.rb +0 -25
  55. data/lib/scim_rails/engine.rb +0 -12
  56. data/lib/scim_rails/version.rb +0 -5
  57. data/lib/scim_rails.rb +0 -6
  58. data/spec/dummy/db/development.sqlite3 +0 -0
  59. data/spec/dummy/db/test.sqlite3 +0 -0
  60. data/spec/dummy/log/development.log +0 -0
  61. data/spec/dummy/log/test.log +0 -5770
  62. data/spec/dummy/put_group.http +0 -5
  63. data/spec/dummy/tmp/restart.txt +0 -0
  64. data/spec/lib/scim_rails/encoder_spec.rb +0 -62
  65. data/spec/libraries/scim_patch_operation_spec.rb +0 -116
@@ -1,5 +0,0 @@
1
- curl 'http://localhost:9999/scim/v2/Groups/1' \
2
- -X 'PUT' \
3
- -d '{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PutOp"], "Operations": ["op": "Add", "path": "members", "value": {"$ref": null, "value": "1"}]}' \
4
- -H 'Content-Type: application/scim+json' \
5
- -H 'Authorization:Basic dGVzdF9jb21wYW55OjE=' \
File without changes
@@ -1,62 +0,0 @@
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
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe ScimPatchOperation do
6
- let(:op) { 'Replace' }
7
- let(:path) { 'userName' }
8
- let(:value) { 'taro.suzuki' }
9
- let(:mutable_attributes_schema) do
10
- {
11
- userName: :name,
12
- displayName: :display_name,
13
- emails: [
14
- {
15
- value: :email,
16
- }
17
- ],
18
- name: {
19
- familyName: :family_name,
20
- givenName: :given_name,
21
- },
22
- active: :active,
23
- }
24
- end
25
- let(:operation) do
26
- described_class.new(
27
- op,
28
- path,
29
- value,
30
- mutable_attributes_schema
31
- )
32
- end
33
- describe '#initialize' do
34
- context 'replace single attribute' do
35
- it {
36
- expect(operation.operations[0].op).to eq :replace
37
- expect(operation.operations[0].path_scim).to eq path
38
- expect(operation.operations[0].path_sp).to eq :name
39
- expect(operation.operations[0].value).to eq value
40
- }
41
- end
42
-
43
- context 'add single attribute' do
44
- let(:op) { 'Add' }
45
- it {
46
- expect(operation.operations[0].op).to eq :add
47
- expect(operation.operations[0].path_scim).to eq path
48
- expect(operation.operations[0].path_sp).to eq :name
49
- expect(operation.operations[0].value).to eq value
50
- }
51
- end
52
-
53
- context 'remove single attribute' do
54
- let(:op) { 'Remove' }
55
- it {
56
- expect(operation.operations[0].op).to eq :remove
57
- expect(operation.operations[0].path_scim).to eq path
58
- expect(operation.operations[0].path_sp).to eq :name
59
- expect(operation.operations[0].value).to eq value
60
- }
61
- end
62
-
63
- context 'replace email address' do
64
- let(:path) { 'emails[type eq "work"].value' }
65
- let(:value) { 'taro.suzuki@example.com' }
66
- it {
67
- expect(operation.operations[0].op).to eq :replace
68
- expect(operation.operations[0].path_scim).to eq path
69
- expect(operation.operations[0].path_sp).to eq :email
70
- expect(operation.operations[0].value).to eq value
71
- }
72
- end
73
-
74
- context 'replace name.familyName' do
75
- let(:path) { 'name.familyName' }
76
- let(:value) { 'Suzuki' }
77
- it {
78
- expect(operation.operations[0].op).to eq :replace
79
- expect(operation.operations[0].path_scim).to eq path
80
- expect(operation.operations[0].path_sp).to eq :family_name
81
- expect(operation.operations[0].value).to eq value
82
- }
83
- end
84
-
85
- context 'replace active' do
86
- let(:path) { 'active' }
87
- let(:value) { 'False' }
88
-
89
- it 'convert string to bool' do
90
- expect(operation.operations[0].value).to eq false
91
- end
92
- end
93
-
94
- context 'replace multiple attribute' do
95
- let(:path) { nil }
96
- let(:value) do
97
- {
98
- 'userName' => 'taro.suzuki',
99
- 'displayName' => 'Taro Suzuki',
100
- }
101
- end
102
-
103
- it 'parse multiple value' do
104
- expect(operation.operations[0].op).to eq :replace
105
- expect(operation.operations[0].path_scim).to eq 'userName'
106
- expect(operation.operations[0].path_sp).to eq :name
107
- expect(operation.operations[0].value).to eq 'taro.suzuki'
108
-
109
- expect(operation.operations[1].op).to eq :replace
110
- expect(operation.operations[1].path_scim).to eq 'displayName'
111
- expect(operation.operations[1].path_sp).to eq :display_name
112
- expect(operation.operations[1].value).to eq 'Taro Suzuki'
113
- end
114
- end
115
- end
116
- end