class ShopifyAPI::Utils::SessionUtils

Public Class Methods

current_session_id(shopify_id_token, cookies, online) click to toggle source
# File lib/shopify_api/utils/session_utils.rb, line 19
def current_session_id(shopify_id_token, cookies, online)
  if Context.embedded?
    if shopify_id_token
      id_token = shopify_id_token.gsub("Bearer ", "")
      session_id_from_shopify_id_token(id_token: id_token, online: online)
    else
      # falling back to session cookie
      raise Errors::CookieNotFoundError, "JWT token or Session cookie not found for app" unless
        cookies && cookies[Auth::Oauth::SessionCookie::SESSION_COOKIE_NAME]

      cookie_session_id(cookies)
    end
  else
    raise Errors::CookieNotFoundError, "Session cookie not found for app" unless
      cookies && cookies[Auth::Oauth::SessionCookie::SESSION_COOKIE_NAME]

    cookie_session_id(cookies)
  end
end
jwt_session_id(shop, user_id) click to toggle source
# File lib/shopify_api/utils/session_utils.rb, line 59
def jwt_session_id(shop, user_id)
  "#{shop}_#{user_id}"
end
offline_session_id(shop) click to toggle source
# File lib/shopify_api/utils/session_utils.rb, line 64
def offline_session_id(shop)
  "offline_#{shop}"
end
session_id_from_shopify_id_token(id_token:, online:) click to toggle source
# File lib/shopify_api/utils/session_utils.rb, line 45
def session_id_from_shopify_id_token(id_token:, online:)
  raise Errors::MissingJwtTokenError, "Missing Shopify ID Token" if id_token.nil? || id_token.empty?

  payload = Auth::JwtPayload.new(id_token)
  shop = payload.shop

  if online
    jwt_session_id(shop, payload.sub)
  else
    offline_session_id(shop)
  end
end