class HammerCLIForeman::Api::Oauth::AuthenticationCodeGrant
Attributes
oidc_client_id[RW]
oidc_redirect_uri[RW]
oidc_token_endpoint[RW]
token[RW]
Public Class Methods
new(oidc_token_endpoint, oidc_authorization_endpoint, oidc_client_id, oidc_redirect_uri)
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 11 def initialize(oidc_token_endpoint, oidc_authorization_endpoint, oidc_client_id, oidc_redirect_uri) @oidc_token_endpoint = oidc_token_endpoint @oidc_authorization_endpoint = oidc_authorization_endpoint @oidc_client_id = oidc_client_id @oidc_redirect_uri = oidc_redirect_uri super(nil) end
Public Instance Methods
authenticate(request, token)
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 19 def authenticate(request, token) if HammerCLI.interactive? set_token_interactively else set_token(oidc_token_endpoint, oidc_authorization_endpoint, oidc_client_id, oidc_redirect_uri) end super end
error(ex)
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 53 def error(ex) if ex.is_a?(RestClient::InternalServerError) @oidc_token_endpoint = @oidc_authorization_endpoint = @oidc_client_id = @oidc_client_id = nil original_message = _("Invalid oidc-client-id or oidc-token-endpoint or oidc-authorization-endpoint.\n") begin message = JSON.parse(ex.response.body)['error']['message'] rescue end UnauthorizedError.new(original_message << message) end end
set_token(input_oidc_token_endpoint, input_oidc_authorization_endpoint, input_oidc_client_id, input_oidc_redirect_uri)
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 32 def set_token(input_oidc_token_endpoint, input_oidc_authorization_endpoint, input_oidc_client_id, input_oidc_redirect_uri) @oidc_token_endpoint = input_oidc_token_endpoint if input_oidc_token_endpoint @oidc_authorization_endpoint = input_oidc_authorization_endpoint if input_oidc_authorization_endpoint @oidc_client_id = input_oidc_client_id if input_oidc_client_id @oidc_redirect_uri = input_oidc_redirect_uri if input_oidc_redirect_uri if @oidc_client_id.to_s.empty? || @oidc_authorization_endpoint.to_s.empty? || @oidc_redirect_uri.to_s.empty? || @oidc_token_endpoint.to_s.empty? @token = nil else @code ||= get_code @token = HammerCLIForeman::OpenidConnect.new( @oidc_token_endpoint, @oidc_client_id).get_token_via_2fa(@code, @oidc_redirect_uri) end end
set_token_interactively()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 28 def set_token_interactively @token ||= set_token(get_oidc_token_endpoint, get_oidc_authorization_endpoint, get_oidc_client_id, get_oidc_redirect_uri) end
user()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 47 def user return nil unless @token payload = JWT.decode(@token, nil, false) payload.first["preferred_username"] end
Private Instance Methods
ask_user(prompt, silent=false)
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 93 def ask_user(prompt, silent=false) if silent HammerCLI.interactive_output.ask(prompt) { |q| q.echo = false } else HammerCLI.interactive_output.ask(prompt) end end
get_code()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 67 def get_code @token_url = "#{@oidc_authorization_endpoint}?"\ 'response_type=code'\ "&client_id=#{@oidc_client_id}"\ "&redirect_uri=#{@oidc_redirect_uri}"\ '&scope=openid' HammerCLI.interactive_output.say("Enter URL in browser: #{@token_url}") ask_user(_("Code:%s") % " ") end
get_oidc_client_id()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 85 def get_oidc_client_id @oidc_client_id ||= ask_user(_("Client ID:%s") % " ") end
get_oidc_redirect_uri()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 89 def get_oidc_redirect_uri @oidc_redirect_uri ||= ask_user(_("Redirect URI:%s") % " ") end
get_oidc_token_endpoint()
click to toggle source
# File lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb, line 81 def get_oidc_token_endpoint @oidc_token_endpoint ||= ask_user(_("Openidc Provider Token Endpoint:%s") % " ") end