Class: Shakha::AuthController
Constant Summary
Constants included
from PKCEMixin
PKCEMixin::CODE_CHALLENGE_METHOD, PKCEMixin::CODE_VERIFIER_LENGTH, PKCEMixin::PKCE_COOKIE_EXPIRY_SECONDS, PKCEMixin::PKCE_COOKIE_NAME
Instance Method Summary
collapse
Methods included from PKCEMixin
generate_code_challenge, generate_code_verifier
Instance Method Details
#authorize ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'app/controllers/shakha/auth_controller.rb', line 18
def authorize
provider = resolve_provider
pkce = create_pkce_bundle
redirect_uri = "#{Shakha.config.app_origin}/auth/shakha/#{provider.provider_name}/callback"
auth_url = provider.authorize_url(
state: pkce[:state],
code_challenge: pkce[:challenge],
redirect_uri: redirect_uri
)
redirect_to auth_url, allow_other_host: true
end
|
#callback ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'app/controllers/shakha/auth_controller.rb', line 32
def callback
provider = resolve_provider
pkce_result = verify_pkce!(params[:state])
token_response = provider.exchange_code(
code: params[:code],
code_verifier: pkce_result[:verifier],
redirect_uri: "#{Shakha.config.app_origin}/auth/shakha/#{provider.provider_name}/callback"
)
identity = provider.identity_from_response(token_response)
user = find_or_create_user(provider.provider_name, identity)
session_record = create_session(user)
set_session_cookie(session_record)
redirect_to build_return_url(pkce_result[:return_to], session_record)
rescue PKCEError, OAuthError => e
handle_auth_failure(e, pkce_result)
end
|
#destroy ⇒ Object
52
53
54
55
56
57
58
59
60
|
# File 'app/controllers/shakha/auth_controller.rb', line 52
def destroy
current_session&.destroy
cookies.delete(:shakha_session_token)
respond_to do |format|
format.html { redirect_to params[:return_to].presence || "/" }
format.json { render json: { status: "signed_out" } }
end
end
|
#error ⇒ Object
62
63
64
|
# File 'app/controllers/shakha/auth_controller.rb', line 62
def error
@message = params[:message] || "Authentication failed"
end
|
#new ⇒ Object
12
13
14
15
16
|
# File 'app/controllers/shakha/auth_controller.rb', line 12
def new
@client = find_or_create_client
@return_to = sanitize_return_to(params[:return_to])
@providers = Shakha.config.providers
end
|