class HammerCLIForeman::Api::SessionAuthenticatorWrapper
Constants
- SESSION_STORAGE
Public Class Methods
new(authenticator, url, storage_dir = nil)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 8 def initialize(authenticator, url, storage_dir = nil) @authenticator = authenticator @url = url uri = URI.parse(url) @session_file = "#{uri.scheme}_#{uri.host}" @storage_dir = storage_dir || File.expand_path(SESSION_STORAGE) @permissions_ok = check_storage_permissions warn _("Can't use session auth due to invalid permissions on session files.") unless @permissions_ok end
Public Instance Methods
authenticate(request, args)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 32 def authenticate(request, args) load_session user = @authenticator.user destroy_session if (user && user != @user) if @permissions_ok && @session_id jar = HTTP::CookieJar.new jar.add(HTTP::Cookie.new('_session_id', @session_id, domain: request.uri.hostname.downcase, path: '/', for_domain: true)) request['Cookie'] = HTTP::Cookie.cookie_value(jar.cookies) request else @authenticator.authenticate(request, args) end end
clear()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 20 def clear destroy_session end
error(ex)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 48 def error(ex) load_session if ex.is_a?(RestClient::Unauthorized) && !@session_id.nil? destroy_session ex.message = _("Session has expired") else @authenticator.error(ex) end end
response(r)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 58 def response(r) @session_id = r.cookies['_session_id'] if (@session_id && r.code != 401) save_session(@session_id, @authenticator.user) end @authenticator.response(r) end
status()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 24 def status if load_session _("Session exist, currently logged in as '%s'") % @user else _("You are currently not logged in") end end
user()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 66 def user @authenticator.user if @authenticator.respond_to?(:user) end
Protected Instance Methods
check_storage_permissions()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 102 def check_storage_permissions Dir.mkdir(@storage_dir, 0700) unless File.exist?(@storage_dir) ensure_mode(@storage_dir, '40700') && ensure_mode(session_storage, '100600') end
destroy_session()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 97 def destroy_session @user = @session_id = nil File.delete(session_storage) if File.exist?(session_storage) end
ensure_mode(file, expected_mode)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 107 def ensure_mode(file, expected_mode) return true unless File.exist?(file) mode = File.stat(file).mode.to_s(8) if mode != expected_mode warn _("Invalid permissions for %{file}: %{mode}, expected %{expected_mode}") % { :mode => mode, :expected_mode => expected_mode, :file => file } false else true end end
load_session()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 76 def load_session if File.exist?(session_storage) session_data = JSON.parse(File.read(session_storage)) @user = session_data['user_name'] @session_id = session_data['session_id'] end rescue JSON::ParserError warn _('Invalid session file format') nil end
save_session(session_id, user_name)
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 87 def save_session(session_id, user_name) File.open(session_storage, 'w', 0600) do |f| session = JSON.generate({ :session_id => session_id, :user_name => user_name }) f.write(session) end end
session_storage()
click to toggle source
# File lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb, line 72 def session_storage "#{@storage_dir}/#{@session_file}" end