Skip to content

Commit 0f67346

Browse files
committedJan 20, 2020
Added options hash to create_permission_url and makes redirect_uri required
1 parent 6b25728 commit 0f67346

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed
 

‎README.md

+4-5
Original file line numberDiff line numberDiff line change
@@ -192,17 +192,16 @@ ShopifyAPI uses ActiveResource to communicate with the REST web service. ActiveR
192192
shopify_session = ShopifyAPI::Session.new(domain: "SHOP_NAME.myshopify.com", api_version: api_version, token: nil)
193193
```
194194

195-
Then call:
195+
Then call `create_permission_url` with the redirect_uri you've registered for your application:
196196

197197
```ruby
198-
scope = ["write_products"]
199-
permission_url = shopify_session.create_permission_url(scope)
198+
permission_url = shopify_session.create_permission_url(scope, "https://my_redirect_uri.com")
200199
```
201200

202-
or if you want a custom redirect_uri:
201+
You can also pass a state parameter in the options hash as a last argument:
203202

204203
```ruby
205-
permission_url = shopify_session.create_permission_url(scope, "https://my_redirect_uri.com")
204+
permission_url = shopify_session.create_permission_url(scope, "https://my_redirect_uri.com", { state: "My Nonce" })
206205
```
207206

208207
4. Once authorized, the shop redirects the owner to the return URL of your application with a parameter named 'code'. This is a temporary token that the app can exchange for a permanent access token.

‎lib/shopify_api/session.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ def initialize(domain:, token:, api_version:, extra: {})
9191
self.extra = extra
9292
end
9393

94-
def create_permission_url(scope, redirect_uri = nil)
95-
params = {:client_id => api_key, :scope => scope.join(',')}
96-
params[:redirect_uri] = redirect_uri if redirect_uri
94+
def create_permission_url(scope, redirect_uri, options = {})
95+
params = { client_id: api_key, scope: scope.join(','), redirect_uri: redirect_uri }
96+
params[:state] = options[:state] if options[:state]
9797
construct_oauth_url("authorize", params)
9898
end
9999

‎test/session_test.rb

+26-13
Original file line numberDiff line numberDiff line change
@@ -150,20 +150,21 @@ def setup
150150
assert_equal(ShopifyAPI::ApiVersion.new(handle: '2019-01'), ShopifyAPI::Base.api_version)
151151
end
152152

153-
test "create_permission_url returns correct url with single scope no redirect uri" do
154-
ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
153+
test "create_permission_url requires redirect_uri" do
154+
ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
155155
session = ShopifyAPI::Session.new(
156156
domain: 'http://localhost.myshopify.com',
157157
token: 'any-token',
158158
api_version: any_api_version
159159
)
160160
scope = ["write_products"]
161-
permission_url = session.create_permission_url(scope)
162-
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products", permission_url
161+
assert_raises(ArgumentError) do
162+
session.create_permission_url(scope)
163+
end
163164
end
164165

165166
test "create_permission_url returns correct url with single scope and redirect uri" do
166-
ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
167+
ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
167168
session = ShopifyAPI::Session.new(
168169
domain: 'http://localhost.myshopify.com',
169170
token: 'any-token',
@@ -174,28 +175,40 @@ def setup
174175
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products&redirect_uri=http://my_redirect_uri.com", permission_url
175176
end
176177

177-
test "create_permission_url returns correct url with dual scope no redirect uri" do
178-
ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
178+
test "create_permission_url returns correct url with dual scope" do
179+
ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
179180
session = ShopifyAPI::Session.new(
180181
domain: 'http://localhost.myshopify.com',
181182
token: 'any-token',
182183
api_version: any_api_version
183184
)
184185
scope = ["write_products","write_customers"]
185-
permission_url = session.create_permission_url(scope)
186-
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products,write_customers", permission_url
186+
permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com")
187+
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products,write_customers&redirect_uri=http://my_redirect_uri.com", permission_url
188+
end
189+
190+
test "create_permission_url returns correct url with no scope" do
191+
ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
192+
session = ShopifyAPI::Session.new(
193+
domain: 'http://localhost.myshopify.com',
194+
token: 'any-token',
195+
api_version: any_api_version
196+
)
197+
scope = []
198+
permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com")
199+
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=&redirect_uri=http://my_redirect_uri.com", permission_url
187200
end
188201

189-
test "create_permission_url returns correct url with no scope no redirect uri" do
190-
ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
202+
test "create_permission_url returns correct url with state" do
203+
ShopifyAPI::Session.setup(api_key: "My_test_key", secret: "My test secret")
191204
session = ShopifyAPI::Session.new(
192205
domain: 'http://localhost.myshopify.com',
193206
token: 'any-token',
194207
api_version: any_api_version
195208
)
196209
scope = []
197-
permission_url = session.create_permission_url(scope)
198-
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=", permission_url
210+
permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com", state: "My nonce")
211+
assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=&redirect_uri=http://my_redirect_uri.com&state=My%20nonce", permission_url
199212
end
200213

201214
test "raise exception if code invalid in request token" do

0 commit comments

Comments
 (0)