omniauth-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +71 -0
  4. data/Rakefile +41 -0
  5. data/app/assets/config/omniauth_rails_manifest.js +1 -0
  6. data/app/assets/stylesheets/omniauth/rails/application.css +19 -0
  7. data/app/controllers/omniauth/rails/application_controller.rb +8 -0
  8. data/app/controllers/omniauth/rails/flash.rb +46 -0
  9. data/app/controllers/omniauth/rails/require_authentication.rb +26 -0
  10. data/app/controllers/omniauth/rails/require_authorization.rb +32 -0
  11. data/app/controllers/omniauth/rails/sessions_controller.rb +55 -0
  12. data/app/helpers/omniauth/rails/application_helper.rb +16 -0
  13. data/app/models/omniauth/rails/authentication_data_store.rb +31 -0
  14. data/app/models/omniauth/rails/authentication_request.rb +28 -0
  15. data/app/models/omniauth/rails/authentication_session.rb +53 -0
  16. data/app/models/omniauth/rails/authorization_checker.rb +28 -0
  17. data/app/models/omniauth/rails/authorization_types/base.rb +17 -0
  18. data/app/models/omniauth/rails/authorization_types/domains.rb +22 -0
  19. data/app/models/omniauth/rails/authorization_types/emails.rb +18 -0
  20. data/app/models/omniauth/rails/authorization_types/regex.rb +18 -0
  21. data/app/models/omniauth/rails/omni_auth_route_builder.rb +18 -0
  22. data/app/views/omniauth/rails/sessions/destroy.html.erb +6 -0
  23. data/config/initializers/omniauth_rails.rb +35 -0
  24. data/config/routes.rb +6 -0
  25. data/lib/omniauth/rails/configuration.rb +15 -0
  26. data/lib/omniauth/rails/engine.rb +22 -0
  27. data/lib/omniauth/rails/test/controller_helpers.rb +17 -0
  28. data/lib/omniauth/rails/test/request_helpers.rb +25 -0
  29. data/lib/omniauth/rails/version.rb +6 -0
  30. data/lib/omniauth/rails.rb +9 -0
  31. data/spec/controllers/application_controller_spec.rb +9 -0
  32. data/spec/examples.txt +19 -0
  33. data/spec/models/omniauth/rails/authorization_types/emails_spec.rb +28 -0
  34. data/spec/models/omniauth/rails/authorization_types/regex_spec.rb +28 -0
  35. data/spec/omniauth_rails_spec.rb +10 -0
  36. data/spec/rails_helper_for_engine.rb +62 -0
  37. data/spec/spec_helper.rb +93 -0
  38. data/spec/test_app/Rakefile +12 -0
  39. data/spec/test_app/app/assets/config/manifest.js +4 -0
  40. data/spec/test_app/app/assets/javascripts/application.js +13 -0
  41. data/spec/test_app/app/assets/stylesheets/application.css +15 -0
  42. data/spec/test_app/app/controllers/application_controller.rb +4 -0
  43. data/spec/test_app/app/controllers/private_controller.rb +9 -0
  44. data/spec/test_app/app/controllers/public_controller.rb +6 -0
  45. data/spec/test_app/app/helpers/application_helper.rb +3 -0
  46. data/spec/test_app/app/mailers/application_mailer.rb +5 -0
  47. data/spec/test_app/app/models/application_record.rb +4 -0
  48. data/spec/test_app/app/views/layouts/application.html.erb +24 -0
  49. data/spec/test_app/app/views/private/show.html.erb +1 -0
  50. data/spec/test_app/app/views/public/show.html.erb +1 -0
  51. data/spec/test_app/bin/bundle +4 -0
  52. data/spec/test_app/bin/rails +5 -0
  53. data/spec/test_app/bin/rake +5 -0
  54. data/spec/test_app/bin/setup +35 -0
  55. data/spec/test_app/bin/update +30 -0
  56. data/spec/test_app/config/application.rb +23 -0
  57. data/spec/test_app/config/boot.rb +6 -0
  58. data/spec/test_app/config/environment.rb +6 -0
  59. data/spec/test_app/config/environments/development.rb +55 -0
  60. data/spec/test_app/config/environments/production.rb +89 -0
  61. data/spec/test_app/config/environments/test.rb +43 -0
  62. data/spec/test_app/config/initializers/application_controller_renderer.rb +7 -0
  63. data/spec/test_app/config/initializers/assets.rb +12 -0
  64. data/spec/test_app/config/initializers/backtrace_silencers.rb +10 -0
  65. data/spec/test_app/config/initializers/cookies_serializer.rb +6 -0
  66. data/spec/test_app/config/initializers/filter_parameter_logging.rb +5 -0
  67. data/spec/test_app/config/initializers/inflections.rb +17 -0
  68. data/spec/test_app/config/initializers/mime_types.rb +5 -0
  69. data/spec/test_app/config/initializers/session_store.rb +4 -0
  70. data/spec/test_app/config/initializers/wrap_parameters.rb +15 -0
  71. data/spec/test_app/config/locales/en.yml +23 -0
  72. data/spec/test_app/config/omniauth_rails.yml +16 -0
  73. data/spec/test_app/config/puma.rb +48 -0
  74. data/spec/test_app/config/routes.rb +8 -0
  75. data/spec/test_app/config/secrets.yml +22 -0
  76. data/spec/test_app/config/spring.rb +7 -0
  77. data/spec/test_app/config.ru +6 -0
  78. data/spec/test_app/log/development.log +4451 -0
  79. data/spec/test_app/log/test.log +7601 -0
  80. data/spec/test_app/public/404.html +67 -0
  81. data/spec/test_app/public/422.html +67 -0
  82. data/spec/test_app/public/500.html +66 -0
  83. data/spec/test_app/public/apple-touch-icon-precomposed.png +0 -0
  84. data/spec/test_app/public/apple-touch-icon.png +0 -0
  85. data/spec/test_app/public/favicon.ico +0 -0
  86. data/spec/test_app/spec/controllers/private_controller_spec.rb +19 -0
  87. data/spec/test_app/spec/rails_helper.rb +54 -0
  88. data/spec/test_app/spec/requests/private_controller_spec.rb +26 -0
  89. data/spec/test_app/spec/requests/public_controller_spec.rb +13 -0
  90. data/spec/test_app/spec/requests/sessions_controller_spec.rb +87 -0
  91. data/spec/test_app/spec/spec_helper.rb +99 -0
  92. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/-5/-528MPRmC3ByNiAzVD1hs-NG3Muhf9FsYPaDbo4qIpI.cache +1 -0
  93. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/3v/3voyTxS8FmTTGPrz-QQ23N6AgGate2o7X5ZnZeTkQbs.cache +0 -0
  94. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/5V/5VAABbvE5t5bCDKmKjLivvfe1CqYdD4n4vtZQiMa4I0.cache +0 -0
  95. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/64/64siRwVaDPAW5fTe1O4rlGaq-0ExxAWA0-csPcik-uM.cache +0 -0
  96. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Aa/AasprW2BgqWDcmZnsPRxs-R5D0VGpL7dHYMwtsC1tmE.cache +0 -0
  97. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/An/An3DVlfO1pzT7FAnm09q3Ok_2PmGYhiAvxuW9OgG9wc.cache +0 -0
  98. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/C-/C-_kx_I8fFV2TrLPw8CNFy1uLrN6G4yLPg_4vOhlohQ.cache +0 -0
  99. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/EG/EGN6771mS8m_7wi-Cr-GgFKv9U9IE3gpo9JQ-N3AYlQ.cache +0 -0
  100. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Hl/HlzBaGDQ4NV3ctlz-qlmStUWDCELhxzVK1-SgLkPCH0.cache +0 -0
  101. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/IB/IBoXb9_P8EU8f7aPVNE8cWJybcus8fS7KGvi4HxKdMU.cache +1 -0
  102. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/K2/K28c2b37N3eRA-Pckb3MO3D3BvGXfbxDGNeRYIXG8Cg.cache +1 -0
  103. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/KJ/KJdFFU6zb4YpQWEm8bsXxx8kdQ01BdK0F0h6TTzpOiY.cache +0 -0
  104. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/KW/KWwCiQwwI6oqiIHZg_Qg2nrs1zXJISos9799GIL5viU.cache +0 -0
  105. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Kh/KhKDGOFwOEJlSwLMaG8Yak8AktHsnEr-fUwLpl9d0tc.cache +1 -0
  106. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/NX/NXZl3HljnPNJmh2CNpp0skcYvQx4eSEp6vuG5o3lqqY.cache +0 -0
  107. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/NX/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +0 -0
  108. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Ob/ObDGu7gmDzQuH86CeAdhWRPf0sfv9Qo3CoxGK3VOYWI.cache +0 -0
  109. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/QG/QGjnK1OGVhAWzpma8R60Qdcr6v46sAWmpwQpeoWltX8.cache +1 -0
  110. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Qn/Qn2TRz8mMz8dPVvXgHUfqXC19EPZQgG3XDqm5W_E-A0.cache +1 -0
  111. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/WC/WCTd8gm1KmkPKRB14gd1wwFv3x9NwMsmquXet4Z1DTU.cache +2 -0
  112. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Z-/Z-3hfqbx8r350iW9zFPz_OdVHX0X4Z4bMk9YbS1eha8.cache +0 -0
  113. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Z2/Z2DJdVm4jsJXg0HzuQVyAAmjJbVdzKntXlmd14iNVbU.cache +0 -0
  114. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/ZA/ZAzUlqsc-uLa_zcjt1t6EBkPqI8PkEoxz40i4FgrRlQ.cache +1 -0
  115. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/bN/bNCmkb6T3JKDzd6s7ZxOLn_WdC6gUnRARnBDHrMFS7o.cache +1 -0
  116. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/b_/b_Itlk9QZZd7Rvf8kcA4yLP1R5Acu7jB-m1xQiSU0qE.cache +0 -0
  117. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/d6/d6PosAq3dbPqxxvjAcaLgePkRuQ8w__EA-M42WarK_0.cache +1 -0
  118. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/fD/fDbKpwc4jlsYlnxTT3vnhsiBcSJF3imnAGUBp9nq_Bw.cache +1 -0
  119. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/fE/fEHvM7gLiXuJB6lDj2KNzgAx5L3BBn2NSsuodvPAryI.cache +0 -0
  120. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/fg/fgbqfgH_CvzP2H744Q3ywDzlqLRSgSw0AH6ifkC7roo.cache +1 -0
  121. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/g4/g4TbkEUbvKBMpO8z4ioPbq8ArdLl-scuF3pVaLJhmVI.cache +1 -0
  122. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/id/idcyFsf20F5Vd3GC1XtM_PxlNnROM6CxO1j11NG3RWk.cache +1 -0
  123. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/ih/ihflBRw1ToLzP0q8oKAJl_a6EHHbTdJUcVR5DANsIuA.cache +0 -0
  124. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/jz/jzXohzOyfczV5wKfQVQWgE1H0IMN4jaxEM3XlhHNgvk.cache +0 -0
  125. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/lH/lHLoBOtMavo_6UnfOn0DVLI2JQBT1W9sGR3IZzOD6o8.cache +2 -0
  126. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/mD/mDmWU5fLvNY4uggphc1wqYVQDn_w_U6Jz2XRSf59jDc.cache +0 -0
  127. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/mX/mX1nlsL_SWOB4y22W5FheRX0YEONKyOY7xUeIvRiHco.cache +0 -0
  128. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/n5/n5FDaqgvLV4Rc1Xm6TykMEFanDhSJJ77HPuPCEgCDQM.cache +1 -0
  129. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/n9/n9Nzbk_dEL3fNO-u56owqnrG7YQmhcvDgJ2fWWE_9jE.cache +0 -0
  130. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/nU/nUDR2L4CaIx5IszaYaaaACw519TTTzvpxsp7NMl6KyQ.cache +1 -0
  131. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +0 -0
  132. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/pc/pcFf9fij5Xa__QoHi-QzN_0Q_UGLhv6gihTXnoFX3sg.cache +1 -0
  133. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/q-/q-721tFv_0DZO9GZ_kHYUD_jn6GNRC09vb51mwyxbuI.cache +1 -0
  134. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/r6/r6saZ-BJCnX2-U353od1DgtZIGy5kXrCuXatXntMcTE.cache +0 -0
  135. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/wY/wYWiPwDGlToFGYId__oKg8QMPEeuRZoP1FhQahshfOo.cache +1 -0
  136. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/yD/yDj60NQvsiwl1QWQXH-iC4pgF1cmHkUFo-kkXBSjsIQ.cache +1 -0
  137. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/ym/ymCwqEVBkEs6bYteLf70KCA5pCKZtqjQ3TbZQzrIs3M.cache +0 -0
  138. data/spec/test_app/tmp/cache/assets/sprockets/v3.0/z0/z041WxjoEQvRhtSLORbkRlsNTgi68Rwx7XUyaDbPn0M.cache +1 -0
  139. data/spec/test_app/tmp/pids/server.pid +1 -0
  140. metadata +453 -0
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ module Omniauth
3
+ module Rails
4
+ class Engine < ::Rails::Engine
5
+ require "omniauth"
6
+ require "omniauth-google-oauth2"
7
+ isolate_namespace Omniauth::Rails
8
+
9
+ initializer "omniauth_rails.action_controller" do |_app|
10
+ ActiveSupport.on_load :action_controller do
11
+ helper Omniauth::Rails::ApplicationHelper
12
+ end
13
+ end
14
+
15
+ config.generators do |g|
16
+ g.test_framework :rspec, fixture: false
17
+ g.assets false
18
+ g.helper false
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Omniauth
3
+ module Rails
4
+ module Test
5
+ module ControllerHelpers
6
+ def sign_in(email)
7
+ session["OmniauthRailsAuthData"] = { "email" => email }
8
+ end
9
+
10
+ def authenticated?
11
+ session["OmniauthRailsAuthData"].present? &&
12
+ session["OmniauthRailsAuthData"]["email"].present?
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ module Omniauth
3
+ module Rails
4
+ module Test
5
+ module RequestHelpers
6
+ # Another option for mocking this, is to use something like this:
7
+ # before do
8
+ # Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google_oauth2]
9
+ # end
10
+
11
+ def sign_in(email)
12
+ fake_session = {}
13
+ data_store = Omniauth::Rails::AuthenticationDataStore.new(fake_session)
14
+ data_store.set("email", email)
15
+ allow(AuthenticationDataStore).to receive(:new).and_return(data_store)
16
+ end
17
+
18
+ def authenticated?
19
+ get "/private"
20
+ response.status == 200
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Omniauth
3
+ module Rails
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ require "omniauth/rails/engine"
3
+
4
+ require "omniauth/rails/configuration"
5
+
6
+ module Omniauth
7
+ module Rails
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper_for_engine"
4
+ require_relative "../../app/controllers/omniauth/rails/application_controller"
5
+
6
+ # This empty describe doesn't do anything. But for some reason it convinces
7
+ # simplecov that the ApplicationController is covered.
8
+ RSpec.describe Omniauth::Rails::ApplicationController do
9
+ end
data/spec/examples.txt ADDED
@@ -0,0 +1,19 @@
1
+ example_id | status | run_time |
2
+ ------------------------------------------------------------------------ | ------ | --------------- |
3
+ ./spec/controllers/application_controller_spec.rb[1:1] | passed | 0.00035 seconds |
4
+ ./spec/models/omniauth/rails/authorization_types/emails_spec.rb[1:1:1:1] | passed | 0.00009 seconds |
5
+ ./spec/models/omniauth/rails/authorization_types/emails_spec.rb[1:1:2:1] | passed | 0.00051 seconds |
6
+ ./spec/models/omniauth/rails/authorization_types/regex_spec.rb[1:1:1:1] | passed | 0.00019 seconds |
7
+ ./spec/models/omniauth/rails/authorization_types/regex_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
8
+ ./spec/omniauth_rails_spec.rb[1:1] | passed | 0.00043 seconds |
9
+ ./spec/test_app/spec/controllers/private_controller_spec.rb[1:1:1:1] | passed | 0.00652 seconds |
10
+ ./spec/test_app/spec/requests/private_controller_spec.rb[1:1:1:1] | passed | 0.01215 seconds |
11
+ ./spec/test_app/spec/requests/private_controller_spec.rb[1:1:2:1] | passed | 0.17193 seconds |
12
+ ./spec/test_app/spec/requests/public_controller_spec.rb[1:1:1] | passed | 0.00821 seconds |
13
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:1:1] | passed | 0.00263 seconds |
14
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:1:2:1] | passed | 0.00228 seconds |
15
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:2:1:1] | passed | 0.01283 seconds |
16
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:2:1:2:1] | passed | 0.0042 seconds |
17
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:3:1:1] | passed | 0.00124 seconds |
18
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:3:2:1] | passed | 0.0011 seconds |
19
+ ./spec/test_app/spec/requests/sessions_controller_spec.rb[1:3:3:1] | passed | 0.00288 seconds |
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper_for_engine"
4
+ require_relative "../../../../../app/models/omniauth/rails/authorization_types/base"
5
+ require_relative "../../../../../app/models/omniauth/rails/authorization_types/emails"
6
+
7
+ RSpec.describe Omniauth::Rails::AuthorizationTypes::Emails do
8
+ let(:email) { "foo@bar.com" }
9
+ let(:emails) { %w(foo@bar.com baz@bar.com) }
10
+
11
+ let(:subject) { Omniauth::Rails::AuthorizationTypes::Emails.new(email: email, value: emails) }
12
+
13
+ describe "#authorized?" do
14
+ context "a match" do
15
+ it "returns true" do
16
+ expect(subject.authorized?).to eq(true)
17
+ end
18
+ end
19
+
20
+ context "a miss" do
21
+ let(:email) { "foo99@bar.com" }
22
+
23
+ it "returns false" do
24
+ expect(subject.authorized?).to eq(false)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper_for_engine"
4
+ require_relative "../../../../../app/models/omniauth/rails/authorization_types/base"
5
+ require_relative "../../../../../app/models/omniauth/rails/authorization_types/regex"
6
+
7
+ RSpec.describe Omniauth::Rails::AuthorizationTypes::Regex do
8
+ let(:email) { "foo@bar.com" }
9
+ let(:regex) { /\Afo\w@bar.com\z/i }
10
+
11
+ let(:subject) { Omniauth::Rails::AuthorizationTypes::Regex.new(email: email, value: regex) }
12
+
13
+ describe "#authorized?" do
14
+ context "a match" do
15
+ it "returns true" do
16
+ expect(subject.authorized?).to eq(true)
17
+ end
18
+ end
19
+
20
+ context "a miss" do
21
+ let(:email) { "baz@bar.com" }
22
+
23
+ it "returns false" do
24
+ expect(subject.authorized?).to eq(false)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../lib/omniauth/rails/version"
4
+
5
+ RSpec.describe Omniauth::Rails do
6
+ # This silly spec ensures that the Omniauth::Rails::VERSION has code coverage
7
+ it "has a version" do
8
+ expect(Omniauth::Rails::VERSION).to be_a(String)
9
+ end
10
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
4
+ ENV["RAILS_ENV"] ||= "test"
5
+ # require File.expand_path('../../config/environment', __FILE__)
6
+ # Prevent database truncation if the environment is production
7
+ # abort("The Rails environment is running in production mode!") if Rails.env.production?
8
+ require "spec_helper"
9
+ require "action_view/railtie"
10
+ require "action_controller/railtie"
11
+ require "rspec/rails"
12
+ require "omniauth/rails"
13
+ # Add additional requires below this line. Rails is not loaded until this point!
14
+
15
+ # Requires supporting ruby files with custom matchers and macros, etc, in
16
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
17
+ # run as spec files by default. This means that files in spec/support that end
18
+ # in _spec.rb will both be required and run as specs, causing the specs to be
19
+ # run twice. It is recommended that you do not name files matching this glob to
20
+ # end with _spec.rb. You can configure this pattern with the --pattern
21
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
22
+ #
23
+ # The following line is provided for convenience purposes. It has the downside
24
+ # of increasing the boot-up time by auto-requiring all files in the support
25
+ # directory. Alternatively, in the individual `*_spec.rb` files, manually
26
+ # require only the support files necessary.
27
+ #
28
+ # Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
29
+
30
+ # Checks for pending migration and applies them before tests are run.
31
+ # If you are not using ActiveRecord, you can remove this line.
32
+ # ActiveRecord::Migration.maintain_test_schema!
33
+
34
+ RSpec.configure do |config|
35
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
36
+ # config.fixture_path = "#{::Rails.root}/spec/fixtures"
37
+
38
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
39
+ # examples within a transaction, remove the following line or assign false
40
+ # instead of true.
41
+ # config.use_transactional_fixtures = true
42
+
43
+ # RSpec Rails can automatically mix in different behaviours to your tests
44
+ # based on their file location, for example enabling you to call `get` and
45
+ # `post` in specs under `spec/controllers`.
46
+ #
47
+ # You can disable this behaviour by removing the line below, and instead
48
+ # explicitly tag your specs with their type, e.g.:
49
+ #
50
+ # RSpec.describe UsersController, :type => :controller do
51
+ # # ...
52
+ # end
53
+ #
54
+ # The different available types are documented in the features, such as in
55
+ # https://relishapp.com/rspec/rspec-rails/docs
56
+ config.infer_spec_type_from_file_location!
57
+
58
+ # Filter lines from Rails gems in backtraces.
59
+ config.filter_rails_from_backtrace!
60
+ # arbitrary gems may also be filtered via:
61
+ # config.filter_gems_from_backtrace("gem name")
62
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Hack to remove VERSION (which is loaded/required via Gemfile -> mogl.gemspec) before simplecov
4
+ # Without this, simplecov reports the VERSION is not covered by specs.
5
+ ::Omniauth::Rails.send(:remove_const, "VERSION")
6
+ $LOADED_FEATURES.delete_if { |s| s.include?("omniauth/rails/version") }
7
+
8
+ require "simplecov"
9
+ require "byebug"
10
+ require "awesome_print" # Useful for debugging
11
+ require "dotenv"
12
+ Dotenv.load
13
+
14
+ RSpec.configure do |config|
15
+ # rspec-expectations config goes here. You can use an alternate
16
+ # assertion/expectation library such as wrong or the stdlib/minitest
17
+ # assertions if you prefer.
18
+ config.expect_with :rspec do |expectations|
19
+ # This option will default to `true` in RSpec 4. It makes the `description`
20
+ # and `failure_message` of custom matchers include text for helper methods
21
+ # defined using `chain`, e.g.:
22
+ # be_bigger_than(2).and_smaller_than(4).description
23
+ # # => "be bigger than 2 and smaller than 4"
24
+ # ...rather than:
25
+ # # => "be bigger than 2"
26
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
27
+ end
28
+
29
+ # rspec-mocks config goes here. You can use an alternate test double
30
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
31
+ config.mock_with :rspec do |mocks|
32
+ # Prevents you from mocking or stubbing a method that does not exist on
33
+ # a real object. This is generally recommended, and will default to
34
+ # `true` in RSpec 4.
35
+ mocks.verify_partial_doubles = true
36
+ end
37
+
38
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
39
+ # have no way to turn it off -- the option exists only for backwards
40
+ # compatibility in RSpec 3). It causes shared context metadata to be
41
+ # inherited by the metadata hash of host groups and examples, rather than
42
+ # triggering implicit auto-inclusion in groups with matching metadata.
43
+ config.shared_context_metadata_behavior = :apply_to_host_groups
44
+
45
+ # The settings below are suggested to provide a good initial experience
46
+ # with RSpec, but feel free to customize to your heart's content.
47
+
48
+ # This allows you to limit a spec run to individual examples or groups
49
+ # you care about by tagging them with `:focus` metadata. When nothing
50
+ # is tagged with `:focus`, all examples get run. RSpec also provides
51
+ # aliases for `it`, `describe`, and `context` that include `:focus`
52
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
53
+ config.filter_run_when_matching :focus
54
+
55
+ # Allows RSpec to persist some state between runs in order to support
56
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
57
+ # you configure your source control system to ignore this file.
58
+ config.example_status_persistence_file_path = "spec/examples.txt"
59
+
60
+ # Limits the available syntax to the non-monkey patched syntax that is
61
+ # recommended. For more details, see:
62
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
63
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
64
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
65
+ config.disable_monkey_patching!
66
+
67
+ # Many RSpec users commonly either run the entire suite or an individual
68
+ # file, and it's useful to allow more verbose output when running an
69
+ # individual spec file.
70
+ if config.files_to_run.one?
71
+ # Use the documentation formatter for detailed output,
72
+ # unless a formatter has already been configured
73
+ # (e.g. via a command-line flag).
74
+ config.default_formatter = "doc"
75
+ end
76
+
77
+ # Print the 10 slowest examples and example groups at the
78
+ # end of the spec run, to help surface which specs are running
79
+ # particularly slow.
80
+ # config.profile_examples = 10
81
+
82
+ # Run specs in random order to surface order dependencies. If you find an
83
+ # order dependency and want to debug it, you can fix the order by providing
84
+ # the seed, which is printed after each run.
85
+ # --seed 1234
86
+ config.order = :random
87
+
88
+ # Seed global randomization in this process using the `--seed` CLI option.
89
+ # Setting this allows you to use `--seed` to deterministically reproduce
90
+ # test failures related to randomization by passing the same `--seed` value
91
+ # as the one that triggered the failure.
92
+ Kernel.srand config.seed
93
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require_relative "config/application"
6
+
7
+ Rails.application.load_tasks
8
+
9
+ task("spec").clear
10
+ RSpec::Core::RakeTask.new do |t|
11
+ t.verbose = false
12
+ end
@@ -0,0 +1,4 @@
1
+
2
+ //= link_tree ../images
3
+ //= link_directory ../stylesheets .css
4
+ //= link omniauth_rails_manifest.js
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PrivateController < ApplicationController
4
+ include Omniauth::Rails::RequireAuthorization
5
+ require_authorization domains: %w(bar.com)
6
+
7
+ def show
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PublicController < ApplicationController
4
+ def show
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+ module ApplicationHelper
3
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>TestApp</title>
5
+ <%= stylesheet_link_tag "omniauth/rails/application.css", media: "all" %>
6
+ <%= csrf_meta_tags %>
7
+ </head>
8
+
9
+ <body>
10
+ Navigation:
11
+ <ul>
12
+ <li><%= link_to "Public page", public_path %></li>
13
+ <li><%= link_to "Private page", private_path %></li>
14
+ </ul>
15
+
16
+ <% if authenticated? %>
17
+ Logged in as <%= authenticated_email %>
18
+ |
19
+ <%= button_to "Logout", omniauth_rails.sign_out_url, method: :delete %>
20
+ <% end %>
21
+
22
+ <%= yield %>
23
+ </body>
24
+ </html>
@@ -0,0 +1 @@
1
+ <h1>This is a private page</h1>
@@ -0,0 +1 @@
1
+ <h1>This is a public page</h1>
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
4
+ load Gem.bin_path("bundler", "bundle")
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ APP_PATH = File.expand_path("../config/application", __dir__)
4
+ require_relative "../config/boot"
5
+ require "rails/commands"
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ require_relative "../config/boot"
4
+ require "rake"
5
+ Rake.application.run
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ require "pathname"
4
+ require "fileutils"
5
+ include FileUtils
6
+
7
+ # path to your application root.
8
+ APP_ROOT = Pathname.new File.expand_path("../../", __FILE__)
9
+
10
+ def system!(*args)
11
+ system(*args) || abort("\n== Command #{args} failed ==")
12
+ end
13
+
14
+ chdir APP_ROOT do
15
+ # This script is a starting point to setup your application.
16
+ # Add necessary setup steps to this file.
17
+
18
+ puts "== Installing dependencies =="
19
+ system! "gem install bundler --conservative"
20
+ system("bundle check") || system!("bundle install")
21
+
22
+ # puts "\n== Copying sample files =="
23
+ # unless File.exist?('config/database.yml')
24
+ # cp 'config/database.yml.sample', 'config/database.yml'
25
+ # end
26
+
27
+ puts "\n== Preparing database =="
28
+ system! "bin/rails db:setup"
29
+
30
+ puts "\n== Removing old logs and tempfiles =="
31
+ system! "bin/rails log:clear tmp:clear"
32
+
33
+ puts "\n== Restarting application server =="
34
+ system! "bin/rails restart"
35
+ end
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ require "pathname"
4
+ require "fileutils"
5
+ include FileUtils
6
+
7
+ # path to your application root.
8
+ APP_ROOT = Pathname.new File.expand_path("../../", __FILE__)
9
+
10
+ def system!(*args)
11
+ system(*args) || abort("\n== Command #{args} failed ==")
12
+ end
13
+
14
+ chdir APP_ROOT do
15
+ # This script is a way to update your development environment automatically.
16
+ # Add necessary update steps to this file.
17
+
18
+ puts "== Installing dependencies =="
19
+ system! "gem install bundler --conservative"
20
+ system("bundle check") || system!("bundle install")
21
+
22
+ puts "\n== Updating database =="
23
+ system! "bin/rails db:migrate"
24
+
25
+ puts "\n== Removing old logs and tempfiles =="
26
+ system! "bin/rails log:clear tmp:clear"
27
+
28
+ puts "\n== Restarting application server =="
29
+ system! "bin/rails restart"
30
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ require_relative "boot"
3
+
4
+ # Pick the frameworks you want:
5
+ # require "active_record/railtie"
6
+ require "action_controller/railtie"
7
+ require "action_view/railtie"
8
+ # require "action_mailer/railtie"
9
+ # require "active_job/railtie"
10
+ # require "action_cable/engine"
11
+ # require "rails/test_unit/railtie"
12
+ require "sprockets/railtie"
13
+
14
+ Bundler.require(*Rails.groups)
15
+ require "omniauth/rails"
16
+
17
+ module TestApp
18
+ class Application < Rails::Application
19
+ # Settings in config/environments/* take precedence over those specified here.
20
+ # Application configuration should go into files in config/initializers
21
+ # -- all .rb files in that directory are automatically loaded.
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # Set up gems listed in the Gemfile.
3
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile", __dir__)
4
+
5
+ require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
6
+ $LOAD_PATH.unshift File.expand_path("../../../lib", __dir__)
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # Load the Rails application.
3
+ require_relative "application"
4
+
5
+ # Initialize the Rails application.
6
+ Rails.application.initialize!
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+ Rails.application.configure do
3
+ # Settings specified here will take precedence over those in config/application.rb.
4
+
5
+ # In the development environment your application's code is reloaded on
6
+ # every request. This slows down response time but is perfect for development
7
+ # since you don't have to restart the web server when you make code changes.
8
+ config.cache_classes = false
9
+
10
+ # Do not eager load code on boot.
11
+ config.eager_load = false
12
+
13
+ # Show full error reports.
14
+ config.consider_all_requests_local = true
15
+
16
+ # Enable/disable caching. By default caching is disabled.
17
+ if Rails.root.join("tmp/caching-dev.txt").exist?
18
+ config.action_controller.perform_caching = true
19
+
20
+ config.cache_store = :memory_store
21
+ config.public_file_server.headers = {
22
+ "Cache-Control" => "public, max-age=172800",
23
+ }
24
+ else
25
+ config.action_controller.perform_caching = false
26
+
27
+ config.cache_store = :null_store
28
+ end
29
+
30
+ # Don't care if the mailer can't send.
31
+ # config.action_mailer.raise_delivery_errors = false
32
+
33
+ # config.action_mailer.perform_caching = false
34
+
35
+ # Print deprecation notices to the Rails logger.
36
+ config.active_support.deprecation = :log
37
+
38
+ # Raise an error on page load if there are pending migrations.
39
+ # config.active_record.migration_error = :page_load
40
+
41
+ # Debug mode disables concatenation and preprocessing of assets.
42
+ # This option may cause significant delays in view rendering with a large
43
+ # number of complex assets.
44
+ # config.assets.debug = true
45
+
46
+ # Suppress logger output for asset requests.
47
+ # config.assets.quiet = true
48
+
49
+ # Raises error for missing translations
50
+ # config.action_view.raise_on_missing_translations = true
51
+
52
+ # Use an evented file watcher to asynchronously detect changes in source code,
53
+ # routes, locales, etc. This feature depends on the listen gem.
54
+ # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
55
+ end