From 6c9c2f80628dcea0e3ff33a42b8c61023747981b Mon Sep 17 00:00:00 2001 From: Zoey Lan Date: Mon, 22 Apr 2024 08:06:08 -0600 Subject: [PATCH] Add helper method alias to JwtPayload similar to ShopifyApp::JWT --- CHANGELOG.md | 4 ++++ lib/shopify_api/auth/jwt_payload.rb | 8 ++++++++ test/auth/jwt_payload_test.rb | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 327abeba..4ad410bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ Note: For changes to the API, see https://shopify.dev/changelog?filter=api - [#1314](https://github.com/Shopify/shopify-api-ruby/pull/1314) - Add new session util method `SessionUtils::session_id_from_shopify_id_token` - `SessionUtils::current_session_id` now accepts shopify Id token in the format of `Bearer this_token` or just `this_token` +- [#1315](https://github.com/Shopify/shopify-api-ruby/pull/1315) Add helper/alias methods to `ShopifyAPI::Auth::JwtPayload`: + - `shopify_domain` alias for `shop` - returns the sanitized shop domain + - `shopify_user_id` - returns the user Id (`sub`) as an Integer value + - `expires_at` alias for `exp` - returns the expiration time ## 14.2.0 - [#1309](https://github.com/Shopify/shopify-api-ruby/pull/1309) Add `Session#copy_attributes_from` method diff --git a/lib/shopify_api/auth/jwt_payload.rb b/lib/shopify_api/auth/jwt_payload.rb index bd13326c..59ab7fc9 100644 --- a/lib/shopify_api/auth/jwt_payload.rb +++ b/lib/shopify_api/auth/jwt_payload.rb @@ -15,6 +15,8 @@ class JwtPayload sig { returns(Integer) } attr_reader :exp, :nbf, :iat + alias_method :expire_at, :exp + sig { params(token: String).void } def initialize(token) payload_hash = begin @@ -43,6 +45,12 @@ def initialize(token) def shop @dest.gsub("https://", "") end + alias_method :shopify_domain, :shop + + sig { returns(Integer) } + def shopify_user_id + @sub.to_i + end # TODO: Remove before releasing v11 sig { params(shop: String).returns(T::Boolean) } diff --git a/test/auth/jwt_payload_test.rb b/test/auth/jwt_payload_test.rb index 8bbe8a0a..3fffc2d2 100644 --- a/test/auth/jwt_payload_test.rb +++ b/test/auth/jwt_payload_test.rb @@ -36,6 +36,12 @@ def test_decode_jwt_payload_succeeds_with_valid_token jti: decoded.jti, sid: decoded.sid, }) + + # Helper methods + assert_equal(decoded.expire_at, @jwt_payload[:exp]) + assert_equal("test-shop.myshopify.io", decoded.shopify_domain) + assert_equal("test-shop.myshopify.io", decoded.shop) + assert_equal(1, decoded.shopify_user_id) end def test_decode_jwt_payload_succeeds_with_spin_domain @@ -56,6 +62,9 @@ def test_decode_jwt_payload_succeeds_with_spin_domain jti: decoded.jti, sid: decoded.sid, }) + + assert_equal("test-shop.other.spin.dev", decoded.shopify_domain) + assert_equal("test-shop.other.spin.dev", decoded.shop) end def test_decode_jwt_payload_fails_with_wrong_key