shopify_app 17.2.1 → 18.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3196fb2b6cba6107aee7ad481c745d3c76121f5f07a2f99e812f5e0dc206baa
4
- data.tar.gz: 4243a519b5e601238974ba566c978badf4fe2132f5c2e5616f2dd35e2f0557ba
3
+ metadata.gz: a17cc09be2742af3a0e91af4ac4c2e3d4ab246ae10c31dc2c26b1138058f1846
4
+ data.tar.gz: afd2922bb83d113c1c4d16c240db9455d1d63478cd2e231fd4e27d3aebb01958
5
5
  SHA512:
6
- metadata.gz: 3cd70a25dc28f3eedafe42dcf312d15a63d2775cd7f98457f6a431574aef1a7e5566fbb033c1ed67ed207ad88cb356741a38f642765b057b4fc9c288df82f008
7
- data.tar.gz: a30861d15e1db1bf447c655d5a889921dc991e421723781cd9f4cceb3828a91b73a6b73aa696df95cdcefca6f23caf1fd3834ffe4e9cad5b1bb4b4a90d187ff0
6
+ metadata.gz: a19c5616ec96c8c454077dd114f4aedd215725e1af274eadc05d2989812bc5bd3b4674b9a850af3b28f7171b9f60c7db7a89398a97cf3ad8ad3023482a8ddd1d
7
+ data.tar.gz: f6eb5a88f94cab3f1555d017f0fada8809661716739186382a5038d880596ba451e2791f616f03400d95ab44c739720feae6b3f677a8188e56f000172b365c8d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
- Unreleased
1
+ 18.0.3 (Jan 7, 2022)
2
2
  ----------
3
+ * Change regexp to match standard ngrok URLs. [#1311](https://github.com/Shopify/shopify_app/pull/1311)
4
+ * Make `EnsureAuthenticatedLinks` compatible with AppBridge 2.0. [#1277](https://github.com/Shopify/shopify_app/pull/1277)
5
+ * Includes the `host` parameter when redirecting to the splash page in an unauthenticated state.
6
+
7
+ 18.0.2 (Jun 15, 2021)
8
+ ----------
9
+ * Added careers link to readme. [#1274](https://github.com/Shopify/shopify_app/pull/1274)
10
+
11
+ 18.0.1 (May 7, 2021)
12
+ ----------
13
+ * Fix bug causing OAuth flow to fail due to CSP violation. [#1265](https://github.com/Shopify/shopify_app/pull/1265)
14
+
15
+ 18.0.0 (May 3, 2021)
16
+ ----------
17
+ * Support OmniAuth 2.x
18
+ * If your app has custom OmniAuth configuration, please refer to the [OmniAuth 2.0 upgrade guide](https://github.com/omniauth/omniauth/wiki/Upgrading-to-2.0).
19
+ * Support App Bridge version 2.x in the Embedded App layout. [#1241](https://github.com/Shopify/shopify_app/pull/1241)
3
20
 
4
21
  17.2.1 (April 1, 2021)
5
22
  ----------
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shopify_app (17.2.1)
5
- browser_sniffer (~> 1.2.2)
6
- jwt (~> 2.2.1)
7
- omniauth-shopify-oauth2 (~> 2.2.2)
4
+ shopify_app (18.0.3)
5
+ browser_sniffer (~> 1.4.0)
6
+ jwt (>= 2.2.3)
7
+ omniauth-rails_csrf_protection
8
+ omniauth-shopify-oauth2 (~> 2.3)
8
9
  rails (> 5.2.1, < 6.2)
9
10
  redirect_safely (~> 1.0)
10
11
  shopify_api (~> 9.4)
@@ -79,12 +80,12 @@ GEM
79
80
  minitest (>= 5.1)
80
81
  tzinfo (~> 2.0)
81
82
  zeitwerk (~> 2.3)
82
- addressable (2.7.0)
83
+ addressable (2.8.0)
83
84
  public_suffix (>= 2.0.2, < 5.0)
84
85
  ast (2.4.1)
85
86
  binding_of_caller (0.8.0)
86
87
  debug_inspector (>= 0.0.1)
87
- browser_sniffer (1.2.2)
88
+ browser_sniffer (1.4.0)
88
89
  builder (3.2.4)
89
90
  byebug (11.1.3)
90
91
  coderay (1.1.3)
@@ -93,28 +94,46 @@ GEM
93
94
  crass (1.0.6)
94
95
  debug_inspector (0.0.3)
95
96
  erubi (1.10.0)
96
- faraday (1.3.0)
97
+ faraday (1.9.3)
98
+ faraday-em_http (~> 1.0)
99
+ faraday-em_synchrony (~> 1.0)
100
+ faraday-excon (~> 1.1)
101
+ faraday-httpclient (~> 1.0)
102
+ faraday-multipart (~> 1.0)
97
103
  faraday-net_http (~> 1.0)
104
+ faraday-net_http_persistent (~> 1.0)
105
+ faraday-patron (~> 1.0)
106
+ faraday-rack (~> 1.0)
107
+ faraday-retry (~> 1.0)
108
+ ruby2_keywords (>= 0.0.4)
109
+ faraday-em_http (1.0.0)
110
+ faraday-em_synchrony (1.0.0)
111
+ faraday-excon (1.1.0)
112
+ faraday-httpclient (1.0.1)
113
+ faraday-multipart (1.0.2)
98
114
  multipart-post (>= 1.2, < 3)
99
- ruby2_keywords
100
115
  faraday-net_http (1.0.1)
101
- globalid (0.4.2)
102
- activesupport (>= 4.2.0)
103
- graphql (1.12.6)
104
- graphql-client (0.16.0)
116
+ faraday-net_http_persistent (1.2.0)
117
+ faraday-patron (1.0.0)
118
+ faraday-rack (1.0.0)
119
+ faraday-retry (1.0.3)
120
+ globalid (1.0.0)
121
+ activesupport (>= 5.0)
122
+ graphql (1.13.4)
123
+ graphql-client (0.17.0)
105
124
  activesupport (>= 3.0)
106
- graphql (~> 1.8)
125
+ graphql (~> 1.10)
107
126
  hashdiff (1.0.1)
108
- hashie (4.1.0)
127
+ hashie (5.0.0)
109
128
  i18n (1.8.9)
110
129
  concurrent-ruby (~> 1.0)
111
- jwt (2.2.2)
130
+ jwt (2.3.0)
112
131
  loofah (2.9.0)
113
132
  crass (~> 1.0.2)
114
133
  nokogiri (>= 1.5.9)
115
134
  mail (2.7.1)
116
135
  mini_mime (>= 0.1.1)
117
- marcel (1.0.0)
136
+ marcel (1.0.2)
118
137
  method_source (0.9.2)
119
138
  mini_mime (1.0.3)
120
139
  mini_portile2 (2.5.0)
@@ -123,7 +142,7 @@ GEM
123
142
  multi_json (1.15.0)
124
143
  multi_xml (0.6.0)
125
144
  multipart-post (2.1.1)
126
- nio4r (2.5.7)
145
+ nio4r (2.5.8)
127
146
  nokogiri (1.11.2)
128
147
  mini_portile2 (~> 2.5.0)
129
148
  racc (~> 1.4)
@@ -133,15 +152,19 @@ GEM
133
152
  multi_json (~> 1.3)
134
153
  multi_xml (~> 0.5)
135
154
  rack (>= 1.2, < 3)
136
- omniauth (1.9.1)
155
+ omniauth (2.0.4)
137
156
  hashie (>= 3.4.6)
138
157
  rack (>= 1.6.2, < 3)
139
- omniauth-oauth2 (1.5.0)
140
- oauth2 (~> 1.1)
141
- omniauth (~> 1.2)
142
- omniauth-shopify-oauth2 (2.2.3)
158
+ rack-protection
159
+ omniauth-oauth2 (1.7.2)
160
+ oauth2 (~> 1.4)
161
+ omniauth (>= 1.9, < 3)
162
+ omniauth-rails_csrf_protection (1.0.0)
163
+ actionpack (>= 4.2)
164
+ omniauth (~> 2.0)
165
+ omniauth-shopify-oauth2 (2.3.2)
143
166
  activesupport
144
- omniauth-oauth2 (~> 1.5.0)
167
+ omniauth-oauth2 (~> 1.5)
145
168
  parallel (1.20.1)
146
169
  parser (2.7.2.0)
147
170
  ast (~> 2.4.1)
@@ -156,6 +179,8 @@ GEM
156
179
  public_suffix (4.0.6)
157
180
  racc (1.5.2)
158
181
  rack (2.2.3)
182
+ rack-protection (2.1.0)
183
+ rack
159
184
  rack-test (1.1.0)
160
185
  rack (>= 1.0, < 3)
161
186
  rails (6.1.3.1)
@@ -209,20 +234,21 @@ GEM
209
234
  rubocop-shopify (1.0.7)
210
235
  rubocop (~> 1.4)
211
236
  ruby-progressbar (1.10.1)
212
- ruby2_keywords (0.0.4)
213
- shopify_api (9.4.1)
237
+ ruby2_keywords (0.0.5)
238
+ shopify_api (9.5)
214
239
  activeresource (>= 4.1.0, < 6.0.0)
215
240
  graphql-client
216
241
  rack
242
+ webrick
217
243
  sprockets (4.0.2)
218
244
  concurrent-ruby (~> 1.0)
219
245
  rack (> 1, < 3)
220
- sprockets-rails (3.2.2)
221
- actionpack (>= 4.0)
222
- activesupport (>= 4.0)
246
+ sprockets-rails (3.4.2)
247
+ actionpack (>= 5.2)
248
+ activesupport (>= 5.2)
223
249
  sprockets (>= 3.0.0)
224
250
  sqlite3 (1.4.2)
225
- thor (1.1.0)
251
+ thor (1.2.1)
226
252
  tzinfo (2.0.4)
227
253
  concurrent-ruby (~> 1.0)
228
254
  unicode-display_width (1.7.0)
@@ -230,7 +256,8 @@ GEM
230
256
  addressable (>= 2.3.6)
231
257
  crack (>= 0.3.2)
232
258
  hashdiff (>= 0.4.0, < 2.0.0)
233
- websocket-driver (0.7.3)
259
+ webrick (1.7.0)
260
+ websocket-driver (0.7.5)
234
261
  websocket-extensions (>= 0.1.0)
235
262
  websocket-extensions (0.1.5)
236
263
  zeitwerk (2.4.2)
@@ -254,4 +281,4 @@ DEPENDENCIES
254
281
  webmock
255
282
 
256
283
  BUNDLED WITH
257
- 2.1.4
284
+ 2.2.22
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Shopify App
2
2
 
3
+ **Shopify is doubling our engineering staff in 2021! [Join our team and work on libraries like this one.](https://smrtr.io/5GGrK)**
4
+
3
5
  [![Version][gem]][gem_url] [![Build Status](https://github.com/Shopify/shopify_app/workflows/CI/badge.svg)](https://github.com/Shopify/shopify_app/actions?query=workflow%3ACI) ![Supported Rails version][supported_rails_version]
4
6
 
5
7
  [gem]: https://img.shields.io/gem/v/shopify_app.svg
@@ -23,7 +25,6 @@ This gem includes a Rails engine, generators, modules, and mixins that help crea
23
25
  ## Requirements
24
26
 
25
27
  > **Rails compatibility**
26
- > * Rails 6.1 or above is not yet supported due to the new `cookies_same_site_protection` setting.
27
28
  > * Use Shopify App `<= v7.2.8` if you need to work with Rails 4.
28
29
 
29
30
  To become a Shopify app developer, you will need a [Shopify Partners](https://www.shopify.com/partners) account. Explore the [Shopify dev docs](https://shopify.dev/concepts/shopify-introduction) to learn more about [building Shopify apps](https://shopify.dev/concepts/apps).
@@ -0,0 +1,9 @@
1
+ (function() {
2
+ function redirect() {
3
+ var form = document.getElementById("redirect-form");
4
+ if (form) {
5
+ form.submit();
6
+ }
7
+ }
8
+ document.addEventListener("DOMContentLoaded", redirect);
9
+ })();
@@ -10,9 +10,22 @@ module ShopifyApp
10
10
 
11
11
  private
12
12
 
13
+ def splash_page
14
+ splash_page_with_params(
15
+ return_to: request.fullpath,
16
+ shop: current_shopify_domain,
17
+ host: params[:host]
18
+ )
19
+ end
20
+
21
+ def splash_page_with_params(params)
22
+ uri = URI(root_path)
23
+ uri.query = params.compact.to_query
24
+ uri.to_s
25
+ end
26
+
13
27
  def redirect_to_splash_page
14
- splash_page_path = root_path(return_to: request.fullpath, shop: current_shopify_domain)
15
- redirect_to(splash_page_path)
28
+ redirect_to(splash_page)
16
29
  rescue ShopifyApp::LoginProtection::ShopifyDomainNotFound => error
17
30
  Rails.logger.warn("[ShopifyApp::EnsureAuthenticatedLinks] Redirecting to login: [#{error.class}] "\
18
31
  "Could not determine current shop domain")
@@ -150,7 +150,11 @@ module ShopifyApp
150
150
  end
151
151
 
152
152
  def authenticate_in_context
153
- redirect_to("#{main_app.root_path}auth/shopify")
153
+ post_redirect_to_auth_shopify
154
+ end
155
+
156
+ def post_redirect_to_auth_shopify
157
+ render('shopify_app/shared/post_redirect_to_auth_shopify', layout: false)
154
158
  end
155
159
 
156
160
  def authenticate_at_top_level
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= javascript_include_tag('shopify_app/post_redirect', crossorigin: 'anonymous', integrity: true) %>
9
+ </head>
10
+ <body>
11
+ <%= form_tag '/auth/shopify', id: 'redirect-form' %>
12
+ </body>
13
+ </html>
@@ -11,11 +11,14 @@
11
11
  [App installation](#app-installation)
12
12
  * [My app won't install](#my-app-wont-install)
13
13
  * [My app keeps redirecting to login](#my-app-keeps-redirecting-to-login)
14
+ * [My app returns 401 during oauth](#my-app-returns-401-during-oauth)
14
15
 
15
16
  [JWT session tokens](#jwt-session-tokens)
16
17
  * [My app is still using cookies to authenticate](#my-app-is-still-using-cookies-to-authenticate)
17
18
  * [My app can't make requests to the Shopify API](#my-app-cant-make-requests-to-the-shopify-api)
18
19
 
20
+ [Migrating to App Bridge 2.0](#migrating-to-app-bridge-2.0)
21
+
19
22
  ## Generators
20
23
 
21
24
  ### The shopify_app:install generator hangs
@@ -65,6 +68,10 @@ Alternatively, you can upgrade to [`v17.2.0` of the shopify_app gem](/docs/Upgra
65
68
 
66
69
  This issue can occur when the session (the model you set as `ShopifyApp::SessionRepository.storage`) isn't deleted when the user uninstalls your app. A possible fix for this is listening to the `app/uninstalled` webhook and deleting the corresponding session in the webhook handler.
67
70
 
71
+ ### My app returns 401 during oauth
72
+
73
+ If your local dev env uses the `cookie_store` session storage strategy, you may encounter 401 errors during oauth due to a race condition between asset requests and `/auth/shopify`. You should be able to work around for local testing by using a different browser or session storage strategy. [Read more about the status of this issue](https://github.com/Shopify/shopify_app/issues/1269).
74
+
68
75
  ## JWT session tokens
69
76
 
70
77
  ### My app is still using cookies to authenticate
@@ -138,4 +145,15 @@ _Example:_ If your embedded app cannot handle server-side XHR redirects, then co
138
145
  X-Shopify-API-Request-Failure-Unauthorized: true
139
146
  ```
140
147
 
141
- Then, use the [Shopify App Bridge Redirect](https://shopify.dev/tools/app-bridge/actions/navigation/redirect) action to redirect your app frontend to the app login URL if this header is set.
148
+ Then, use the [Shopify App Bridge Redirect](https://shopify.dev/tools/app-bridge/actions/navigation/redirect) action to redirect your app frontend to the app login URL if this header is set.
149
+
150
+ ## Migrating to App Bridge 2.0
151
+
152
+ In order to upgrade your embedded app to the latest App Bridge 2.0 version, please refer to the [migration guide](https://shopify.dev/tutorials/migrate-your-app-to-app-bridge-2).
153
+
154
+ To ensure that your app's embedded layout doesn't import App Bridge 2.0 before fully migrating, make the following change to bind it to v1.x.
155
+
156
+ ```diff
157
+ - <script src="https://unpkg.com/@shopify/app-bridge"></script>
158
+ + <script src="https://unpkg.com/@shopify/app-bridge@1"></script>
159
+ ```
@@ -15,7 +15,7 @@ While you can customize the login view by creating a `/app/views/shopify_app/ses
15
15
 
16
16
  ```ruby
17
17
  ShopifyApp.configure do |config|
18
- config.login_url = 'https://my.domain.com/nested/login'
18
+ config.login_url = 'https://example.com/nested/login'
19
19
  end
20
20
  ```
21
21
 
@@ -77,6 +77,6 @@ class ReviewsController < ApplicationController
77
77
  end
78
78
  ```
79
79
 
80
- Create your app proxy URL in the [Shopify Partners dashboard](https://partners.shopify.com/organizations), making sure to point it to `https://your_app_website.com/app_proxy`.
80
+ Create your app proxy URL in the [Shopify Partners dashboard](https://partners.shopify.com/organizations), making sure to point it to `https://example.com/app_proxy`.
81
81
 
82
82
  ![Creating an App Proxy](/images/app-proxy-screenshot.png)
@@ -1,5 +1,15 @@
1
1
  # Handling changes in access scopes
2
- The Shopify App gem provides handling changes to scopes for both shop/offline and user/online tokens. To enable your app to login via OAuth on scope changes, you can set the following configuration flag in your `config/initializers/shopify_app.rb`:
2
+ ## Updating the list of scopes the app requests
3
+
4
+ Your app specifies the [access scopes](https://shopify.dev/api/usage/access-scopes) it requires in the Shopify App initializer, located at`config/initializers/shopify_app.rb`. To modify this list, update the comma-delimited configuration option:
5
+
6
+ ```ruby
7
+ config.scope = "read_products,write_discounts"
8
+ ```
9
+
10
+ ## Requesting new scopes from merchants
11
+
12
+ The Shopify App gem will automatically request new scopes from merchants for both shop/offline and user/online tokens. To enable your app to reauth via OAuth on scope changes, you can set the following configuration flag in your `config/initializers/shopify_app.rb`:
3
13
  ```ruby
4
14
  config.reauth_on_access_scope_changes = true
5
15
  ```
@@ -11,7 +11,7 @@ As with webhooks, ShopifyApp can manage your app's [ScriptTags](https://shopify-
11
11
  ```ruby
12
12
  ShopifyApp.configure do |config|
13
13
  config.scripttags = [
14
- {event:'onload', src: 'https://my-shopifyapp.herokuapp.com/fancy.js'},
14
+ {event:'onload', src: 'https://example.com/fancy.js'},
15
15
  {event:'onload', src: ->(domain) { dynamic_tag_url(domain) } }
16
16
  ]
17
17
  end
@@ -12,7 +12,7 @@ ShopifyApp can manage your app's webhooks for you if you set which webhooks you
12
12
  ```ruby
13
13
  ShopifyApp.configure do |config|
14
14
  config.webhooks = [
15
- {topic: 'carts/update', address: 'https://example-app.com/webhooks/carts_update'}
15
+ {topic: 'carts/update', address: 'https://example.com/webhooks/carts_update'}
16
16
  ]
17
17
  end
18
18
  ```
@@ -34,7 +34,7 @@ If you are only interested in particular fields, you can optionally filter the d
34
34
  ```ruby
35
35
  ShopifyApp.configure do |config|
36
36
  config.webhooks = [
37
- {topic: 'products/update', address: 'https://example-app.com/webhooks/products_update', fields: ['title', 'vendor']}
37
+ {topic: 'products/update', address: 'https://example.com/webhooks/products_update', fields: ['title', 'vendor']}
38
38
  ]
39
39
  end
40
40
  ```
@@ -3,8 +3,16 @@
3
3
  class HomeController < AuthenticatedController
4
4
  include ShopifyApp::ShopAccessScopesVerification
5
5
 
6
+ before_action :set_host
7
+
6
8
  def index
7
9
  @products = ShopifyAPI::Product.find(:all, params: { limit: 10 })
8
10
  @webhooks = ShopifyAPI::Webhook.find(:all)
9
11
  end
12
+
13
+ private
14
+
15
+ def set_host
16
+ @host = params[:host]
17
+ end
10
18
  end
@@ -18,7 +18,7 @@
18
18
 
19
19
  // Save a session token for future requests
20
20
  window.sessionToken = await new Promise((resolve) => {
21
- app.subscribe(SessionToken.ActionType.RESPOND, (data) => {
21
+ app.subscribe(SessionToken.Action.RESPOND, (data) => {
22
22
  resolve(data.sessionToken || "");
23
23
  });
24
24
  });
@@ -7,5 +7,6 @@ class HomeController < ApplicationController
7
7
 
8
8
  def index
9
9
  @shop_origin = current_shopify_domain
10
+ @host = params[:host]
10
11
  end
11
12
  end
@@ -67,7 +67,7 @@ module ShopifyApp
67
67
  def insert_hosts_into_development_config
68
68
  inject_into_file(
69
69
  'config/environments/development.rb',
70
- " config.hosts = (config.hosts rescue []) << /\\w+\\.ngrok\\.io/\n",
70
+ " config.hosts = (config.hosts rescue []) << /\[-\w]+\\.ngrok\\.io/\n",
71
71
  after: "Rails.application.configure do\n"
72
72
  )
73
73
  end
@@ -24,11 +24,12 @@
24
24
 
25
25
  <%= render 'layouts/flash_messages' %>
26
26
 
27
- <script src="https://unpkg.com/@shopify/app-bridge@1"></script>
27
+ <script src="https://unpkg.com/@shopify/app-bridge@2"></script>
28
28
 
29
29
  <%= content_tag(:div, nil, id: 'shopify-app-init', data: {
30
30
  api_key: ShopifyApp.configuration.api_key,
31
31
  shop_origin: @shop_origin || (@current_shopify_session.domain if @current_shopify_session),
32
+ host: @host,
32
33
  debug: Rails.env.development?
33
34
  } ) %>
34
35
 
@@ -4,7 +4,7 @@ document.addEventListener('DOMContentLoaded', () => {
4
4
  var createApp = AppBridge.default;
5
5
  window.app = createApp({
6
6
  apiKey: data.apiKey,
7
- shopOrigin: data.shopOrigin,
7
+ host: data.host,
8
8
  });
9
9
 
10
10
  var actions = AppBridge.actions;
@@ -9,6 +9,8 @@ module ShopifyApp
9
9
 
10
10
  class ShopifyDomainNotFound < StandardError; end
11
11
 
12
+ class ShopifyHostNotFound < StandardError; end
13
+
12
14
  included do
13
15
  after_action :set_test_cookie
14
16
  rescue_from ActiveResource::UnauthorizedAccess, with: :close_session
@@ -103,6 +105,12 @@ module ShopifyApp
103
105
  request.env['jwt.shopify_user_id']
104
106
  end
105
107
 
108
+ def host
109
+ return params[:host] if params[:host].present?
110
+
111
+ raise ShopifyHostNotFound
112
+ end
113
+
106
114
  def redirect_to_login
107
115
  if request.xhr?
108
116
  head(:unauthorized)
@@ -215,9 +223,8 @@ module ShopifyApp
215
223
  end
216
224
 
217
225
  def return_address
218
- return base_return_address unless ShopifyApp.configuration.allow_jwt_authentication
219
- return_address_with_params(shop: current_shopify_domain)
220
- rescue ShopifyDomainNotFound
226
+ return_address_with_params(shop: current_shopify_domain, host: host)
227
+ rescue ShopifyDomainNotFound, ShopifyHostNotFound
221
228
  base_return_address
222
229
  end
223
230
 
@@ -17,6 +17,7 @@ module ShopifyApp
17
17
  initializer "shopify_app.assets.precompile" do |app|
18
18
  app.config.assets.precompile += %w[
19
19
  shopify_app/redirect.js
20
+ shopify_app/post_redirect.js
20
21
  shopify_app/top_level.js
21
22
  shopify_app/enable_cookies.js
22
23
  shopify_app/request_storage_access.js
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ShopifyApp
3
- VERSION = '17.2.1'
3
+ VERSION = '18.0.3'
4
4
  end
data/lib/shopify_app.rb CHANGED
@@ -3,6 +3,7 @@ require 'shopify_app/version'
3
3
 
4
4
  # deps
5
5
  require 'shopify_api'
6
+ require 'omniauth/rails_csrf_protection'
6
7
  require 'omniauth-shopify-oauth2'
7
8
  require 'redirect_safely'
8
9
 
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shopify_app",
3
- "version": "17.2.1",
3
+ "version": "18.0.3",
4
4
  "repository": "git@github.com:Shopify/shopify_app.git",
5
5
  "author": "Shopify",
6
6
  "license": "MIT",
data/service.yml CHANGED
@@ -1,7 +1,4 @@
1
1
  audience: partner
2
2
  classification: library
3
- org_line: App & Partner Platform
4
- owners:
5
- - Shopify/platform-dev-tools-education
6
3
  slack_channels:
7
- - dev-tools-education
4
+ - shopify_app_gem
data/shopify_app.gemspec CHANGED
@@ -13,11 +13,12 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.metadata['allowed_push_host'] = 'https://rubygems.org'
15
15
 
16
- s.add_runtime_dependency('browser_sniffer', '~> 1.2.2')
16
+ s.add_runtime_dependency('browser_sniffer', '~> 1.4.0')
17
+ s.add_runtime_dependency('omniauth-rails_csrf_protection')
17
18
  s.add_runtime_dependency('rails', '> 5.2.1', '< 6.2')
18
19
  s.add_runtime_dependency('shopify_api', '~> 9.4')
19
- s.add_runtime_dependency('omniauth-shopify-oauth2', '~> 2.2.2')
20
- s.add_runtime_dependency('jwt', '~> 2.2.1')
20
+ s.add_runtime_dependency('omniauth-shopify-oauth2', '~> 2.3')
21
+ s.add_runtime_dependency('jwt', '>= 2.2.3')
21
22
  s.add_runtime_dependency('redirect_safely', '~> 1.0')
22
23
 
23
24
  s.add_development_dependency('rake')
data/translation.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  source_language: en
2
- target_languages: [cs, da, de, es, fi, fr, hi, it, ja, ko, ms, nb, nl, pl, pt-BR, pt-PT, sv, th, tr, vi, zh-CN, zh-TW]
2
+ target_languages: [cs, da, de, es, fi, fr, it, ja, ko, nb, nl, pl, pt-BR, pt-PT, sv, th, tr, vi, zh-CN, zh-TW]
3
3
  components:
4
4
  - name: 'merchant'
5
5
  paths:
data/yarn.lock CHANGED
@@ -4519,9 +4519,9 @@ sprintf-js@~1.0.2:
4519
4519
  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
4520
4520
 
4521
4521
  ssri@^6.0.1:
4522
- version "6.0.1"
4523
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
4524
- integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
4522
+ version "6.0.2"
4523
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
4524
+ integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
4525
4525
  dependencies:
4526
4526
  figgy-pudding "^3.5.1"
4527
4527
 
@@ -5115,9 +5115,9 @@ xtend@^4.0.0, xtend@~4.0.1:
5115
5115
  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
5116
5116
 
5117
5117
  y18n@^4.0.0:
5118
- version "4.0.0"
5119
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
5120
- integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
5118
+ version "4.0.3"
5119
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
5120
+ integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
5121
5121
 
5122
5122
  yallist@^3.0.2:
5123
5123
  version "3.1.1"
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.2.1
4
+ version: 18.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-01 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: browser_sniffer
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.2
19
+ version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.2
26
+ version: 1.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: omniauth-rails_csrf_protection
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -64,28 +78,28 @@ dependencies:
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: 2.2.2
81
+ version: '2.3'
68
82
  type: :runtime
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: 2.2.2
88
+ version: '2.3'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: jwt
77
91
  requirement: !ruby/object:Gem::Requirement
78
92
  requirements:
79
- - - "~>"
93
+ - - ">="
80
94
  - !ruby/object:Gem::Version
81
- version: 2.2.1
95
+ version: 2.2.3
82
96
  type: :runtime
83
97
  prerelease: false
84
98
  version_requirements: !ruby/object:Gem::Requirement
85
99
  requirements:
86
- - - "~>"
100
+ - - ">="
87
101
  - !ruby/object:Gem::Version
88
- version: 2.2.1
102
+ version: 2.2.3
89
103
  - !ruby/object:Gem::Dependency
90
104
  name: redirect_safely
91
105
  requirement: !ruby/object:Gem::Requirement
@@ -272,6 +286,7 @@ files:
272
286
  - app/assets/javascripts/shopify_app/enable_cookies.js
273
287
  - app/assets/javascripts/shopify_app/itp_helper.js
274
288
  - app/assets/javascripts/shopify_app/partition_cookies.js
289
+ - app/assets/javascripts/shopify_app/post_redirect.js
275
290
  - app/assets/javascripts/shopify_app/redirect.js
276
291
  - app/assets/javascripts/shopify_app/request_storage_access.js
277
292
  - app/assets/javascripts/shopify_app/storage_access.js
@@ -297,6 +312,7 @@ files:
297
312
  - app/views/shopify_app/sessions/new.html.erb
298
313
  - app/views/shopify_app/sessions/request_storage_access.html.erb
299
314
  - app/views/shopify_app/sessions/top_level_interaction.html.erb
315
+ - app/views/shopify_app/shared/post_redirect_to_auth_shopify.html.erb
300
316
  - app/views/shopify_app/shared/redirect.html.erb
301
317
  - config/locales/cs.yml
302
318
  - config/locales/da.yml
@@ -305,11 +321,9 @@ files:
305
321
  - config/locales/es.yml
306
322
  - config/locales/fi.yml
307
323
  - config/locales/fr.yml
308
- - config/locales/hi.yml
309
324
  - config/locales/it.yml
310
325
  - config/locales/ja.yml
311
326
  - config/locales/ko.yml
312
- - config/locales/ms.yml
313
327
  - config/locales/nb.yml
314
328
  - config/locales/nl.yml
315
329
  - config/locales/pl.yml
@@ -445,7 +459,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
445
459
  - !ruby/object:Gem::Version
446
460
  version: '0'
447
461
  requirements: []
448
- rubygems_version: 3.0.3
462
+ rubygems_version: 3.2.20
449
463
  signing_key:
450
464
  specification_version: 4
451
465
  summary: This gem is used to get quickly started with the Shopify API
@@ -1,23 +0,0 @@
1
- ---
2
- hi:
3
- logged_out: सफलतापूर्वक लॉग आउट कर दिया
4
- could_not_log_in: Shopify स्टोर में लॉग इन नहीं किया जा सका
5
- invalid_shop_url: अमान्य शॉप डोमेन
6
- enable_cookies_heading: "%{app} के कुकीज़ सक्षम करें"
7
- enable_cookies_body: आपको %{app} का उपयोग Shopify में करने के लिए इस ब्राउज़र में
8
- कुकीज़ मैन्युअल रूप से सक्षम करने चाहिए.
9
- enable_cookies_footer: कुकीज़ अस्थायी रूप से आपकी वरीयताएं और व्यक्तिगत जानकारी स्टोर
10
- कर ऐप को आपको प्रमाणित करने देते हैं. इनकी समय-सीमा 30 दिनों बाद समाप्त हो जाती
11
- है.
12
- enable_cookies_action: कुकीज़ को सक्षम करें
13
- top_level_interaction_heading: आपके ब्राउज़र को %{app} प्रमाणित करने की आवश्यकता
14
- है
15
- top_level_interaction_body: आपके ब्राउज़र को %{app} जैसे ऐप की ज़रूरत होती है, जो
16
- Shopify द्वारा आपके लिए उसे खोलने से पहले कुकीज़ पर पहुंचने करने की अनुमति मांगे.
17
- top_level_interaction_action: जारी रखें
18
- request_storage_access_heading: "%{app} को कुकीज़ पर पहुंच करने की आवश्यकता है"
19
- request_storage_access_body: यह आपकी व्यक्तिगत जानकारी अस्थायी रूप से स्टोर कर ऐप
20
- को आपको प्रमाणित करने देता है. जारी रखें पर क्लिक करें और कुकीज़ को ऐप उपयोग करने
21
- की अनुमति दें.
22
- request_storage_access_footer: कुकीज़ की समय-सीमा 30 दिनों बाद समाप्त हो जाती है.
23
- request_storage_access_action: जारी रखें
@@ -1,22 +0,0 @@
1
- ---
2
- ms:
3
- logged_out: Berjaya log keluar
4
- could_not_log_in: Tidak dapat log masuk ke kedai Shopify
5
- invalid_shop_url: Domain kedai tidak sah
6
- enable_cookies_heading: Dayakan kuki dari %{app}
7
- enable_cookies_body: Anda mesti mengaktifkan kuki secara manual dalam pelayar ini
8
- untuk %{app} digunakan dalam Shopify.
9
- enable_cookies_footer: Kuki membenarkan aplikasi mengesahkan anda dengan menyimpan
10
- keutamaan dan maklumat peribadi anda buat sementara waktu. Ia tamat tempoh selepas
11
- 30 hari.
12
- enable_cookies_action: Dayakan kuki
13
- top_level_interaction_heading: Pelayar anda perlu mengesahkan %{app}
14
- top_level_interaction_body: Pelayar anda memerlukan aplikasi seperti %{app} untuk
15
- meminta anda akses kepada kuki sebelum Shopify boleh membukanya untuk anda.
16
- top_level_interaction_action: Teruskan
17
- request_storage_access_heading: "%{app} memerlukan akses kepada kuki"
18
- request_storage_access_body: Ini membolehkan aplikasi mengesahkan anda dengan menyimpan
19
- maklumat peribadi anda buat sementara waktu. Klik teruskan dan benarkan kuki untuk
20
- menggunakan aplikasi.
21
- request_storage_access_footer: Kuki akan tamat tempoh selepas 30 hari.
22
- request_storage_access_action: Teruskan