Sha256: 6a779a6db523575d11efab620cfbdc54ae876e392a4ff71b4e160ca1b6e4910a

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

module Voicemail
  class AuthenticationController < ApplicationController

    attr_accessor :tries, :auth_ok, :input

    def initialize(call, metadata={})
      @tries   = 0
      @auth_ok = false

      super call, metadata
    end

    def run
      if mailbox
        play_greeting
        authenticate
        fail_auth unless auth_ok
        pass MailboxController, mailbox: mailbox[:id]
      else
        mailbox_not_found
      end
    end

    def authenticate
      while still_going?
        @tries += 1
        get_input
        if matches?
          @auth_ok = true
        else
          play config.mailbox.pin_wrong
        end
      end
    end

    private

    def still_going?
      return false if auth_ok
      config.mailbox.pin_tries == 0 || tries < config.mailbox.pin_tries
    end

    def matches?
      config.matcher_class.new(input, mailbox[:pin]).matches?
    end

    def get_input
      @input = ask config.mailbox.please_enter_pin, terminator: "#", timeout: config.prompt_timeout
    end

    def play_greeting
      play config.mailbox.greeting_message
    end

    def fail_auth
      play config.mailbox.could_not_auth
      hangup
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
voicemail-1.1.1 lib/voicemail/call_controllers/authentication_controller.rb
voicemail-1.1.0 lib/voicemail/call_controllers/authentication_controller.rb
voicemail-1.0.0 lib/voicemail/call_controllers/authentication_controller.rb
voicemail-1.0.0.beta lib/voicemail/call_controllers/authentication_controller.rb