shopify_app 17.0.5 → 17.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- 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/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +76 -0
- data/Gemfile.lock +61 -61
- 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 +18 -2
- data/docs/Quickstart.md +15 -77
- data/docs/Upgrading.md +110 -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 +8 -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/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/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 +1 -1
- metadata +27 -8
- 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
@@ -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
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.add_runtime_dependency('browser_sniffer', '~> 1.2.2')
|
17
17
|
s.add_runtime_dependency('rails', '> 5.2.1', '< 6.1')
|
18
|
-
s.add_runtime_dependency('shopify_api', '~> 9.
|
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')
|
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.0
|
4
|
+
version: 17.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: browser_sniffer
|
@@ -50,14 +50,14 @@ dependencies:
|
|
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
|
data/.github/ISSUE_TEMPLATE.md
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
Submitting Issues
|
2
|
-
-----------------
|
3
|
-
|
4
|
-
Please open an issue here if you encounter a specific bug with this gem or the generators
|
5
|
-
|
6
|
-
General questions about the Shopify API should be posted on the [Shopify forums](https://ecommerce.shopify.com/c/shopify-apis-and-technology).
|
7
|
-
|
8
|
-
|
9
|
-
Authentication Issues
|
10
|
-
---------------------
|
11
|
-
|
12
|
-
A great deal of the issues surrounding this repo are around authenticating (installing) the generated app with Shopify.
|
13
|
-
|
14
|
-
If you are experiencing issues with your app authenticating/installing the best way to get help fast is to create a repo with the minimal amount of code to demonstrate the issue and a clearly documented set of steps you took to arrive there. This will help us solve your problem quicker since we won't need to spend any time figuring out how to reproduce the bug. Please also include your operating system and browser.
|
15
|
-
|
16
|
-
Security
|
17
|
-
--------
|
18
|
-
|
19
|
-
Please be certain to redact any private information from your logs or code snippets such as Api Keys, Api Secrets, and any authentication tokens such as shop_tokens.
|
Binary file
|
data/docs/test-your-app.png
DELETED
Binary file
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
provider :shopify,
|
4
|
-
ShopifyApp.configuration.api_key,
|
5
|
-
ShopifyApp.configuration.secret,
|
6
|
-
scope: ShopifyApp.configuration.scope,
|
7
|
-
setup: lambda { |env|
|
8
|
-
strategy = env['omniauth.strategy']
|
9
|
-
|
10
|
-
shopify_auth_params = strategy.session['shopify.omniauth_params']&.with_indifferent_access
|
11
|
-
shop = if shopify_auth_params.present?
|
12
|
-
"https://#{shopify_auth_params[:shop]}"
|
13
|
-
else
|
14
|
-
''
|
15
|
-
end
|
16
|
-
|
17
|
-
strategy.options[:client_options][:site] = shop
|
18
|
-
strategy.options[:old_client_secret] = ShopifyApp.configuration.old_secret
|
19
|
-
strategy.options[:per_user_permissions] = strategy.session[:user_tokens]
|
20
|
-
}
|