Module: ShopifyApp::LoginProtection
Defined Under Namespace
Classes: ShopifyDomainNotFound, ShopifyHostNotFound
Constant Summary
collapse
"X-Shopify-API-Request-Failure-Unauthorized"
Instance Method Summary
collapse
Instance Method Details
#activate_shopify_session ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 22
def activate_shopify_session
if current_shopify_session.blank?
signal_access_token_required
return redirect_to_login
end
unless current_shopify_session.scope.to_a.empty? ||
current_shopify_session.scope.covers?(ShopifyAPI::Context.scope)
clear_shopify_session
return redirect_to_login
end
begin
ShopifyAPI::Context.activate_session(current_shopify_session)
yield
ensure
ShopifyAPI::Context.deactivate_session
end
end
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 76
def (url: nil, ignore_response_code: false)
if request.xhr? && (ignore_response_code || response.code.to_i == 401)
unless params[:shop]
params[:shop] = if current_shopify_session
current_shopify_session.shop
elsif (matches = request.["HTTP_AUTHORIZATION"]&.match(/^Bearer (.+)$/))
jwt_payload = ShopifyAPI::Auth::JwtPayload.new(T.must(matches[1]))
jwt_payload.shop
end
end
url ||= login_url_with_optional_shop
response.("X-Shopify-API-Request-Failure-Reauthorize", "1")
response.("X-Shopify-API-Request-Failure-Reauthorize-Url", url)
end
end
|
#current_shopify_session ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 43
def current_shopify_session
@current_shopify_session ||= begin
cookie_name = ShopifyAPI::Auth::Oauth::SessionCookie::SESSION_COOKIE_NAME
ShopifyAPI::Utils::SessionUtils.load_current_session(
auth_header: request.["HTTP_AUTHORIZATION"],
cookies: { cookie_name => cookies.encrypted[cookie_name] },
is_online: user_session_expected?
)
rescue ShopifyAPI::Errors::CookieNotFoundError
nil
rescue ShopifyAPI::Errors::InvalidJwtTokenError
nil
end
end
|
#jwt_expire_at ⇒ Object
69
70
71
72
73
74
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 69
def jwt_expire_at
expire_at = request.env["jwt.expire_at"]
return unless expire_at
expire_at - 5.seconds end
|
#login_again_if_different_user_or_shop ⇒ Object
58
59
60
61
62
63
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 58
def login_again_if_different_user_or_shop
return unless session_id_conflicts_with_params || session_shop_conflicts_with_params
clear_shopify_session
redirect_to_login
end
|
#signal_access_token_required ⇒ Object
65
66
67
|
# File 'lib/shopify_app/controller_concerns/login_protection.rb', line 65
def signal_access_token_required
response.(ACCESS_TOKEN_REQUIRED_HEADER, "true")
end
|