shopify_app 18.1.3 → 19.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +2 -2
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +3 -2
  5. data/Gemfile +3 -2
  6. data/Gemfile.lock +122 -136
  7. data/Rakefile +4 -3
  8. data/app/controllers/concerns/shopify_app/ensure_authenticated_links.rb +1 -1
  9. data/app/controllers/shopify_app/authenticated_controller.rb +1 -0
  10. data/app/controllers/shopify_app/callback_controller.rb +35 -147
  11. data/app/controllers/shopify_app/sessions_controller.rb +25 -137
  12. data/app/controllers/shopify_app/webhooks_controller.rb +5 -23
  13. data/config/routes.rb +6 -12
  14. data/docs/Troubleshooting.md +0 -3
  15. data/docs/Upgrading.md +85 -2
  16. data/docs/shopify_app/webhooks.md +1 -1
  17. data/lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +10 -9
  18. data/lib/generators/shopify_app/add_after_authenticate_job/templates/after_authenticate_job.rb +1 -0
  19. data/lib/generators/shopify_app/add_marketing_activity_extension/add_marketing_activity_extension_generator.rb +4 -3
  20. data/lib/generators/shopify_app/add_webhook/add_webhook_generator.rb +13 -12
  21. data/lib/generators/shopify_app/add_webhook/templates/webhook_job.rb.tt +9 -1
  22. data/lib/generators/shopify_app/app_proxy_controller/app_proxy_controller_generator.rb +7 -6
  23. data/lib/generators/shopify_app/app_proxy_controller/templates/app_proxy_controller.rb +2 -1
  24. data/lib/generators/shopify_app/app_proxy_controller/templates/app_proxy_route.rb +1 -1
  25. data/lib/generators/shopify_app/authenticated_controller/authenticated_controller_generator.rb +3 -3
  26. data/lib/generators/shopify_app/controllers/controllers_generator.rb +4 -3
  27. data/lib/generators/shopify_app/home_controller/home_controller_generator.rb +11 -15
  28. data/lib/generators/shopify_app/home_controller/templates/home_controller.rb +2 -2
  29. data/lib/generators/shopify_app/home_controller/templates/index.html.erb +3 -3
  30. data/lib/generators/shopify_app/install/install_generator.rb +25 -74
  31. data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +1 -1
  32. data/lib/generators/shopify_app/install/templates/session_store.rb +2 -1
  33. data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +20 -5
  34. data/lib/generators/shopify_app/products_controller/products_controller_generator.rb +3 -3
  35. data/lib/generators/shopify_app/products_controller/templates/products_controller.rb +1 -1
  36. data/lib/generators/shopify_app/rotate_shopify_token_job/rotate_shopify_token_job_generator.rb +4 -4
  37. data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token.rake +1 -0
  38. data/lib/generators/shopify_app/rotate_shopify_token_job/templates/rotate_shopify_token_job.rb +1 -1
  39. data/lib/generators/shopify_app/routes/routes_generator.rb +6 -5
  40. data/lib/generators/shopify_app/routes/templates/routes.rb +5 -5
  41. data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +11 -10
  42. data/lib/generators/shopify_app/shop_model/templates/shop.rb +1 -0
  43. data/lib/generators/shopify_app/shopify_app_generator.rb +4 -3
  44. data/lib/generators/shopify_app/user_model/templates/user.rb +1 -0
  45. data/lib/generators/shopify_app/user_model/user_model_generator.rb +11 -10
  46. data/lib/generators/shopify_app/views/views_generator.rb +4 -3
  47. data/lib/shopify_app/access_scopes/shop_strategy.rb +2 -2
  48. data/lib/shopify_app/access_scopes/user_strategy.rb +4 -4
  49. data/lib/shopify_app/configuration.rb +5 -17
  50. data/lib/shopify_app/controller_concerns/app_proxy_verification.rb +4 -3
  51. data/lib/shopify_app/controller_concerns/csrf_protection.rb +2 -1
  52. data/lib/shopify_app/controller_concerns/embedded_app.rb +4 -3
  53. data/lib/shopify_app/controller_concerns/itp.rb +3 -3
  54. data/lib/shopify_app/controller_concerns/localization.rb +1 -0
  55. data/lib/shopify_app/controller_concerns/login_protection.rb +50 -70
  56. data/lib/shopify_app/controller_concerns/payload_verification.rb +3 -2
  57. data/lib/shopify_app/controller_concerns/webhook_verification.rb +2 -1
  58. data/lib/shopify_app/engine.rb +7 -15
  59. data/lib/shopify_app/jobs/scripttags_manager_job.rb +2 -2
  60. data/lib/shopify_app/jobs/webhooks_manager_job.rb +4 -5
  61. data/lib/shopify_app/managers/scripttags_manager.rb +11 -4
  62. data/lib/shopify_app/managers/webhooks_manager.rb +42 -44
  63. data/lib/shopify_app/middleware/jwt_middleware.rb +5 -4
  64. data/lib/shopify_app/session/in_memory_session_store.rb +1 -0
  65. data/lib/shopify_app/session/in_memory_shop_session_store.rb +2 -1
  66. data/lib/shopify_app/session/in_memory_user_session_store.rb +1 -0
  67. data/lib/shopify_app/session/jwt.rb +9 -8
  68. data/lib/shopify_app/session/null_user_session_store.rb +2 -1
  69. data/lib/shopify_app/session/session_repository.rb +37 -0
  70. data/lib/shopify_app/session/session_storage.rb +4 -6
  71. data/lib/shopify_app/session/shop_session_storage.rb +6 -6
  72. data/lib/shopify_app/session/shop_session_storage_with_scopes.rb +7 -8
  73. data/lib/shopify_app/session/user_session_storage.rb +19 -6
  74. data/lib/shopify_app/session/user_session_storage_with_scopes.rb +21 -8
  75. data/lib/shopify_app/test_helpers/all.rb +2 -1
  76. data/lib/shopify_app/test_helpers/webhook_verification_helper.rb +4 -3
  77. data/lib/shopify_app/utils.rb +2 -9
  78. data/lib/shopify_app/version.rb +2 -1
  79. data/lib/shopify_app.rb +35 -40
  80. data/package.json +1 -1
  81. data/shopify_app.gemspec +21 -20
  82. data/yarn.lock +6 -6
  83. metadata +45 -50
  84. data/lib/generators/shopify_app/install/templates/omniauth.rb +0 -4
  85. data/lib/generators/shopify_app/install/templates/shopify_provider.rb.tt +0 -8
  86. data/lib/generators/shopify_app/install/templates/user_agent.rb +0 -6
  87. data/lib/shopify_app/middleware/same_site_cookie_middleware.rb +0 -34
  88. data/lib/shopify_app/omniauth/omniauth_configuration.rb +0 -64
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  class InMemoryShopSessionStore < InMemorySessionStore
4
5
  class << self
5
6
  def store(session, *args)
6
7
  id = super
7
- repo[session.domain] = session
8
+ repo[session.shop] = session
8
9
  id
9
10
  end
10
11
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  class InMemoryUserSessionStore < InMemorySessionStore
4
5
  class << self
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  class JWT
4
5
  class InvalidDestinationError < StandardError; end
@@ -23,15 +24,15 @@ module ShopifyApp
23
24
  end
24
25
 
25
26
  def shopify_domain
26
- @payload && ShopifyApp::Utils.sanitize_shop_domain(@payload['dest'])
27
+ @payload && ShopifyApp::Utils.sanitize_shop_domain(@payload["dest"])
27
28
  end
28
29
 
29
30
  def shopify_user_id
30
- @payload['sub'].to_i if @payload && @payload['sub']
31
+ @payload["sub"].to_i if @payload && @payload["sub"]
31
32
  end
32
33
 
33
34
  def expire_at
34
- @payload['exp'].to_i if @payload && @payload['exp']
35
+ @payload["exp"].to_i if @payload && @payload["exp"]
35
36
  end
36
37
 
37
38
  private
@@ -45,19 +46,19 @@ module ShopifyApp
45
46
  end
46
47
 
47
48
  def parse_token_data(secret, old_secret)
48
- ::JWT.decode(@token, secret, true, { algorithm: 'HS256' })
49
+ ::JWT.decode(@token, secret, true, { algorithm: "HS256" })
49
50
  rescue ::JWT::VerificationError
50
51
  raise unless old_secret
51
52
 
52
- ::JWT.decode(@token, old_secret, true, { algorithm: 'HS256' })
53
+ ::JWT.decode(@token, old_secret, true, { algorithm: "HS256" })
53
54
  end
54
55
 
55
56
  def validate_payload(payload)
56
- dest_host = ShopifyApp::Utils.sanitize_shop_domain(payload['dest'])
57
- iss_host = ShopifyApp::Utils.sanitize_shop_domain(payload['iss'])
57
+ dest_host = ShopifyApp::Utils.sanitize_shop_domain(payload["dest"])
58
+ iss_host = ShopifyApp::Utils.sanitize_shop_domain(payload["iss"])
58
59
  api_key = ShopifyApp.configuration.api_key
59
60
 
60
- raise InvalidAudienceError, "'aud' claim does not match api_key" unless payload['aud'] == api_key
61
+ raise InvalidAudienceError, "'aud' claim does not match api_key" unless payload["aud"] == api_key
61
62
  raise InvalidDestinationError, "'dest' claim host not a valid shopify host" unless dest_host
62
63
  raise MismatchedHostsError, "'dest' claim host does not match 'iss' claim host" unless dest_host == iss_host
63
64
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  class NullUserSessionStore
4
5
  class << self
@@ -7,7 +8,7 @@ module ShopifyApp
7
8
  end
8
9
 
9
10
  def store(_, _)
10
- raise SessionRepository::ConfigurationError, 'user_storage is not configured'
11
+ raise SessionRepository::ConfigurationError, "user_storage is not configured"
11
12
  end
12
13
 
13
14
  def retrieve_by_shopify_user_id(_)
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  class SessionRepository
5
+ extend ShopifyAPI::Auth::SessionStorage
6
+
4
7
  class ConfigurationError < StandardError; end
5
8
 
6
9
  class << self
@@ -40,6 +43,40 @@ module ShopifyApp
40
43
  load_user_storage
41
44
  end
42
45
 
46
+ # ShopifyAPI::Auth::SessionStorage override
47
+ def store_session(session)
48
+ if session.online?
49
+ user_storage.store(session, session.associated_user.id.to_s)
50
+ else
51
+ shop_storage.store(session)
52
+ end
53
+ end
54
+
55
+ # ShopifyAPI::Auth::SessionStorage override
56
+ def load_session(id)
57
+ match = id.match(/^offline_(.*)/)
58
+ if match
59
+ retrieve_shop_session_by_shopify_domain(match[1])
60
+ else
61
+ retrieve_user_session_by_shopify_user_id(id.split("_").last)
62
+ end
63
+ end
64
+
65
+ # ShopifyAPI::Auth::SessionStorage override
66
+ def delete_session(id)
67
+ match = id.match(/^offline_(.*)/)
68
+
69
+ record = if match
70
+ Shop.find_by(shopify_domain: match[1])
71
+ else
72
+ User.find_by(shopify_user_id: id.split("_").last)
73
+ end
74
+
75
+ record.destroy
76
+
77
+ true
78
+ end
79
+
43
80
  private
44
81
 
45
82
  def load_shop_storage
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module SessionStorage
4
5
  extend ActiveSupport::Concern
@@ -9,12 +10,9 @@ module ShopifyApp
9
10
  end
10
11
 
11
12
  def with_shopify_session(&block)
12
- ShopifyAPI::Session.temp(
13
- domain: shopify_domain,
14
- token: shopify_token,
15
- api_version: api_version,
16
- &block
17
- )
13
+ ShopifyAPI::Auth::Session.temp(shop: shopify_domain, access_token: shopify_token) do
14
+ yield block
15
+ end
18
16
  end
19
17
  end
20
18
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module ShopSessionStorage
4
5
  extend ActiveSupport::Concern
@@ -10,8 +11,8 @@ module ShopifyApp
10
11
 
11
12
  class_methods do
12
13
  def store(auth_session, *_args)
13
- shop = find_or_initialize_by(shopify_domain: auth_session.domain)
14
- shop.shopify_token = auth_session.token
14
+ shop = find_or_initialize_by(shopify_domain: auth_session.shop)
15
+ shop.shopify_token = auth_session.access_token
15
16
  shop.save!
16
17
  shop.id
17
18
  end
@@ -31,10 +32,9 @@ module ShopifyApp
31
32
  def construct_session(shop)
32
33
  return unless shop
33
34
 
34
- ShopifyAPI::Session.new(
35
- domain: shop.shopify_domain,
36
- token: shop.shopify_token,
37
- api_version: shop.api_version,
35
+ ShopifyAPI::Auth::Session.new(
36
+ shop: shop.shopify_domain,
37
+ access_token: shop.shopify_token
38
38
  )
39
39
  end
40
40
  end
@@ -11,9 +11,9 @@ module ShopifyApp
11
11
 
12
12
  class_methods do
13
13
  def store(auth_session, *_args)
14
- shop = find_or_initialize_by(shopify_domain: auth_session.domain)
15
- shop.shopify_token = auth_session.token
16
- shop.access_scopes = auth_session.access_scopes
14
+ shop = find_or_initialize_by(shopify_domain: auth_session.shop)
15
+ shop.shopify_token = auth_session.access_token
16
+ shop.access_scopes = auth_session.scope.to_s
17
17
 
18
18
  shop.save!
19
19
  shop.id
@@ -34,11 +34,10 @@ module ShopifyApp
34
34
  def construct_session(shop)
35
35
  return unless shop
36
36
 
37
- ShopifyAPI::Session.new(
38
- domain: shop.shopify_domain,
39
- token: shop.shopify_token,
40
- api_version: shop.api_version,
41
- access_scopes: shop.access_scopes
37
+ ShopifyAPI::Auth::Session.new(
38
+ shop: shop.shopify_domain,
39
+ access_token: shop.shopify_token,
40
+ scope: shop.access_scopes
42
41
  )
43
42
  end
44
43
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module UserSessionStorage
4
5
  extend ActiveSupport::Concern
@@ -11,8 +12,8 @@ module ShopifyApp
11
12
  class_methods do
12
13
  def store(auth_session, user)
13
14
  user = find_or_initialize_by(shopify_user_id: user[:id])
14
- user.shopify_token = auth_session.token
15
- user.shopify_domain = auth_session.domain
15
+ user.shopify_token = auth_session.access_token
16
+ user.shopify_domain = auth_session.shop
16
17
  user.save!
17
18
  user.id
18
19
  end
@@ -31,10 +32,22 @@ module ShopifyApp
31
32
 
32
33
  def construct_session(user)
33
34
  return unless user
34
- ShopifyAPI::Session.new(
35
- domain: user.shopify_domain,
36
- token: user.shopify_token,
37
- api_version: user.api_version,
35
+
36
+ associated_user = ShopifyAPI::Auth::AssociatedUser.new(
37
+ id: user.shopify_user_id,
38
+ first_name: "",
39
+ last_name: "",
40
+ email: "",
41
+ email_verified: false,
42
+ account_owner: false,
43
+ locale: "",
44
+ collaborator: false
45
+ )
46
+
47
+ ShopifyAPI::Auth::Session.new(
48
+ shop: user.shopify_domain,
49
+ access_token: user.shopify_token,
50
+ associated_user: associated_user
38
51
  )
39
52
  end
40
53
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module UserSessionStorageWithScopes
4
5
  extend ActiveSupport::Concern
@@ -11,9 +12,9 @@ module ShopifyApp
11
12
  class_methods do
12
13
  def store(auth_session, user)
13
14
  user = find_or_initialize_by(shopify_user_id: user[:id])
14
- user.shopify_token = auth_session.token
15
- user.shopify_domain = auth_session.domain
16
- user.access_scopes = auth_session.access_scopes
15
+ user.shopify_token = auth_session.access_token
16
+ user.shopify_domain = auth_session.shop
17
+ user.access_scopes = auth_session.scope.to_s
17
18
 
18
19
  user.save!
19
20
  user.id
@@ -34,11 +35,23 @@ module ShopifyApp
34
35
  def construct_session(user)
35
36
  return unless user
36
37
 
37
- ShopifyAPI::Session.new(
38
- domain: user.shopify_domain,
39
- token: user.shopify_token,
40
- api_version: user.api_version,
41
- access_scopes: user.access_scopes
38
+ associated_user = ShopifyAPI::Auth::AssociatedUser.new(
39
+ id: user.shopify_user_id,
40
+ first_name: "",
41
+ last_name: "",
42
+ email: "",
43
+ email_verified: false,
44
+ account_owner: false,
45
+ locale: "",
46
+ collaborator: false
47
+ )
48
+
49
+ ShopifyAPI::Auth::Session.new(
50
+ shop: user.shopify_domain,
51
+ access_token: user.shopify_token,
52
+ scope: user.access_scopes,
53
+ associated_user_scope: user.access_scopes,
54
+ associated_user: associated_user
42
55
  )
43
56
  end
44
57
  end
@@ -1,2 +1,3 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_app/test_helpers/webhook_verification_helper'
2
+
3
+ require "shopify_app/test_helpers/webhook_verification_helper"
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module TestHelpers
4
5
  module WebhookVerificationHelper
5
6
  def authorized_webhook_verification_headers!(params = {})
6
- digest = OpenSSL::Digest.new('sha256')
7
+ digest = OpenSSL::Digest.new("sha256")
7
8
  secret = ShopifyApp.configuration.secret
8
9
  valid_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, secret, params.to_query)).strip
9
- @request.headers['HTTP_X_SHOPIFY_HMAC_SHA256'] = valid_hmac
10
+ @request.headers["HTTP_X_SHOPIFY_HMAC_SHA256"] = valid_hmac
10
11
  end
11
12
 
12
13
  def unauthorized_webhook_verification_headers!
13
- @request.headers['HTTP_X_SHOPIFY_HMAC_SHA256'] = "invalid_hmac"
14
+ @request.headers["HTTP_X_SHOPIFY_HMAC_SHA256"] = "invalid_hmac"
14
15
  end
15
16
  end
16
17
  end
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
4
  module Utils
4
5
  def self.sanitize_shop_domain(shop_domain)
5
6
  myshopify_domain = ShopifyApp.configuration.myshopify_domain
6
7
  name = shop_domain.to_s.downcase.strip
7
8
  name += ".#{myshopify_domain}" if !name.include?(myshopify_domain.to_s) && !name.include?(".")
8
- name.sub!(%r|https?://|, '')
9
+ name.sub!(%r|https?://|, "")
9
10
 
10
11
  u = URI("http://#{name}")
11
12
  u.host if u.host&.match(/^[a-z0-9][a-z0-9\-]*[a-z0-9]\.#{Regexp.escape(myshopify_domain)}$/)
@@ -13,14 +14,6 @@ module ShopifyApp
13
14
  nil
14
15
  end
15
16
 
16
- def self.fetch_known_api_versions
17
- Rails.logger.info("[ShopifyAPI::ApiVersion] Fetching known Admin API Versions from Shopify...")
18
- ShopifyAPI::ApiVersion.fetch_known_versions
19
- Rails.logger.info("[ShopifyAPI::ApiVersion] Known API Versions: #{ShopifyAPI::ApiVersion.versions.keys}")
20
- rescue ActiveResource::ConnectionError
21
- logger.error("[ShopifyAPI::ApiVersion] Unable to fetch api_versions from Shopify")
22
- end
23
-
24
17
  def self.shop_login_url(shop:, host:, return_to:)
25
18
  return ShopifyApp.configuration.login_url unless shop
26
19
  url = URI(ShopifyApp.configuration.login_url)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ShopifyApp
3
- VERSION = '18.1.3'
4
+ VERSION = "19.0.0"
4
5
  end
data/lib/shopify_app.rb CHANGED
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_app/version'
2
+
3
+ require "shopify_app/version"
3
4
 
4
5
  # deps
5
- require 'shopify_api'
6
- require 'omniauth/rails_csrf_protection'
7
- require 'omniauth-shopify-oauth2'
8
- require 'redirect_safely'
6
+ require "shopify_api"
7
+ require "redirect_safely"
9
8
 
10
9
  module ShopifyApp
11
10
  def self.rails6?
@@ -22,59 +21,55 @@ module ShopifyApp
22
21
 
23
22
  def self.use_webpacker?
24
23
  rails6? &&
25
- defined?(Webpacker) == 'constant' &&
24
+ defined?(Webpacker) == "constant" &&
26
25
  !configuration.disable_webpacker
27
26
  end
28
27
 
29
28
  # config
30
- require 'shopify_app/configuration'
29
+ require "shopify_app/configuration"
31
30
 
32
31
  # engine
33
- require 'shopify_app/engine'
32
+ require "shopify_app/engine"
34
33
 
35
34
  # utils
36
- require 'shopify_app/utils'
35
+ require "shopify_app/utils"
37
36
 
38
37
  # controller concerns
39
- require 'shopify_app/controller_concerns/csrf_protection'
40
- require 'shopify_app/controller_concerns/localization'
41
- require 'shopify_app/controller_concerns/itp'
42
- require 'shopify_app/controller_concerns/login_protection'
43
- require 'shopify_app/controller_concerns/embedded_app'
44
- require 'shopify_app/controller_concerns/payload_verification'
45
- require 'shopify_app/controller_concerns/app_proxy_verification'
46
- require 'shopify_app/controller_concerns/webhook_verification'
38
+ require "shopify_app/controller_concerns/csrf_protection"
39
+ require "shopify_app/controller_concerns/localization"
40
+ require "shopify_app/controller_concerns/itp"
41
+ require "shopify_app/controller_concerns/login_protection"
42
+ require "shopify_app/controller_concerns/embedded_app"
43
+ require "shopify_app/controller_concerns/payload_verification"
44
+ require "shopify_app/controller_concerns/app_proxy_verification"
45
+ require "shopify_app/controller_concerns/webhook_verification"
47
46
 
48
47
  # jobs
49
- require 'shopify_app/jobs/webhooks_manager_job'
50
- require 'shopify_app/jobs/scripttags_manager_job'
48
+ require "shopify_app/jobs/webhooks_manager_job"
49
+ require "shopify_app/jobs/scripttags_manager_job"
51
50
 
52
51
  # managers
53
- require 'shopify_app/managers/webhooks_manager'
54
- require 'shopify_app/managers/scripttags_manager'
52
+ require "shopify_app/managers/webhooks_manager"
53
+ require "shopify_app/managers/scripttags_manager"
55
54
 
56
55
  # middleware
57
- require 'shopify_app/middleware/jwt_middleware'
58
- require 'shopify_app/middleware/same_site_cookie_middleware'
56
+ require "shopify_app/middleware/jwt_middleware"
59
57
 
60
58
  # session
61
- require 'shopify_app/session/in_memory_session_store'
62
- require 'shopify_app/session/in_memory_shop_session_store'
63
- require 'shopify_app/session/in_memory_user_session_store'
64
- require 'shopify_app/session/jwt'
65
- require 'shopify_app/session/null_user_session_store'
66
- require 'shopify_app/session/session_repository'
67
- require 'shopify_app/session/session_storage'
68
- require 'shopify_app/session/shop_session_storage'
69
- require 'shopify_app/session/shop_session_storage_with_scopes'
70
- require 'shopify_app/session/user_session_storage'
71
- require 'shopify_app/session/user_session_storage_with_scopes'
59
+ require "shopify_app/session/in_memory_session_store"
60
+ require "shopify_app/session/in_memory_shop_session_store"
61
+ require "shopify_app/session/in_memory_user_session_store"
62
+ require "shopify_app/session/jwt"
63
+ require "shopify_app/session/null_user_session_store"
64
+ require "shopify_app/session/session_repository"
65
+ require "shopify_app/session/session_storage"
66
+ require "shopify_app/session/shop_session_storage"
67
+ require "shopify_app/session/shop_session_storage_with_scopes"
68
+ require "shopify_app/session/user_session_storage"
69
+ require "shopify_app/session/user_session_storage_with_scopes"
72
70
 
73
71
  # access scopes strategies
74
- require 'shopify_app/access_scopes/shop_strategy'
75
- require 'shopify_app/access_scopes/user_strategy'
76
- require 'shopify_app/access_scopes/noop_strategy'
77
-
78
- # omniauth_configuration
79
- require 'shopify_app/omniauth/omniauth_configuration'
72
+ require "shopify_app/access_scopes/shop_strategy"
73
+ require "shopify_app/access_scopes/user_strategy"
74
+ require "shopify_app/access_scopes/noop_strategy"
80
75
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shopify_app",
3
- "version": "18.1.3",
3
+ "version": "19.0.0",
4
4
  "repository": "git@github.com:Shopify/shopify_app.git",
5
5
  "author": "Shopify",
6
6
  "license": "MIT",
data/shopify_app.gemspec CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- $LOAD_PATH.push(File.expand_path('../lib', __FILE__))
2
+
3
+ $LOAD_PATH.push(File.expand_path("../lib", __FILE__))
3
4
  require "shopify_app/version"
4
5
 
5
6
  Gem::Specification.new do |s|
@@ -7,30 +8,30 @@ Gem::Specification.new do |s|
7
8
  s.version = ShopifyApp::VERSION
8
9
  s.platform = Gem::Platform::RUBY
9
10
  s.author = "Shopify"
10
- s.summary = 'This gem is used to get quickly started with the Shopify API'
11
+ s.summary = "This gem is used to get quickly started with the Shopify API"
11
12
 
12
13
  s.required_ruby_version = ">= 2.6"
13
14
 
14
- s.metadata['allowed_push_host'] = 'https://rubygems.org'
15
+ s.metadata["allowed_push_host"] = "https://rubygems.org"
15
16
 
16
- s.add_runtime_dependency('browser_sniffer', '~> 2.0')
17
- s.add_runtime_dependency('omniauth-rails_csrf_protection')
18
- s.add_runtime_dependency('rails', '> 5.2.1')
19
- s.add_runtime_dependency('shopify_api', '~> 9.4')
20
- s.add_runtime_dependency('omniauth-shopify-oauth2', '~> 2.3')
21
- s.add_runtime_dependency('jwt', '>= 2.2.3')
22
- s.add_runtime_dependency('redirect_safely', '~> 1.0')
17
+ s.add_runtime_dependency("activeresource") # TODO: Remove this once all active resource dependencies are removed
18
+ s.add_runtime_dependency("browser_sniffer", "~> 1.4.0")
19
+ s.add_runtime_dependency("jwt", ">= 2.2.3")
20
+ s.add_runtime_dependency("rails", "> 5.2.1")
21
+ s.add_runtime_dependency("redirect_safely", "~> 1.0")
22
+ s.add_runtime_dependency("shopify_api", "~> 10.0")
23
+ s.add_runtime_dependency("sprockets-rails", ">= 2.0.0")
23
24
 
24
- s.add_development_dependency('rake')
25
- s.add_development_dependency('byebug')
26
- s.add_development_dependency('pry')
27
- s.add_development_dependency('pry-nav')
28
- s.add_development_dependency('pry-stack_explorer')
29
- s.add_development_dependency('rb-readline')
30
- s.add_development_dependency('sqlite3', '~> 1.4')
31
- s.add_development_dependency('minitest')
32
- s.add_development_dependency('mocha')
33
- s.add_development_dependency('webmock')
25
+ s.add_development_dependency("byebug")
26
+ s.add_development_dependency("minitest")
27
+ s.add_development_dependency("mocha")
28
+ s.add_development_dependency("pry")
29
+ s.add_development_dependency("pry-nav")
30
+ s.add_development_dependency("pry-stack_explorer")
31
+ s.add_development_dependency("rake")
32
+ s.add_development_dependency("rb-readline")
33
+ s.add_development_dependency("sqlite3", "~> 1.4")
34
+ s.add_development_dependency("webmock")
34
35
 
35
36
  s.files = %x(git ls-files).split("\n").reject { |f| f.match(%r{^(test|example)/}) }
36
37
  s.test_files = %x(git ls-files -- {test}/*).split("\n")
data/yarn.lock CHANGED
@@ -2555,9 +2555,9 @@ flush-write-stream@^1.0.0:
2555
2555
  readable-stream "^2.3.6"
2556
2556
 
2557
2557
  follow-redirects@^1.0.0:
2558
- version "1.14.7"
2559
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
2560
- integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
2558
+ version "1.14.9"
2559
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
2560
+ integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
2561
2561
 
2562
2562
  for-in@^1.0.2:
2563
2563
  version "1.0.2"
@@ -3892,9 +3892,9 @@ path-to-regexp@^1.7.0:
3892
3892
  isarray "0.0.1"
3893
3893
 
3894
3894
  pathval@^1.1.0:
3895
- version "1.1.0"
3896
- resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
3897
- integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
3895
+ version "1.1.1"
3896
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
3897
+ integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
3898
3898
 
3899
3899
  pbkdf2@^3.0.3:
3900
3900
  version "3.1.1"