class RIMS::Protocol::AuthenticationReader

Public Class Methods

new(auth, input_gets, output_write, logger) click to toggle source
# File lib/rims/protocol/parser.rb, line 189
def initialize(auth, input_gets, output_write, logger)
  @auth = auth
  @input_gets = input_gets
  @output_write = output_write
  @logger = logger
end

Public Instance Methods

authenticate_client(auth_type, inline_client_response_data_base64=nil) click to toggle source
# File lib/rims/protocol/parser.rb, line 196
def authenticate_client(auth_type, inline_client_response_data_base64=nil)
  username = case (auth_type.downcase)
             when 'plain'
               @logger.debug("authentication mechanism: plain") if @logger.debug?
               authenticate_client_plain(inline_client_response_data_base64)
             when 'cram-md5'
               @logger.debug("authentication mechanism: cram-md5") if @logger.debug?
               authenticate_client_cram_md5
             else
               nil
             end

  case (username)
  when String
    @logger.debug("authenticated #{username}.") if @logger.debug?
    username
  when Symbol
    @logger.debug('no authentication.') if @logger.debug?
    username
  else
    @logger.debug('unauthenticated.') if @logger.debug?
    nil
  end
end

Private Instance Methods

authenticate_client_cram_md5() click to toggle source
# File lib/rims/protocol/parser.rb, line 265
def authenticate_client_cram_md5
  server_challenge_data = @auth.cram_md5_server_challenge_data
  case (client_response_data = read_client_response_data(server_challenge_data))
  when String
    @auth.authenticate_cram_md5(server_challenge_data, client_response_data)
  when Symbol
    client_response_data
  else
    nil
  end
end
authenticate_client_plain(inline_client_response_data_base64) click to toggle source
# File lib/rims/protocol/parser.rb, line 253
def authenticate_client_plain(inline_client_response_data_base64)
  case (client_response_data = read_client_response_data_plain(inline_client_response_data_base64))
  when String
    @auth.authenticate_plain(client_response_data)
  when Symbol
    client_response_data
  else
    nil
  end
end
read_client_response_data(server_challenge_data=nil) click to toggle source
# File lib/rims/protocol/parser.rb, line 221
def read_client_response_data(server_challenge_data=nil)
  if (server_challenge_data) then
    server_challenge_data_base64 = Protocol.encode_base64(server_challenge_data)
    @logger.debug("authenticate command: server challenge data: #{Protocol.io_data_log(server_challenge_data_base64)}") if @logger.debug?
    @output_write.call([ "+ #{server_challenge_data_base64}\r\n" ])
  else
    @logger.debug("authenticate command: server challenge data is nil.") if @logger.debug?
    @output_write.call([ "+ \r\n" ])
  end

  if (client_response_data_base64 = @input_gets.call) then
    client_response_data_base64.strip!
    @logger.debug("authenticate command: client response data: #{Protocol.io_data_log(client_response_data_base64)}") if @logger.debug?
    if (client_response_data_base64 == '*') then
      @logger.debug("authenticate command: no authentication from client.") if @logger.debug?
      return :*
    end
    Protocol.decode_base64(client_response_data_base64)
  end
end
read_client_response_data_plain(inline_client_response_data_base64) click to toggle source
# File lib/rims/protocol/parser.rb, line 243
def read_client_response_data_plain(inline_client_response_data_base64)
  if (inline_client_response_data_base64) then
    @logger.debug("authenticate command: inline client response data: #{Protocol.io_data_log(inline_client_response_data_base64)}") if @logger.debug?
    Protocol.decode_base64(inline_client_response_data_base64)
  else
    read_client_response_data
  end
end