shopify_app 17.0.4 → 17.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/bug-report.md +63 -0
- data/.github/ISSUE_TEMPLATE/config.yml +1 -0
- data/.github/ISSUE_TEMPLATE/feature-request.md +33 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +17 -1
- data/.github/workflows/build.yml +4 -1
- data/CHANGELOG.md +24 -0
- data/CONTRIBUTING.md +76 -0
- data/Gemfile.lock +81 -80
- data/README.md +72 -593
- data/app/controllers/concerns/shopify_app/shop_access_scopes_verification.rb +32 -0
- data/app/controllers/shopify_app/callback_controller.rb +24 -2
- data/app/controllers/shopify_app/sessions_controller.rb +13 -4
- data/config/locales/nl.yml +1 -1
- data/docs/Quickstart.md +15 -77
- data/docs/Troubleshooting.md +129 -4
- data/docs/Upgrading.md +126 -0
- data/docs/shopify_app/authentication.md +124 -0
- data/docs/shopify_app/engine.md +82 -0
- data/docs/shopify_app/generators.md +127 -0
- data/docs/shopify_app/handling-access-scopes-changes.md +14 -0
- data/docs/shopify_app/script-tags.md +28 -0
- data/docs/shopify_app/session-repository.md +88 -0
- data/docs/shopify_app/testing.md +38 -0
- data/docs/shopify_app/webhooks.md +72 -0
- data/lib/generators/shopify_app/home_controller/templates/home_controller.rb +2 -0
- data/lib/generators/shopify_app/home_controller/templates/unauthenticated_home_controller.rb +1 -0
- data/lib/generators/shopify_app/install/install_generator.rb +30 -1
- data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +1 -1
- data/lib/generators/shopify_app/install/templates/omniauth.rb +1 -0
- data/lib/generators/shopify_app/install/templates/shopify_app.rb.tt +5 -2
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb.tt +8 -0
- data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +27 -0
- data/lib/generators/shopify_app/shop_model/templates/db/migrate/add_shop_access_scopes_column.erb +5 -0
- data/lib/generators/shopify_app/shop_model/templates/shop.rb +1 -1
- data/lib/generators/shopify_app/shopify_app_generator.rb +1 -1
- data/lib/generators/shopify_app/user_model/templates/db/migrate/add_user_access_scopes_column.erb +5 -0
- data/lib/generators/shopify_app/user_model/templates/user.rb +1 -1
- data/lib/generators/shopify_app/user_model/user_model_generator.rb +27 -0
- data/lib/shopify_app.rb +10 -0
- data/lib/shopify_app/access_scopes/noop_strategy.rb +13 -0
- data/lib/shopify_app/access_scopes/shop_strategy.rb +24 -0
- data/lib/shopify_app/access_scopes/user_strategy.rb +41 -0
- data/lib/shopify_app/configuration.rb +22 -0
- data/lib/shopify_app/middleware/same_site_cookie_middleware.rb +1 -1
- data/lib/shopify_app/omniauth/omniauth_configuration.rb +64 -0
- data/lib/shopify_app/session/in_memory_shop_session_store.rb +9 -7
- data/lib/shopify_app/session/in_memory_user_session_store.rb +9 -7
- data/lib/shopify_app/session/shop_session_storage_with_scopes.rb +58 -0
- data/lib/shopify_app/session/user_session_storage_with_scopes.rb +58 -0
- data/lib/shopify_app/utils.rb +12 -0
- data/lib/shopify_app/version.rb +1 -1
- data/package.json +1 -1
- data/shopify_app.gemspec +2 -2
- data/yarn.lock +16 -16
- metadata +29 -10
- data/.github/ISSUE_TEMPLATE.md +0 -19
- data/docs/install-on-dev-shop.png +0 -0
- data/docs/test-your-app.png +0 -0
- data/lib/generators/shopify_app/install/templates/shopify_provider.rb +0 -20
@@ -9,6 +9,8 @@ module ShopifyApp
|
|
9
9
|
attr_accessor :secret
|
10
10
|
attr_accessor :old_secret
|
11
11
|
attr_accessor :scope
|
12
|
+
attr_writer :shop_access_scopes
|
13
|
+
attr_writer :user_access_scopes
|
12
14
|
attr_accessor :embedded_app
|
13
15
|
alias_method :embedded_app?, :embedded_app
|
14
16
|
attr_accessor :webhooks
|
@@ -16,6 +18,8 @@ module ShopifyApp
|
|
16
18
|
attr_accessor :after_authenticate_job
|
17
19
|
attr_accessor :api_version
|
18
20
|
|
21
|
+
attr_accessor :reauth_on_access_scope_changes
|
22
|
+
|
19
23
|
# customise urls
|
20
24
|
attr_accessor :root_url
|
21
25
|
attr_writer :login_url
|
@@ -70,6 +74,16 @@ module ShopifyApp
|
|
70
74
|
ShopifyApp::SessionRepository.shop_storage
|
71
75
|
end
|
72
76
|
|
77
|
+
def shop_access_scopes_strategy
|
78
|
+
return ShopifyApp::AccessScopes::NoopStrategy unless reauth_on_access_scope_changes
|
79
|
+
ShopifyApp::AccessScopes::ShopStrategy
|
80
|
+
end
|
81
|
+
|
82
|
+
def user_access_scopes_strategy
|
83
|
+
return ShopifyApp::AccessScopes::NoopStrategy unless reauth_on_access_scope_changes
|
84
|
+
ShopifyApp::AccessScopes::UserStrategy
|
85
|
+
end
|
86
|
+
|
73
87
|
def has_webhooks?
|
74
88
|
webhooks.present?
|
75
89
|
end
|
@@ -81,6 +95,14 @@ module ShopifyApp
|
|
81
95
|
def enable_same_site_none
|
82
96
|
!Rails.env.test? && (@enable_same_site_none.nil? ? embedded_app? : @enable_same_site_none)
|
83
97
|
end
|
98
|
+
|
99
|
+
def shop_access_scopes
|
100
|
+
@shop_access_scopes || scope
|
101
|
+
end
|
102
|
+
|
103
|
+
def user_access_scopes
|
104
|
+
@user_access_scopes || scope
|
105
|
+
end
|
84
106
|
end
|
85
107
|
|
86
108
|
def self.configuration
|
@@ -21,7 +21,7 @@ module ShopifyApp
|
|
21
21
|
.compact
|
22
22
|
.map do |cookie|
|
23
23
|
cookie << '; Secure' unless cookie =~ /;\s*secure/i
|
24
|
-
cookie << '; SameSite=None'
|
24
|
+
cookie << '; SameSite=None' if ShopifyApp.configuration.embedded_app?
|
25
25
|
cookie
|
26
26
|
end
|
27
27
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
class OmniAuthConfiguration
|
5
|
+
attr_reader :strategy, :request
|
6
|
+
attr_writer :client_options_site, :scopes, :per_user_permissions
|
7
|
+
|
8
|
+
def initialize(strategy, request)
|
9
|
+
@strategy = strategy
|
10
|
+
@request = request
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_options
|
14
|
+
strategy.options[:client_options][:site] = client_options_site
|
15
|
+
strategy.options[:scope] = scopes
|
16
|
+
strategy.options[:old_client_secret] = ShopifyApp.configuration.old_secret
|
17
|
+
strategy.options[:per_user_permissions] = request_online_tokens?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def request_online_tokens?
|
23
|
+
return @per_user_permissions unless @per_user_permissions.nil?
|
24
|
+
default_request_online_tokens?
|
25
|
+
end
|
26
|
+
|
27
|
+
def scopes
|
28
|
+
@scopes || default_scopes
|
29
|
+
end
|
30
|
+
|
31
|
+
def client_options_site
|
32
|
+
@client_options_site || default_client_options_site
|
33
|
+
end
|
34
|
+
|
35
|
+
def default_scopes
|
36
|
+
if request_online_tokens?
|
37
|
+
ShopifyApp.configuration.user_access_scopes
|
38
|
+
else
|
39
|
+
ShopifyApp.configuration.shop_access_scopes
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def default_client_options_site
|
44
|
+
return '' unless shop_domain.present?
|
45
|
+
"https://#{shopify_auth_params[:shop]}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_request_online_tokens?
|
49
|
+
strategy.session[:user_tokens] && !update_shop_scopes?
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_shop_scopes?
|
53
|
+
ShopifyApp.configuration.shop_access_scopes_strategy.update_access_scopes?(shop_domain)
|
54
|
+
end
|
55
|
+
|
56
|
+
def shop_domain
|
57
|
+
request.params['shop'] || (shopify_auth_params && shopify_auth_params['shop'])
|
58
|
+
end
|
59
|
+
|
60
|
+
def shopify_auth_params
|
61
|
+
strategy.session['shopify.omniauth_params']&.with_indifferent_access
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module ShopifyApp
|
3
3
|
class InMemoryShopSessionStore < InMemorySessionStore
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
class << self
|
5
|
+
def store(session, *args)
|
6
|
+
id = super
|
7
|
+
repo[session.domain] = session
|
8
|
+
id
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def retrieve_by_shopify_domain(shopify_domain)
|
12
|
+
repo[shopify_domain]
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module ShopifyApp
|
3
3
|
class InMemoryUserSessionStore < InMemorySessionStore
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
class << self
|
5
|
+
def store(session, user)
|
6
|
+
id = super
|
7
|
+
repo[user.shopify_user_id] = session
|
8
|
+
id
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def retrieve_by_shopify_user_id(user_id)
|
12
|
+
repo[user_id]
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ShopifyApp
|
4
|
+
module ShopSessionStorageWithScopes
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
include ::ShopifyApp::SessionStorage
|
7
|
+
|
8
|
+
included do
|
9
|
+
validates :shopify_domain, presence: true, uniqueness: { case_sensitive: false }
|
10
|
+
end
|
11
|
+
|
12
|
+
class_methods do
|
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
|
17
|
+
|
18
|
+
shop.save!
|
19
|
+
shop.id
|
20
|
+
end
|
21
|
+
|
22
|
+
def retrieve(id)
|
23
|
+
shop = find_by(id: id)
|
24
|
+
construct_session(shop)
|
25
|
+
end
|
26
|
+
|
27
|
+
def retrieve_by_shopify_domain(domain)
|
28
|
+
shop = find_by(shopify_domain: domain)
|
29
|
+
construct_session(shop)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def construct_session(shop)
|
35
|
+
return unless shop
|
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
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def access_scopes=(scopes)
|
47
|
+
super(scopes)
|
48
|
+
rescue NotImplementedError, NoMethodError
|
49
|
+
raise NotImplementedError, "#access_scopes= must be defined to handle storing access scopes: #{scopes}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def access_scopes
|
53
|
+
super
|
54
|
+
rescue NotImplementedError, NoMethodError
|
55
|
+
raise NotImplementedError, "#access_scopes= must be defined to hook into stored access scopes"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module ShopifyApp
|
3
|
+
module UserSessionStorageWithScopes
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
include ::ShopifyApp::SessionStorage
|
6
|
+
|
7
|
+
included do
|
8
|
+
validates :shopify_domain, presence: true
|
9
|
+
end
|
10
|
+
|
11
|
+
class_methods do
|
12
|
+
def store(auth_session, user)
|
13
|
+
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
|
17
|
+
|
18
|
+
user.save!
|
19
|
+
user.id
|
20
|
+
end
|
21
|
+
|
22
|
+
def retrieve(id)
|
23
|
+
user = find_by(id: id)
|
24
|
+
construct_session(user)
|
25
|
+
end
|
26
|
+
|
27
|
+
def retrieve_by_shopify_user_id(user_id)
|
28
|
+
user = find_by(shopify_user_id: user_id)
|
29
|
+
construct_session(user)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def construct_session(user)
|
35
|
+
return unless user
|
36
|
+
|
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
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def access_scopes=(scopes)
|
47
|
+
super(scopes)
|
48
|
+
rescue NotImplementedError, NoMethodError
|
49
|
+
raise NotImplementedError, "#access_scopes= must be defined to handle storing access scopes: #{scopes}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def access_scopes
|
53
|
+
super
|
54
|
+
rescue NotImplementedError, NoMethodError
|
55
|
+
raise NotImplementedError, "#access_scopes= must be defined to hook into stored access scopes"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/shopify_app/utils.rb
CHANGED
@@ -20,5 +20,17 @@ module ShopifyApp
|
|
20
20
|
rescue ActiveResource::ConnectionError
|
21
21
|
logger.error("[ShopifyAPI::ApiVersion] Unable to fetch api_versions from Shopify")
|
22
22
|
end
|
23
|
+
|
24
|
+
def self.shop_login_url(shop:, return_to:)
|
25
|
+
return ShopifyApp.configuration.login_url unless shop
|
26
|
+
url = URI(ShopifyApp.configuration.login_url)
|
27
|
+
|
28
|
+
url.query = URI.encode_www_form(
|
29
|
+
shop: shop,
|
30
|
+
return_to: return_to,
|
31
|
+
)
|
32
|
+
|
33
|
+
url.to_s
|
34
|
+
end
|
23
35
|
end
|
24
36
|
end
|
data/lib/shopify_app/version.rb
CHANGED
data/package.json
CHANGED
data/shopify_app.gemspec
CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.metadata['allowed_push_host'] = 'https://rubygems.org'
|
15
15
|
|
16
16
|
s.add_runtime_dependency('browser_sniffer', '~> 1.2.2')
|
17
|
-
s.add_runtime_dependency('rails', '> 5.2.1', '< 6.
|
18
|
-
s.add_runtime_dependency('shopify_api', '~> 9.
|
17
|
+
s.add_runtime_dependency('rails', '> 5.2.1', '< 6.2')
|
18
|
+
s.add_runtime_dependency('shopify_api', '~> 9.4')
|
19
19
|
s.add_runtime_dependency('omniauth-shopify-oauth2', '~> 2.2.2')
|
20
20
|
s.add_runtime_dependency('jwt', '~> 2.2.1')
|
21
21
|
s.add_runtime_dependency('redirect_safely', '~> 1.0')
|
data/yarn.lock
CHANGED
@@ -1474,10 +1474,10 @@ bluebird@^3.5.5:
|
|
1474
1474
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
1475
1475
|
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
1476
1476
|
|
1477
|
-
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.
|
1478
|
-
version "4.
|
1479
|
-
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.
|
1480
|
-
integrity sha512-
|
1477
|
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
1478
|
+
version "4.12.0"
|
1479
|
+
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
1480
|
+
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
1481
1481
|
|
1482
1482
|
bn.js@^5.1.1:
|
1483
1483
|
version "5.1.3"
|
@@ -1531,7 +1531,7 @@ braces@^3.0.2, braces@~3.0.2:
|
|
1531
1531
|
dependencies:
|
1532
1532
|
fill-range "^7.0.1"
|
1533
1533
|
|
1534
|
-
brorand@^1.0.1:
|
1534
|
+
brorand@^1.0.1, brorand@^1.1.0:
|
1535
1535
|
version "1.1.0"
|
1536
1536
|
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
1537
1537
|
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
@@ -2180,17 +2180,17 @@ electron-to-chromium@^1.3.562:
|
|
2180
2180
|
integrity sha512-fNaYN3EtKQWLQsrKXui8mzcryJXuA0LbCLoizeX6oayG2emBaS5MauKjCPAvc29NEY4FpLHIUWiP+Y0Bfrs5dg==
|
2181
2181
|
|
2182
2182
|
elliptic@^6.5.3:
|
2183
|
-
version "6.5.
|
2184
|
-
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.
|
2185
|
-
integrity sha512-
|
2183
|
+
version "6.5.4"
|
2184
|
+
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
2185
|
+
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
2186
2186
|
dependencies:
|
2187
|
-
bn.js "^4.
|
2188
|
-
brorand "^1.0
|
2187
|
+
bn.js "^4.11.9"
|
2188
|
+
brorand "^1.1.0"
|
2189
2189
|
hash.js "^1.0.0"
|
2190
|
-
hmac-drbg "^1.0.
|
2191
|
-
inherits "^2.0.
|
2192
|
-
minimalistic-assert "^1.0.
|
2193
|
-
minimalistic-crypto-utils "^1.0.
|
2190
|
+
hmac-drbg "^1.0.1"
|
2191
|
+
inherits "^2.0.4"
|
2192
|
+
minimalistic-assert "^1.0.1"
|
2193
|
+
minimalistic-crypto-utils "^1.0.1"
|
2194
2194
|
|
2195
2195
|
emoji-regex@^7.0.1:
|
2196
2196
|
version "7.0.3"
|
@@ -2782,7 +2782,7 @@ he@1.2.0:
|
|
2782
2782
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
2783
2783
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
2784
2784
|
|
2785
|
-
hmac-drbg@^1.0.
|
2785
|
+
hmac-drbg@^1.0.1:
|
2786
2786
|
version "1.0.1"
|
2787
2787
|
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
2788
2788
|
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
|
@@ -3492,7 +3492,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
|
3492
3492
|
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
3493
3493
|
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
|
3494
3494
|
|
3495
|
-
minimalistic-crypto-utils@^1.0.
|
3495
|
+
minimalistic-crypto-utils@^1.0.1:
|
3496
3496
|
version "1.0.1"
|
3497
3497
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
3498
3498
|
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 17.
|
4
|
+
version: 17.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01
|
11
|
+
date: 2021-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: browser_sniffer
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 5.2.1
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: '6.
|
36
|
+
version: '6.2'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,21 +43,21 @@ dependencies:
|
|
43
43
|
version: 5.2.1
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '6.
|
46
|
+
version: '6.2'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shopify_api
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '9.
|
53
|
+
version: '9.4'
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '9.
|
60
|
+
version: '9.4'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: omniauth-shopify-oauth2
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,7 +248,9 @@ extra_rdoc_files: []
|
|
248
248
|
files:
|
249
249
|
- ".babelrc"
|
250
250
|
- ".github/CODEOWNERS"
|
251
|
-
- ".github/ISSUE_TEMPLATE.md"
|
251
|
+
- ".github/ISSUE_TEMPLATE/bug-report.md"
|
252
|
+
- ".github/ISSUE_TEMPLATE/config.yml"
|
253
|
+
- ".github/ISSUE_TEMPLATE/feature-request.md"
|
252
254
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
253
255
|
- ".github/probots.yml"
|
254
256
|
- ".github/workflows/build.yml"
|
@@ -259,6 +261,7 @@ files:
|
|
259
261
|
- ".rubocop.yml"
|
260
262
|
- ".ruby-version"
|
261
263
|
- CHANGELOG.md
|
264
|
+
- CONTRIBUTING.md
|
262
265
|
- Gemfile
|
263
266
|
- Gemfile.lock
|
264
267
|
- LICENSE
|
@@ -278,6 +281,7 @@ files:
|
|
278
281
|
- app/controllers/concerns/shopify_app/authenticated.rb
|
279
282
|
- app/controllers/concerns/shopify_app/ensure_authenticated_links.rb
|
280
283
|
- app/controllers/concerns/shopify_app/require_known_shop.rb
|
284
|
+
- app/controllers/concerns/shopify_app/shop_access_scopes_verification.rb
|
281
285
|
- app/controllers/shopify_app/authenticated_controller.rb
|
282
286
|
- app/controllers/shopify_app/callback_controller.rb
|
283
287
|
- app/controllers/shopify_app/extension_verification_controller.rb
|
@@ -321,8 +325,15 @@ files:
|
|
321
325
|
- docs/Quickstart.md
|
322
326
|
- docs/Releasing.md
|
323
327
|
- docs/Troubleshooting.md
|
324
|
-
- docs/
|
325
|
-
- docs/
|
328
|
+
- docs/Upgrading.md
|
329
|
+
- docs/shopify_app/authentication.md
|
330
|
+
- docs/shopify_app/engine.md
|
331
|
+
- docs/shopify_app/generators.md
|
332
|
+
- docs/shopify_app/handling-access-scopes-changes.md
|
333
|
+
- docs/shopify_app/script-tags.md
|
334
|
+
- docs/shopify_app/session-repository.md
|
335
|
+
- docs/shopify_app/testing.md
|
336
|
+
- docs/shopify_app/webhooks.md
|
326
337
|
- images/app-proxy-screenshot.png
|
327
338
|
- karma.conf.js
|
328
339
|
- lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb
|
@@ -351,7 +362,7 @@ files:
|
|
351
362
|
- lib/generators/shopify_app/install/templates/shopify_app.js
|
352
363
|
- lib/generators/shopify_app/install/templates/shopify_app.rb.tt
|
353
364
|
- lib/generators/shopify_app/install/templates/shopify_app_index.js
|
354
|
-
- lib/generators/shopify_app/install/templates/shopify_provider.rb
|
365
|
+
- lib/generators/shopify_app/install/templates/shopify_provider.rb.tt
|
355
366
|
- lib/generators/shopify_app/install/templates/user_agent.rb
|
356
367
|
- lib/generators/shopify_app/products_controller/products_controller_generator.rb
|
357
368
|
- lib/generators/shopify_app/products_controller/templates/products_controller.rb
|
@@ -361,16 +372,21 @@ files:
|
|
361
372
|
- lib/generators/shopify_app/routes/routes_generator.rb
|
362
373
|
- lib/generators/shopify_app/routes/templates/routes.rb
|
363
374
|
- lib/generators/shopify_app/shop_model/shop_model_generator.rb
|
375
|
+
- lib/generators/shopify_app/shop_model/templates/db/migrate/add_shop_access_scopes_column.erb
|
364
376
|
- lib/generators/shopify_app/shop_model/templates/db/migrate/create_shops.erb
|
365
377
|
- lib/generators/shopify_app/shop_model/templates/shop.rb
|
366
378
|
- lib/generators/shopify_app/shop_model/templates/shops.yml
|
367
379
|
- lib/generators/shopify_app/shopify_app_generator.rb
|
380
|
+
- lib/generators/shopify_app/user_model/templates/db/migrate/add_user_access_scopes_column.erb
|
368
381
|
- lib/generators/shopify_app/user_model/templates/db/migrate/create_users.erb
|
369
382
|
- lib/generators/shopify_app/user_model/templates/user.rb
|
370
383
|
- lib/generators/shopify_app/user_model/templates/users.yml
|
371
384
|
- lib/generators/shopify_app/user_model/user_model_generator.rb
|
372
385
|
- lib/generators/shopify_app/views/views_generator.rb
|
373
386
|
- lib/shopify_app.rb
|
387
|
+
- lib/shopify_app/access_scopes/noop_strategy.rb
|
388
|
+
- lib/shopify_app/access_scopes/shop_strategy.rb
|
389
|
+
- lib/shopify_app/access_scopes/user_strategy.rb
|
374
390
|
- lib/shopify_app/configuration.rb
|
375
391
|
- lib/shopify_app/controller_concerns/app_proxy_verification.rb
|
376
392
|
- lib/shopify_app/controller_concerns/csrf_protection.rb
|
@@ -387,6 +403,7 @@ files:
|
|
387
403
|
- lib/shopify_app/managers/webhooks_manager.rb
|
388
404
|
- lib/shopify_app/middleware/jwt_middleware.rb
|
389
405
|
- lib/shopify_app/middleware/same_site_cookie_middleware.rb
|
406
|
+
- lib/shopify_app/omniauth/omniauth_configuration.rb
|
390
407
|
- lib/shopify_app/session/in_memory_session_store.rb
|
391
408
|
- lib/shopify_app/session/in_memory_shop_session_store.rb
|
392
409
|
- lib/shopify_app/session/in_memory_user_session_store.rb
|
@@ -395,7 +412,9 @@ files:
|
|
395
412
|
- lib/shopify_app/session/session_repository.rb
|
396
413
|
- lib/shopify_app/session/session_storage.rb
|
397
414
|
- lib/shopify_app/session/shop_session_storage.rb
|
415
|
+
- lib/shopify_app/session/shop_session_storage_with_scopes.rb
|
398
416
|
- lib/shopify_app/session/user_session_storage.rb
|
417
|
+
- lib/shopify_app/session/user_session_storage_with_scopes.rb
|
399
418
|
- lib/shopify_app/test_helpers/all.rb
|
400
419
|
- lib/shopify_app/test_helpers/webhook_verification_helper.rb
|
401
420
|
- lib/shopify_app/utils.rb
|