#
#   Copyright 2012 Wade Alcorn wade@bindshell.net
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#

module BeEF
module Core

  class Logger
    
    include Singleton
    
    # Constructor
    def initialize
      @logs = BeEF::Core::Models::Log
    end
  
    # Registers a new event in the logs
    # @param [String] from The origin of the event (i.e. Authentication, Hooked Browser)
    # @param [String] event The event description
    # @param [Integer] hb The id of the hooked browser affected (default = 0 if no HB)
    # @return [Boolean] True if the register was successful
    def register(from, event, hb = 0)
      # type conversion to enforce standards
      hb = hb.to_i
      
      # arguments type checking
      raise Exception::TypeError, '"from" needs to be a string' if not from.string?
      raise Exception::TypeError, '"event" needs to be a string' if not event.string?
      raise Exception::TypeError, '"Hooked Browser ID" needs to be an integer' if not hb.integer?
      
      # logging the new event into the database
      @logs.new(:type => "#{from}", :event => "#{event}", :date => Time.now, :hooked_browser_id => hb).save
      
      # return
      true
    end
    
    private
    @logs
    
  end
end
end
