Skip to content

Commit

Permalink
Add new Auth module, method to construct host app URL
Browse files Browse the repository at this point in the history
Use Base64.strict_encode64 (to avoid adding newlines), but
Base64.decode64 (using strict_decode64 breaks with what's provided by
Shopify)
  • Loading branch information
mkevinosullivan committed Aug 5, 2022
1 parent bcd5862 commit 6639607
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 1 deletion.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Note: For changes to the API, see https://shopify.dev/changelog?filter=api

## Unreleased

N/A
- [#1002](https://github.com/Shopify/shopify-api-ruby/pull/1002) Add new method to construct the host app URL

## Version 11.0.1

Expand Down
26 changes: 26 additions & 0 deletions lib/shopify_api/auth.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# typed: strict
# frozen_string_literal: true

module ShopifyAPI
module Auth
extend T::Sig

class << self
extend T::Sig

sig { params(host: T.nilable(String)).returns(String) }
def embedded_app_url(host)
unless Context.setup?
raise Errors::ContextNotSetupError, "ShopifyAPI::Context not setup, please call ShopifyAPI::Context.setup"
end

unless host
raise Errors::MissingRequiredArgumentError, "host argument is required"
end

decoded_host = Base64.decode64(host)
"https://#{decoded_host}/apps/#{Context.api_key}"
end
end
end
end
9 changes: 9 additions & 0 deletions lib/shopify_api/errors/missing_required_argument_error.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# typed: strict
# frozen_string_literal: true

module ShopifyAPI
module Errors
class MissingRequiredArgumentError < StandardError
end
end
end
35 changes: 35 additions & 0 deletions test/auth_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# typed: false
# frozen_string_literal: true

require_relative "./test_helper"

module ShopifyAPITest
class AuthTest < Test::Unit::TestCase
def setup
super
@host = "some-shopify-store.myshopify.com/admin"
@encoded_host = Base64.strict_encode64(@host)
end

def test_valid_host
assert_equal(
ShopifyAPI::Auth.embedded_app_url(@encoded_host),
"https://#{@host}/apps/#{ShopifyAPI::Context.api_key}"
)
end

def test_no_host
assert_raises(ShopifyAPI::Errors::MissingRequiredArgumentError) do
ShopifyAPI::Auth.embedded_app_url(nil)
end
end

def test_context_not_setup
modify_context(api_key: "", api_secret_key: "", host_name: "")

assert_raises(ShopifyAPI::Errors::ContextNotSetupError) do
ShopifyAPI::Auth.embedded_app_url(@encoded_host)
end
end
end
end

0 comments on commit 6639607

Please # to comment.