neeto-jwt-engine 1.1.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 (112) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +89 -0
  3. data/Rakefile +20 -0
  4. data/app/controllers/concerns/neeto_jwt_engine/api_exceptions.rb +77 -0
  5. data/app/controllers/concerns/neeto_jwt_engine/authenticatable.rb +20 -0
  6. data/app/controllers/neeto_jwt_engine/application_controller.rb +7 -0
  7. data/app/controllers/neeto_jwt_engine/configurations_controller.rb +54 -0
  8. data/app/models/concerns/neeto_jwt_engine/incinerable_concern.rb +26 -0
  9. data/app/models/neeto_jwt_engine/application_record.rb +7 -0
  10. data/app/models/neeto_jwt_engine/configuration.rb +24 -0
  11. data/app/models/neeto_jwt_engine/onetime_link.rb +19 -0
  12. data/app/services/neeto_jwt_engine/elliptic_key_generator_service.rb +44 -0
  13. data/app/views/layouts/neeto_jwt_engine/application.html.erb +15 -0
  14. data/config/brakeman.ignore +5 -0
  15. data/config/locales/en.yml +1 -0
  16. data/config/routes.rb +7 -0
  17. data/db/migrate/20250329064017_create_neeto_jwt_engine_configurations.rb +14 -0
  18. data/db/migrate/20250716075611_create_neeto_jwt_engine_onetime_links.rb +13 -0
  19. data/lib/neeto-jwt-engine.rb +5 -0
  20. data/lib/neeto_jwt_engine/engine.rb +7 -0
  21. data/lib/neeto_jwt_engine/exceptions.rb +5 -0
  22. data/lib/neeto_jwt_engine/version.rb +5 -0
  23. data/lib/omniauth/strategies/jwt.rb +93 -0
  24. data/test/controllers/neeto_jwt_engine/configurations_controller_test.rb +58 -0
  25. data/test/dummy/Rakefile +8 -0
  26. data/test/dummy/app/assets/config/manifest.js +3 -0
  27. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  28. data/test/dummy/app/channels/application_cable/channel.rb +6 -0
  29. data/test/dummy/app/channels/application_cable/connection.rb +6 -0
  30. data/test/dummy/app/controllers/application_controller.rb +5 -0
  31. data/test/dummy/app/controllers/concerns/sso_helpers.rb +20 -0
  32. data/test/dummy/app/helpers/application_helper.rb +4 -0
  33. data/test/dummy/app/javascript/packs/application.js +19 -0
  34. data/test/dummy/app/jobs/application_job.rb +9 -0
  35. data/test/dummy/app/mailers/application_mailer.rb +6 -0
  36. data/test/dummy/app/models/application_record.rb +5 -0
  37. data/test/dummy/app/models/organization.rb +10 -0
  38. data/test/dummy/app/models/user.rb +11 -0
  39. data/test/dummy/app/services/sample_data/common/admin_service.rb +26 -0
  40. data/test/dummy/app/services/sample_data/common/base.rb +43 -0
  41. data/test/dummy/app/services/sample_data/common/database_cleanup_service.rb +11 -0
  42. data/test/dummy/app/services/sample_data/common/loader_service.rb +34 -0
  43. data/test/dummy/app/services/sample_data/common/organization_service.rb +27 -0
  44. data/test/dummy/app/services/sample_data/loaders_list.rb +14 -0
  45. data/test/dummy/app/services/sample_data/user_service.rb +26 -0
  46. data/test/dummy/app/views/home/index.html.erb +1 -0
  47. data/test/dummy/app/views/layouts/application.html.erb +15 -0
  48. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  49. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  50. data/test/dummy/app/views/users/index.json.jbuilder +19 -0
  51. data/test/dummy/bin/rails +6 -0
  52. data/test/dummy/bin/rake +6 -0
  53. data/test/dummy/bin/setup +37 -0
  54. data/test/dummy/bin/webpacker +16 -0
  55. data/test/dummy/bin/webpacker-dev-server +19 -0
  56. data/test/dummy/config/application.rb +29 -0
  57. data/test/dummy/config/boot.rb +7 -0
  58. data/test/dummy/config/cable.yml +10 -0
  59. data/test/dummy/config/database.yml +17 -0
  60. data/test/dummy/config/database.yml.ci +17 -0
  61. data/test/dummy/config/database.yml.postgresql +17 -0
  62. data/test/dummy/config/environment.rb +7 -0
  63. data/test/dummy/config/environments/development.rb +70 -0
  64. data/test/dummy/config/environments/production.rb +116 -0
  65. data/test/dummy/config/environments/test.rb +63 -0
  66. data/test/dummy/config/initializers/application_controller_renderer.rb +9 -0
  67. data/test/dummy/config/initializers/backtrace_silencers.rb +10 -0
  68. data/test/dummy/config/initializers/content_security_policy.rb +29 -0
  69. data/test/dummy/config/initializers/cookies_serializer.rb +7 -0
  70. data/test/dummy/config/initializers/inflections.rb +17 -0
  71. data/test/dummy/config/initializers/mime_types.rb +5 -0
  72. data/test/dummy/config/initializers/permissions_policy.rb +12 -0
  73. data/test/dummy/config/initializers/strong_migrations.rb +4 -0
  74. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  75. data/test/dummy/config/locales/en.yml +33 -0
  76. data/test/dummy/config/puma.rb +45 -0
  77. data/test/dummy/config/routes.rb +13 -0
  78. data/test/dummy/config/storage.yml +34 -0
  79. data/test/dummy/config/webpack/development.js +5 -0
  80. data/test/dummy/config/webpack/environment.js +13 -0
  81. data/test/dummy/config/webpack/production.js +5 -0
  82. data/test/dummy/config/webpack/resolve.js +11 -0
  83. data/test/dummy/config/webpack/test.js +5 -0
  84. data/test/dummy/config/webpack/webpack.config.js +20 -0
  85. data/test/dummy/config/webpacker.yml +73 -0
  86. data/test/dummy/config.ru +8 -0
  87. data/test/dummy/db/migrate/20220419104218_create_organizations.rb +15 -0
  88. data/test/dummy/db/migrate/20220419114209_create_users.rb +20 -0
  89. data/test/dummy/db/migrate/20240607032904_add_deactivated_at_to_organizations.rb +7 -0
  90. data/test/dummy/db/schema.rb +68 -0
  91. data/test/dummy/lib/tasks/setup.rake +48 -0
  92. data/test/dummy/log/development.log +71 -0
  93. data/test/dummy/log/test.log +5189 -0
  94. data/test/dummy/public/404.html +67 -0
  95. data/test/dummy/public/422.html +67 -0
  96. data/test/dummy/public/500.html +66 -0
  97. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  98. data/test/dummy/public/apple-touch-icon.png +0 -0
  99. data/test/dummy/public/favicon.ico +0 -0
  100. data/test/dummy/tmp/local_secret.txt +1 -0
  101. data/test/dummy/tmp/restart.txt +0 -0
  102. data/test/factories/neeto_jwt_engine/configuration.rb +7 -0
  103. data/test/factories/neeto_jwt_engine/onetime_link.rb +7 -0
  104. data/test/factories/organization.rb +8 -0
  105. data/test/factories/user.rb +13 -0
  106. data/test/models/neeto_jwt_engine/configuration_test.rb +23 -0
  107. data/test/models/neeto_jwt_engine/onetime_link_test.rb +27 -0
  108. data/test/neeto_jwt_engine_test.rb +12 -0
  109. data/test/services/neeto_jwt_engine/elliptic_key_generator_service_test.rb +30 -0
  110. data/test/support/assertion_support.rb +9 -0
  111. data/test/test_helper.rb +30 -0
  112. metadata +168 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
File without changes
@@ -0,0 +1 @@
1
+ e88cc027a2dcdce90bf011a6b3159229ac19a67fd407777cfd2532fed074f7f0c5b3ac6b453497b83ec79e856cdcb76f33f9fb4872a7036b353b49852c17d477
File without changes
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :configuration, class: "NeetoJwtEngine::Configuration" do
5
+ organization
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :onetime_link, class: "NeetoJwtEngine::OnetimeLink" do
5
+ configuration
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :organization do
5
+ name { Faker::Company.name }
6
+ subdomain { Faker::Internet.unique.domain_name }
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :user do
5
+ organization
6
+
7
+ first_name { Faker::Name.first_name }
8
+ last_name { Faker::Name.last_name }
9
+ email { Faker::Internet.unique.email }
10
+ experience { rand(0..30) }
11
+ timezone { "+#{rand(0..12)}:00" }
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module NeetoJwtEngine
6
+ class ConfigurationTest < ActiveSupport::TestCase
7
+ def setup
8
+ @organization = create(:organization)
9
+ end
10
+
11
+ def test_should_generate_validconfiguration
12
+ configuration = Configuration.new(organization: @organization)
13
+ assert configuration.valid?
14
+ end
15
+
16
+ def test_default_scope_should_list_enabled_configurations
17
+ configurations = create_list(:configuration, 3)
18
+ configurations[0].update! enabled: false
19
+
20
+ assert_equal 2, NeetoJwtEngine::Configuration.all.size
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module NeetoJwtEngine
6
+ class OnetimeLinkTest < ActiveSupport::TestCase
7
+ def setup
8
+ @configuration = create(:configuration)
9
+ end
10
+
11
+ def test_should_generate_valid_onetime_link
12
+ onetime_link = OnetimeLink.new(configuration: @configuration)
13
+ assert onetime_link.valid?
14
+
15
+ onetime_link.save!
16
+ assert_equal 16, onetime_link.reload.link.size
17
+ assert_not onetime_link.expired
18
+ end
19
+
20
+ def test_default_scope_should_list_non_expired_onetime_links
21
+ onetime_links = create_list(:onetime_link, 3)
22
+ onetime_links[0].update! expired: true
23
+
24
+ assert_equal 2, OnetimeLink.all.size
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class NeetoJwtEngineTest < ActiveSupport::TestCase
6
+ def setup
7
+ end
8
+
9
+ def test_neeto_jwt_has_a_version_number
10
+ assert NeetoJwtEngine::VERSION
11
+ end
12
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NeetoJwtEngine
4
+ class EllipticKeyGeneratorServiceTest < ActiveSupport::TestCase
5
+ PRIVATE_KEY_REGEX = /^-----BEGIN EC PRIVATE KEY-----\n([A-Za-z0-9+\/=\n]+)\n-----END EC PRIVATE KEY-----$/
6
+ PUBLIC_KEY_REGEX = /^-----BEGIN PUBLIC KEY-----\n([A-Za-z0-9+\/=\n]+)\n-----END PUBLIC KEY-----$/
7
+
8
+ def test_public_private_key_pairs_are_generated
9
+ generator = NeetoJwtEngine::EllipticKeyGeneratorService.new("ES256")
10
+
11
+ assert "prime256v1", generator.curve
12
+ assert_match PRIVATE_KEY_REGEX, generator.private_key
13
+ assert_match PUBLIC_KEY_REGEX, generator.public_key
14
+ end
15
+
16
+ def test_generates_valid_and_private_keys
17
+ generator = NeetoJwtEngine::EllipticKeyGeneratorService.new("ES256")
18
+
19
+ public_key = OpenSSL::PKey::EC.new(generator.public_key)
20
+ private_key = OpenSSL::PKey::EC.new(generator.private_key)
21
+
22
+ assert public_key.public?
23
+ assert private_key.private?
24
+
25
+ message = "Hello from Neeto"
26
+ digest = private_key.sign(OpenSSL::Digest::SHA256.new, message)
27
+ assert public_key.verify(OpenSSL::Digest::SHA256.new, digest, message)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AssertionSupport
4
+ module Minitest::Assertions
5
+ def assert_picked_elements_are_same(expected, actual, pick_by = "id")
6
+ assert_equal expected.pluck(pick_by).sort, actual.pluck(pick_by).sort
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV["RAILS_ENV"] = "test"
4
+
5
+ require_relative "../test/dummy/config/environment"
6
+ require "faker"
7
+ require "rails/test_help"
8
+ require "pry-byebug"
9
+ require "minitest/reporters"
10
+
11
+ Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(color: true)]
12
+ WebMock.stub_request(:post, "http://app.lvh.me:9000/api/v1/server/global_roles")
13
+ .to_return(status: 200, body: "", headers: {})
14
+ ActiveSupport::TestCase.include(ActionView::Helpers::TranslationHelper)
15
+ ActiveSupport::TestCase.include(FactoryBot::Syntax::Methods)
16
+
17
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
18
+ ActiveRecord::Migrator.migrations_paths << File.expand_path("../db/migrate", __dir__)
19
+
20
+ # Checks for pending migration and applies them before tests are run.
21
+ # If you are not using ActiveRecord, you can remove this line.
22
+ ActiveRecord::Migration.maintain_test_schema!
23
+
24
+ def test_domain(subdomain = "app")
25
+ "#{subdomain}.neetoauth.test"
26
+ end
27
+
28
+ def response_json
29
+ JSON.parse(response.body)
30
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: neeto-jwt-engine
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Abhay V Ashokan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jwt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description:
28
+ email:
29
+ - abhay.ashokan@bigbinary.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - Rakefile
36
+ - app/controllers/concerns/neeto_jwt_engine/api_exceptions.rb
37
+ - app/controllers/concerns/neeto_jwt_engine/authenticatable.rb
38
+ - app/controllers/neeto_jwt_engine/application_controller.rb
39
+ - app/controllers/neeto_jwt_engine/configurations_controller.rb
40
+ - app/models/concerns/neeto_jwt_engine/incinerable_concern.rb
41
+ - app/models/neeto_jwt_engine/application_record.rb
42
+ - app/models/neeto_jwt_engine/configuration.rb
43
+ - app/models/neeto_jwt_engine/onetime_link.rb
44
+ - app/services/neeto_jwt_engine/elliptic_key_generator_service.rb
45
+ - app/views/layouts/neeto_jwt_engine/application.html.erb
46
+ - config/brakeman.ignore
47
+ - config/locales/en.yml
48
+ - config/routes.rb
49
+ - db/migrate/20250329064017_create_neeto_jwt_engine_configurations.rb
50
+ - db/migrate/20250716075611_create_neeto_jwt_engine_onetime_links.rb
51
+ - lib/neeto-jwt-engine.rb
52
+ - lib/neeto_jwt_engine/engine.rb
53
+ - lib/neeto_jwt_engine/exceptions.rb
54
+ - lib/neeto_jwt_engine/version.rb
55
+ - lib/omniauth/strategies/jwt.rb
56
+ - test/controllers/neeto_jwt_engine/configurations_controller_test.rb
57
+ - test/dummy/Rakefile
58
+ - test/dummy/app/assets/config/manifest.js
59
+ - test/dummy/app/assets/stylesheets/application.css
60
+ - test/dummy/app/channels/application_cable/channel.rb
61
+ - test/dummy/app/channels/application_cable/connection.rb
62
+ - test/dummy/app/controllers/application_controller.rb
63
+ - test/dummy/app/controllers/concerns/sso_helpers.rb
64
+ - test/dummy/app/helpers/application_helper.rb
65
+ - test/dummy/app/javascript/packs/application.js
66
+ - test/dummy/app/jobs/application_job.rb
67
+ - test/dummy/app/mailers/application_mailer.rb
68
+ - test/dummy/app/models/application_record.rb
69
+ - test/dummy/app/models/organization.rb
70
+ - test/dummy/app/models/user.rb
71
+ - test/dummy/app/services/sample_data/common/admin_service.rb
72
+ - test/dummy/app/services/sample_data/common/base.rb
73
+ - test/dummy/app/services/sample_data/common/database_cleanup_service.rb
74
+ - test/dummy/app/services/sample_data/common/loader_service.rb
75
+ - test/dummy/app/services/sample_data/common/organization_service.rb
76
+ - test/dummy/app/services/sample_data/loaders_list.rb
77
+ - test/dummy/app/services/sample_data/user_service.rb
78
+ - test/dummy/app/views/home/index.html.erb
79
+ - test/dummy/app/views/layouts/application.html.erb
80
+ - test/dummy/app/views/layouts/mailer.html.erb
81
+ - test/dummy/app/views/layouts/mailer.text.erb
82
+ - test/dummy/app/views/users/index.json.jbuilder
83
+ - test/dummy/bin/rails
84
+ - test/dummy/bin/rake
85
+ - test/dummy/bin/setup
86
+ - test/dummy/bin/webpacker
87
+ - test/dummy/bin/webpacker-dev-server
88
+ - test/dummy/config.ru
89
+ - test/dummy/config/application.rb
90
+ - test/dummy/config/boot.rb
91
+ - test/dummy/config/cable.yml
92
+ - test/dummy/config/database.yml
93
+ - test/dummy/config/database.yml.ci
94
+ - test/dummy/config/database.yml.postgresql
95
+ - test/dummy/config/environment.rb
96
+ - test/dummy/config/environments/development.rb
97
+ - test/dummy/config/environments/production.rb
98
+ - test/dummy/config/environments/test.rb
99
+ - test/dummy/config/initializers/application_controller_renderer.rb
100
+ - test/dummy/config/initializers/backtrace_silencers.rb
101
+ - test/dummy/config/initializers/content_security_policy.rb
102
+ - test/dummy/config/initializers/cookies_serializer.rb
103
+ - test/dummy/config/initializers/inflections.rb
104
+ - test/dummy/config/initializers/mime_types.rb
105
+ - test/dummy/config/initializers/permissions_policy.rb
106
+ - test/dummy/config/initializers/strong_migrations.rb
107
+ - test/dummy/config/initializers/wrap_parameters.rb
108
+ - test/dummy/config/locales/en.yml
109
+ - test/dummy/config/puma.rb
110
+ - test/dummy/config/routes.rb
111
+ - test/dummy/config/storage.yml
112
+ - test/dummy/config/webpack/development.js
113
+ - test/dummy/config/webpack/environment.js
114
+ - test/dummy/config/webpack/production.js
115
+ - test/dummy/config/webpack/resolve.js
116
+ - test/dummy/config/webpack/test.js
117
+ - test/dummy/config/webpack/webpack.config.js
118
+ - test/dummy/config/webpacker.yml
119
+ - test/dummy/db/migrate/20220419104218_create_organizations.rb
120
+ - test/dummy/db/migrate/20220419114209_create_users.rb
121
+ - test/dummy/db/migrate/20240607032904_add_deactivated_at_to_organizations.rb
122
+ - test/dummy/db/schema.rb
123
+ - test/dummy/lib/tasks/setup.rake
124
+ - test/dummy/log/development.log
125
+ - test/dummy/log/test.log
126
+ - test/dummy/public/404.html
127
+ - test/dummy/public/422.html
128
+ - test/dummy/public/500.html
129
+ - test/dummy/public/apple-touch-icon-precomposed.png
130
+ - test/dummy/public/apple-touch-icon.png
131
+ - test/dummy/public/favicon.ico
132
+ - test/dummy/tmp/local_secret.txt
133
+ - test/dummy/tmp/restart.txt
134
+ - test/factories/neeto_jwt_engine/configuration.rb
135
+ - test/factories/neeto_jwt_engine/onetime_link.rb
136
+ - test/factories/organization.rb
137
+ - test/factories/user.rb
138
+ - test/models/neeto_jwt_engine/configuration_test.rb
139
+ - test/models/neeto_jwt_engine/onetime_link_test.rb
140
+ - test/neeto_jwt_engine_test.rb
141
+ - test/services/neeto_jwt_engine/elliptic_key_generator_service_test.rb
142
+ - test/support/assertion_support.rb
143
+ - test/test_helper.rb
144
+ homepage: https://github.com/bigbinary/neeto-jwt-engine
145
+ licenses: []
146
+ metadata:
147
+ homepage_uri: https://github.com/bigbinary/neeto-jwt-engine
148
+ source_code_uri: https://github.com/bigbinary/neeto-jwt-engine
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubygems_version: 3.5.16
165
+ signing_key:
166
+ specification_version: 4
167
+ summary: The `neeto-jwt-engine` handles JWT-based authentication in Neeto.
168
+ test_files: []