class AuthenticationStrategies::X509Strategy

Public Instance Methods

auth_request() click to toggle source
# File lib/authentication_strategies/x509_strategy.rb, line 3
def auth_request
  @auth_request ||= ::ActionDispatch::Request.new(env)
end
authenticate!() click to toggle source

@see AuthenticationStrategies::DummyStrategy

# File lib/authentication_strategies/x509_strategy.rb, line 24
def authenticate!
  Rails.logger.debug "[AuthN] [#{self.class}] Authenticating ..."

  unless auth_request.env['SSL_CLIENT_VERIFY'] == 'SUCCESS'
    fail! "The verification process has failed! SSL_CLIENT_VERIFY = #{auth_request.env['SSL_CLIENT_VERIFY'].inspect}"
    return
  end

  user = Hashie::Mash.new
  user.auth!.type = 'x509'
  user.auth!.credentials!.client_cert_dn = auth_request.env['SSL_CLIENT_S_DN']
  user.auth!.credentials!.client_cert = auth_request.env['SSL_CLIENT_CERT'] unless auth_request.env['SSL_CLIENT_CERT'].blank?
  user.auth!.credentials!.issuer_cert_dn = auth_request.env['SSL_CLIENT_I_DN']
  user.auth!.credentials!.verification_status = auth_request.env['SSL_CLIENT_VERIFY']
  user.identity = user.auth.credentials.client_cert_dn

  Rails.logger.debug "[AuthN] [#{self.class}] Authenticated #{user.to_hash.inspect}"
  success! user.deep_freeze
end
store?() click to toggle source

@see AuthenticationStrategies::DummyStrategy

# File lib/authentication_strategies/x509_strategy.rb, line 8
def store?
  false
end
valid?() click to toggle source

@see AuthenticationStrategies::DummyStrategy

# File lib/authentication_strategies/x509_strategy.rb, line 13
def valid?
  # TODO: verify that we are running inside Apache2
  Rails.logger.debug "[AuthN] [#{self.class}] Checking for applicability"
  Rails.logger.debug "[AuthN] [#{self.class}] SSL_CLIENT_S_DN: #{auth_request.env['SSL_CLIENT_S_DN'].inspect}"
  result = !(auth_request.env['SSL_CLIENT_S_DN'].blank? || VomsStrategy.voms_extensions?(auth_request))

  Rails.logger.debug "[AuthN] [#{self.class}] Strategy is #{result ? '' : 'not '}applicable!"
  result
end