hackedteam/rcs-db

View on GitHub
scripts/rest_test.rb

Summary

Maintainability
D
2 days
Test Coverage
require 'openssl'
require 'net/http'
require 'json'
require 'benchmark'
require 'open-uri'
require 'pp'
require 'cgi'
require 'openssl'

class CGI
  def self.encode_query(hash)
    return hash.map{|k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"}.join("&")
  end
end

http = Net::HTTP.new('localhost', 4444)
#http = Net::HTTP.new('rcs-castore', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

# auth create admin
#account = {
#  :pass => 'adminp123'
#  }
#resp = http.request_post('/auth/reset', account.to_json, nil)
#puts "auth.create"
#puts resp.body
# login
account = {
  :user => 'alor',
  :pass => 'demorcss',
  :version => '9999123101'
  }
resp = http.request_post('/auth/login', account.to_json, nil)
puts "auth.login"
puts resp
cookie = resp['Set-Cookie'] unless resp['Set-Cookie'].nil?
puts "cookie " + cookie
puts
#puts resp.body.inspect

# session
if false
  # session.index
  res = http.request_get('/session', {'Cookie' => cookie})
  puts "session.index"
  puts res
  puts
  
  sess = JSON.parse(res.body)[0]
  
  puts sess.inspect
  
  # session.destroy
  res = http.delete("/session/#{sess['cookie']}", {'Cookie' => cookie})
  puts "session.destroy"
  puts res
  puts
end

# user
if false 
# user.create
# {'name': 'admin', 'pass': '6104a8be02be972bedf8c8bf107370fc517e2606', 'desc': 'Deus Ex Machina', 'contact': '', 'privs': ['ADMIN', 'TECH', 'VIEW'], 'enabled': true, 'locale': 'en_US', 'timezone': 0, 'group_ids':[]}
#user = {'name' => 'testina', 'pass' => 'test', 'desc' => 'Deus Ex Machina', 'contact' => '', 'privs' => ['ADMIN', 'TECH', 'VIEW'], 'enabled' => true, 'locale' => 'en_US', 'timezone' => 0}
#res = http.request_post('/user', user.to_json, {'Cookie' => cookie}) 
#puts "user.create "
#puts res
#puts

#exit unless res.kind_of? Net::HTTPOK

#test_user = JSON.parse(res.body)

#user.index
res = http.request_get('/user', {'Cookie' => cookie})
puts "user.index"
puts res.body
puts

# user.update
#user = {'desc' => 'Fallen angel', 'contact' => 'billg@microsoft.com', 'not_exist' => 'invalid field'}
#res = http.request_put("/user/#{test_user['_id']}", user.to_json, {'Cookie' => cookie}) 
#puts "user.update "
#puts res
#puts

#user.show
#res = http.request_get("/user/#{test_user['_id']}", {'Cookie' => cookie})
#puts "user.show"
#puts res
#puts

# user.destroy
#res = http.delete("/user/#{test_user['_id']}", {'Cookie' => cookie}) 
#puts "user.delete "
#puts res
#puts

end

# group
if false
# group.create
group = {'name' => 'test'}
res = http.request_post('/group', group.to_json, {'Cookie' => cookie}) 
puts "group.create "
puts res
puts

exit unless res.kind_of? Net::HTTPOK

test_group = JSON.parse(res.body)

# group.index
res = http.request_get('/group', {'Cookie' => cookie})
puts "group.index"
puts res
puts

# group.alert
group = {'name' => 'test container'}
res = http.request_post("/group/alert", test_group['_id'].to_json, {'Cookie' => cookie}) 
puts "group.alert "
puts res
puts

# group.update
group = {'name' => 'test container'}
res = http.request_put("/group/#{test_group['_id']}", group.to_json, {'Cookie' => cookie}) 
puts "group.update "
puts res
puts

# get the first user
res = http.request_get('/user', {'Cookie' => cookie})
test_user = JSON.parse(res.body)[0]

# group.add_user
group_user = {user: {_id: test_user['_id']}}
res = http.request_post("/group/add_user/#{test_group['_id']}", group_user.to_json, {'Cookie' => cookie}) 
puts "group.add_user "
puts res
puts

# get the first user
res = http.request_get('/user', {'Cookie' => cookie})
test_user = JSON.parse(res.body)[0]
puts "relation inside user?"
puts test_user.inspect
puts

# group.show
res = http.request_get("/group/#{test_group['_id']}", {'Cookie' => cookie})
puts "group.show"
puts res
puts

# group.del_user
group_user = {user: {_id: test_user['_id']}}
res = http.request_post("/group/del_user/#{test_group['_id']}", group_user.to_json, {'Cookie' => cookie}) 
puts "group.del_user "
puts res
puts

# group.show
res = http.request_get("/group/#{test_group['_id']}", {'Cookie' => cookie})
puts "group.show"
puts res
puts

# get the first user
res = http.request_get('/user', {'Cookie' => cookie})
test_user = JSON.parse(res.body)[0]
puts "Is the user still there?"
puts test_user.inspect
puts

# group.destroy
res = http.delete("/group/#{test_group['_id']}", {'Cookie' => cookie}) 
puts "group.delete "
puts res
puts

# get the first user
res = http.request_get('/user', {'Cookie' => cookie})
test_user = JSON.parse(res.body)[0]
puts "Is the user still there?"
puts test_user.inspect
puts

end

# audit
if false
  # audit.count
    res = http.request_get('/audit/filters', {'Cookie' => cookie})
    puts "audit.filters"
    puts res.body
    puts
  
   res = http.request_get('/audit/count', {'Cookie' => cookie})
   puts "audit.count"
   puts res.body.inspect
   puts
   
   res = http.request_get(URI.escape('/audit/count?filter={"action": ["puddu"]}'), {'Cookie' => cookie})
   puts "audit.count 'puddu'"
   puts res.body.inspect
   puts
   
   res = http.request_get(URI.escape('/audit/count?filter={"action": ["user.update", "login"]}'), {'Cookie' => cookie})
   puts "audit.count 'user.update'"
   puts res.body.inspect
   puts
   
  # audit.index
   res = http.request_get(URI.escape('/audit?filter={"action": ["user.update"]}&startIndex=0&numItems=10'), {'Cookie' => cookie})
   puts "audit.index 'user.update'"
   puts res
   puts
   
   # audit.index
  res = http.request_get('/audit', {'Cookie' => cookie})
  puts "audit.index"
  puts res
  puts
end

# audit export log
if false
  params = {'file_name' => 'pippo', 'filter' => {"action" => ["user.update", "login"]} }
  res = http.request_post("/audit/create", params.to_json, {'Cookie' => cookie})
  puts "audit.export"
  File.open('pippo.csv', 'wb') do |f|
    f.write res.body
  end
  puts
end

# license
if false
  # license.limit
  res = http.request_get('/license/limit', {'Cookie' => cookie})
  puts "license.limit"
  puts res.body
  puts
  
  # license.count
  res = http.request_get('/license/count', {'Cookie' => cookie})
  puts "license.count"
  puts res.body
  puts
end

# monitor
if false
  # status.index
  res = http.request_get('/status', {'Cookie' => cookie})
  puts "status.index"
  puts res
  puts res.body
  
  #monitor = JSON.parse(res.body)[0]
  
  #res = http.delete("/status/#{monitor['_id']}", {'Cookie' => cookie})
  #puts "status.destroy"
  #puts res
  #puts

  res = http.request_get('/status/counters', {'Cookie' => cookie})
  puts "status.counters"
  puts res
  puts
end

# task
if false

def REST_task(http, cookie, type, filename, params={})
  
  task_params = {'type' => type, 'file_name' => filename}
  task_params.merge! params
  
  res = http.request_post('/task/create', task_params.to_json, {'Cookie' => cookie})
  res.kind_of? Net::HTTPSuccess or fail("Cannot create task.")
  puts res.body
  task = JSON.parse(res.body)
  puts "Created task #{task['_id']}"
  puts "TASK STATUS: #{task['status']}"
  puts
  
  while (task['status'] != 'download_available' and not task['status'] == 'finished')
    res = http.request_get("/task/#{task['_id']}", {'Cookie' => cookie})
    puts res.body
    task = JSON.parse(res.body)
    puts "#{task['current']}/#{task['total']} #{task['description']}"
    break if task['error'] == true
    resource = task['resource']
    sleep 0.05
  end
  
  puts "TASK STATUS: #{task['status']}"
  puts "#{task['current']}/#{task['total']} #{task['desc']}"
  
  unless resource.nil?
    puts "resource: #{resource.to_s}"
    res = http.request_get("/file/#{resource['_id']}", {'Cookie' => cookie})
    puts "#{resource['type']}.get"
    File.open(resource['file_name'], 'wb') do |f|
    f.write res.body
  end
    puts "Written #{resource['file_name']} (#{File.size(resource['file_name'])})."
  end
  
  puts "Deleting task #{task['_id'].to_json}."
  res = http.request_post('/task/destroy', {_id: task['_id']}.to_json, {'Cookie' => cookie})
  puts res.inspect
  puts
end

#REST_task(http, cookie, 'audit', 'audit-all.tar.gz')
#REST_task(http, cookie, 'dummy', 'dummy.tar.gz')

res = http.request_get('/factory', {'Cookie' => cookie})
factories = JSON.parse(res.body)

android_params = {params: {factory: {_id: factories.first['_id']},
                  platform: 'android',
                  binary: {demo: true},
                  melt: {appname: 'facebook'}
                  }
                }
bb_params =  {params: {factory: {_id: factories.first['_id']},
                platform: 'blackberry',
                binary: {demo: true},
                melt: {appname: 'facebook',
                  name: 'Facebook Application',
                  desc: 'Applicazione utilissima di social network',
                  vendor: 'face inc',
                  version: '1.2.3'},
                package: {type: 'remote'}
                }
              }
              
wap_params = {params: {factory: {_id: factories.first['_id']},
                platform: 'wap',
                        generate: {platforms: ['blackberry', 'android', 'winmo'],
                                   binary: {demo: true, admin: true},
                                   melt: {admin: true,
                                          appname: 'facebook',
                                          name: 'Facebook Application',
                                          desc: 'Applicazione utilissima di social network',
                                          vendor: 'face inc',
                                          version: '1.2.3'},
                                   sign: {edition: '5th3rd'}
                                  }
                        }
              }
              
nia_params = {params: {injector_id: '4ef0542e963d350d8800115e'}}
                                   
#REST_task(http, cookie, 'build', 'android.zip', android_params)
#REST_task(http, cookie, 'build', 'bb.zip', bb_params)
#REST_task(http, cookie, 'build', nil, wap_params)
REST_task(http, cookie, 'injector', nil, nia_params)

=begin
sleep 3

res = http.delete("/task/#{task['id']}", {'Cookie' => cookie})
puts "task.delete"
puts res
puts
=end

end # task

# grid
if false
=begin
  grid_id = '4dfa1d1aa4df496c90fab43e' # 1.4 gb (underground.avi)
  #grid_id = '4dfa2483674bba48cd2a153f' # 280 mb (en_outlook.exe)
  fo = File.open('underground.avi', 'wb')
  puts "grid.show"
  total = 0
  http.request_get("/grid/#{grid_id}", {'Cookie' => cookie}) do |resp|
    resp.read_body do |segment|
      print "."
      total += segment.bytesize
      fo.write(segment)
    end
  end
  fo.close
  puts "Got #{total} bytes."
=end

  fo = File.open('dropall.js', 'rb') do |f|
    ret = http.request_post("/grid", f.read ,{'Cookie' => cookie})
    puts ret
  end
end

# injector
if false
  
  injector_id = 0
  
  # injector.index
  #res = http.request_get('/injector', {'Cookie' => cookie})
  #puts "injector.index"
  #puts res.body
  #puts
  
  #injectors = JSON.parse(res.body)
  #injectors.each do |injector|
  #  if injector['_mid'] == 3
  #    injector_id = injector['_id']
  #  end
  #end
  
  # injector.delete
  #injectors.each do |injector|
  #  puts "injector.delete"
  #  ret = http.delete("/injector/#{injector['_id']}", {'Cookie' => cookie})
  #  puts ret
  #end
  
  # injector.create
  injector = {name: 'test'}
  res = http.request_post('/injector', injector.to_json, {'Cookie' => cookie})
  puts "injector.create"
  puts res
  puts
  
  test_injector = JSON.parse(res.body)
  injector_id = test_injector['_id']
  
  # injector.update
  injector = {name: 'NIA', address: '1.2.3.4', redirect: '4.3.2.1', desc: 'test injection injector', port: 4445, poll: true}
  res = http.request_put("/injector/#{injector_id}", injector.to_json, {'Cookie' => cookie}) 
  puts "injector.update "
  puts res
  puts
  
  # injector.show
  res = http.request_get("/injector/#{injector_id}", {'Cookie' => cookie})
  puts "injector.show"
  puts res.body
  #injector = JSON.parse(res.body)
  #puts injector.inspect
  puts
  
  # injector.rules
  puts "injector.rules"
  puts injector['rules'].inspect
  puts
  
  # injector.log
  res = http.request_get("/injector/logs/#{injector_id}", {'Cookie' => cookie})
  puts "injector.log"
  puts res
  puts
  
  # injector.add_rule
  puts "injector.add_rule"
  rule = {rule: {enabled: true, disable_sync: false, ident: 'STATIC-IP', 
          ident_param: '14.11.78.4', probability: 100, resource: 'www.alor.it', 
          action: 'INJECT-HTML', action_param: 'RCS_0000602', target_id: ['4e314a052afb65157900005a']}}
  res = http.request_post("/injector/add_rule/#{injector_id}", rule.to_json, {'Cookie' => cookie})

  rule = JSON.parse(res.body)
  puts rule
  puts
  
  # injector.rules
  puts "injector.show"
  res = http.request_get("/injector/#{injector_id}", {'Cookie' => cookie})
  puts res.body
  injector = JSON.parse(res.body)
  #puts injector['rules'].inspect
  puts
  
  # upload.create
  res = http.request_post('/upload', "abracadabra", {'Cookie' => cookie})
  puts "upload.create"
  puts res.body
  puts
  
  upload_id = res.body
  
  # injector.update_rule
  puts "injector.update_rule"
  mod = {rule: {_id: rule['_id'], enabled: false, disable_sync: true, ident: 'STATIC-MAC',
          ident_param: '00:11:22:33:44:55', target_id: ['4e314a052afb65157900005a'], action: 'REPLACE', action_param: upload_id}}
  res = http.request_post("/injector/update_rule/#{injector_id}", mod.to_json, {'Cookie' => cookie})
  puts res
  puts
  
  # injector.rules
  puts "injector.show"
  res = http.request_get("/injector/#{injector_id}", {'Cookie' => cookie})
  puts res.body
  #injector = JSON.parse(res.body)
  #puts injector['rules'].inspect
  puts
  
  # injector.del_rule
  puts "injector.del_rule"
  request = {rule: {_id: rule['_id']}}
  res = http.request_post("/injector/del_rule/#{injector_id}", request.to_json, {'Cookie' => cookie})
  puts res
  puts
  
  # injector.config
  puts "injector.config"
  res = http.request_get("/injector/config/#{injector_id}", {'Cookie' => cookie})
  puts res
  puts

  # injector.delete
  puts "injector.delete"
  ret = http.delete("/injector/#{injector_id}", {'Cookie' => cookie})
  puts ret
  
  
  
end

# injector config
if false
  
  # injector.config
  res = http.request_get("/injector/config/4e9ec80d2afb657230001012", {'Cookie' => cookie})
  puts "injector.config"
  puts res.body
  
  File.open('config.zip', 'wb+') do |f|
    f.write res.body
  end

  puts "File saved (#{res.body.size})"

end

# collector
if false
  # collector.index
  #res = http.request_get('/collector', {'Cookie' => cookie})
  #puts "collector.index"
  #puts res.body
  
  
  coll = {_id: '4f34cea32afb6552150012ac'}
  res = http.request_get('/collector/config/4f34cea32afb6552150012ac', {'Cookie' => cookie})
  puts "collector.config"
  puts res
  puts
  
  #File.open('conf.zip', 'wb') {|f| f.write res.body}
  
=begin  
  collectors = JSON.parse(res.body)
  collectors.each do |coll|
    puts coll
    puts
  end
  
  # collector.delete
  collectors.each do |coll|
    puts "collector.delete"
    ret = http.delete("/collector/#{coll['_id']}", {'Cookie' => cookie})
    puts ret
  end

  # collector.create
  coll = {name: 'test'}
  res = http.request_post('/collector', coll.to_json, {'Cookie' => cookie})
  puts "collector.create"
  puts res
  puts
  
  test_coll = JSON.parse(res.body)
  
  # collector.update
  coll = {name: 'anonymizer', address: '1.2.3.4', desc: 'test collector', port: 4445, poll: true}
  res = http.request_put("/collector/#{test_coll['_id']}", coll.to_json, {'Cookie' => cookie}) 
  puts "collector.update "
  puts res
  puts
=end    
end

# alerts
if false
  # alert.index
  puts "alert.index" 
  res = http.request_get('/alert', {'Cookie' => cookie})
  puts res.body
  puts
  
=begin  
  # alert.create
  puts "alert.create" 
  alert = {evidence: 'keylog', priority: 5, suppression: 600, type: 'mail', keywords: 'ciao miao bau', path: [1, 2, 3]}
  res = http.request_post('/alert', alert.to_json, {'Cookie' => cookie})
  alert = JSON.parse(res.body)
  puts alert
  puts

  # alert.index
  puts "alert.index" 
  res = http.request_get('/alert', {'Cookie' => cookie})
  puts res
  puts

  # alert.update
  puts "alert.update" 
  mod = {evidence: 'chat', priority: 1, enabled: false}
  res = http.request_put("/alert/#{alert['_id']}", mod.to_json, {'Cookie' => cookie})
  puts res
  puts

  # alert.show
  puts "alert.show" 
  res = http.request_get("/alert/#{alert['_id']}", {'Cookie' => cookie})
  puts res
  puts
  
  # alert.index
  puts "alert.index" 
  res = http.request_get('/alert', {'Cookie' => cookie})
  puts res
  puts
  
  # alert.delete
  puts "alert.delete"
  res = http.delete("/alert/#{alert['_id']}", {'Cookie' => cookie})
  puts res
  puts
  
  # alert.index
  puts "alert.index" 
  res = http.request_get('/alert', {'Cookie' => cookie})
  puts res
  puts
  
  # alert.counter
  puts "alert.counter" 
  res = http.request_get('/alert/counters', {'Cookie' => cookie})
  puts res
  puts
=end  
end

# operations
if false
  puts "operation.index" 
  res = http.request_get('/operation', {'Cookie' => cookie})
  #puts res.body
  operations = JSON.parse(res.body)
  puts operations.size
  puts
  #puts operations.inspect
  
  puts "operation.index.all" 
  res = http.request_get('/operation?all=true', {'Cookie' => cookie})
  #puts res.body
  operations_all = JSON.parse(res.body)
  puts operations_all.size
  puts
  
  puts "operation.show"
  res = http.request_get("/operation/#{operations.first['_id']}", {'Cookie' => cookie})
  operation = JSON.parse(res.body)
  puts operation
  puts 
  
  #puts "operation.create"
  #operation_post = {
  #  name: "test operation", 
  #  desc: "this is a test operation", 
  #  contact: "billg@microsoft.com"
  #}
  #res = http.request_post("/operation/create", operation_post.to_json, {'Cookie' => cookie})
  #puts res.body
  #operation = JSON.parse(res.body)
  #puts operation
  #puts

  # group.show
  #res = http.request_get("/group/4e8ac48b2afb65289500000b", {'Cookie' => cookie})
  #puts "group.show"
  #puts res
  #puts
  
  #puts "operation.update"
  #operation_post = {
  #  _id: operation['_id'],
  #  name: "RENAMED!!!", 
  #  desc: "whoa! this is our renamed operation", 
  #  contact: "ballmer@microsoft.com",
  #  group_ids: ['4e8ac4612afb652936000006']
  #}
  #res = http.request_post("/operation/update", operation_post.to_json, {'Cookie' => cookie})
  #puts res.body
  #operation = JSON.parse(res.body)
  #puts operation
  #puts
  
  # group.show
  #res = http.request_get("/group/4e8ac48b2afb65289500000b", {'Cookie' => cookie})
  #puts "group.show"
  #puts res
  #puts
  
  #puts "operation.delete"
  #res = http.request_post("/operation/destroy", {_id: operation['_id']}.to_json, {'Cookie' => cookie})
  #puts res.body
  #puts
  
  # group.show
  #res = http.request_get("/group/4e8ac48b2afb65289500000b", {'Cookie' => cookie})
  #puts "group.show"
  #puts res
  #puts
end

# targets
if false
  res = http.request_get('/operation', {'Cookie' => cookie})
  operations = JSON.parse(res.body)

  puts "target.index" 
  res = http.request_get('/target', {'Cookie' => cookie})
  #puts res.body
  targets = JSON.parse(res.body)
  puts targets  
  puts

  puts "target.show"
  res = http.request_get("/target/#{targets.first['_id']}", {'Cookie' => cookie})
  #puts res.body
  target = JSON.parse(res.body)
  puts target
  puts

=begin  
  puts "target.create"
  target_post = {
    name: "test target", 
    desc: "this is a test target",
    operation: operations.first['_id']
  }
  res = http.request_post("/target/create", target_post.to_json, {'Cookie' => cookie})
  puts res.body
  target = JSON.parse(res.body)
  #puts target
  puts
  
  puts "target.update"
  target_post = {
    _id: target['_id'],
    name: "RENAMED!!!", 
    desc: "whoa! this is our renamed target", 
    contact: "ballmer@microsoft.com"
  }
  res = http.request_post("/target/update", target_post.to_json, {'Cookie' => cookie})
  puts res.body
  target = JSON.parse(res.body)
  #puts target
  puts
  
  puts "target.delete"
  res = http.request_post("/target/destroy", {_id: target['_id']}.to_json, {'Cookie' => cookie})
  puts res.body
  puts
=end
end

# agents
if false
=begin
  res = http.request_get('/operation', {'Cookie' => cookie})
  operations = JSON.parse(res.body)
  
  res = http.request_get('/target', {'Cookie' => cookie})
  targets = JSON.parse(res.body)
=end

  puts "agent.index"
  res = http.request_get('/agent', {'Cookie' => cookie})
  agents = JSON.parse(res.body)
  #puts agents
  #agents.each {|agent| puts "#{agent['_kind']}\t#{agent['name']}"}
  puts "You got #{agents.size} agents."
  puts

  puts 'agent.can_upgrade'
  res = http.request_get("/agent/can_upgrade/#{agents.first['_id']}", {'Cookie' => cookie})
  resp = JSON.parse(res.body)
  puts resp.inspect
  
  #puts "agent.show"
  #res = http.request_get("/agent/#{agents.first['_id']}", {'Cookie' => cookie})
  #agent = JSON.parse(res.body)
  #agent = JSON.parse(res.body)
  #puts agent.inspect

  #puts "agent.filesystem POST"
  #filesystem_post = {
  #   _id: agent['_id'],
  #   filesystem: {path: '%HOMEDRIVE%\\\\*', depth: 2}
  # }
  #res = http.request_post("/agent/filesystem", filesystem_post.to_json, {'Cookie' => cookie})
  #fs_post = JSON.parse(res.body)
  #puts fs_post
  #puts



=begin
  puts "agent.update"
  agent_post = {
     _id: agent['_id'],
     name: "RENAMED!!!", 
     desc: "whoa! this is our renamed agent", 
     ident: "this field MUST NOT be updated!!!!!!!!!!!!"
   }
  res = http.request_post("/agent/update", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  agent = JSON.parse(res.body)
  puts agent
  puts
  
  puts "agent.add_config"
  agent_post = {
    _id: agent['_id'],
    config: "{active: true}"
  }
  res = http.request_post("/agent/add_config", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  config = JSON.parse(res.body)
  puts config['config']
  puts
  
  puts "agent.del_config"
  agent_post = {
    _id: agent['_id'],
    config_id: config['_id']
  }
  res = http.request_post("/agent/del_config", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  puts
  
  puts "agent.delete"
  res = http.request_post("/agent/destroy", {_id: agent['_id']}.to_json, {'Cookie' => cookie})
  puts res.body
  puts
=end
end

# factories
if false
  res = http.request_get('/operation', {'Cookie' => cookie})
  operations = JSON.parse(res.body)
  
  res = http.request_get('/target', {'Cookie' => cookie})
  targets = JSON.parse(res.body)
  
  puts "factory.index"
  res = http.request_get('/factory', {'Cookie' => cookie})
  #puts res.body
  factories = JSON.parse(res.body)
  puts factories
  puts "You got #{factories.size} factories."
  puts
  
  puts "factory.show"
  res = http.request_get("/factory/#{factories.first['_id']}", {'Cookie' => cookie})
  #puts res.body
  factory = JSON.parse(res.body)
  puts factory
  puts

=begin
  puts "factory.create"
  factory_post = {
     name: "Uber Factory!",
     desc: "The best factory in the World!",
     operation: targets.first['path'].first,
     target: targets.first['_id']
   }
  res = http.request_post("/factory/create", factory_post.to_json, {'Cookie' => cookie})
  puts res.body
  factory = JSON.parse(res.body)
  puts
  
  puts "factory.update"
  agent_post = {
     _id: factory['_id'],
     name: "RENAMED!!!", 
     desc: "whoa! this is our renamed factory", 
     ident: "this field MUST NOT be updated!!!!!!!!!!!!"
   }
  res = http.request_post("/factory/update", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  factory = JSON.parse(res.body)
  puts factory
  puts
  
  puts "factory.add_config"
  agent_post = {
    _id: factory['_id'],
    config: "{active: true}"
  }
  res = http.request_post("/factory/add_config", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  config = JSON.parse(res.body)
  puts config['config']
  puts
  
  puts "factory.del_config"
  agent_post = {
    _id: factory['_id'],
    config_id: config['_id']
  }
  res = http.request_post("/factory/del_config", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  puts
  
  puts "factory.delete"
  res = http.request_post("/factory/destroy", {_id: factory['_id']}.to_json, {'Cookie' => cookie})
  puts res.body
  puts
=end
end

# search
if false
  # search.index
  puts "search.index" 
  res = http.request_get('/search', {'Cookie' => cookie})
  items = JSON.parse(res.body)
  puts "You've got #{items.size} items."
  puts
  
  # search.index with filter
  puts "search.index RCS_0000000610"
  res = http.request_get(URI.escape('/search?filter={"name": "RCS_0000000610"}'), {'Cookie' => cookie})
  rcs_10 = JSON.parse(res.body)
  puts rcs_10
  puts
  
  puts "search.show"
  res = http.request_get("/search/#{rcs_10[0]["_id"]}", {'Cookie' => cookie})
  puts res.body
  puts
end

# upload
if false
  # upload.create
  res = http.request_post('/upload', "abracadabra", {'Cookie' => cookie})
  puts "upload.create"
  puts res
  puts
end

# version
if false
  # version.index
  puts "version.index" 
  res = http.request_get('/version', {'Cookie' => cookie})
  versions = JSON.parse(res.body)
  puts versions
  puts
  
  # version.show
  puts "version.show" 
  res = http.request_get("/version/#{versions['console']}", {'Cookie' => cookie})
  puts res
  puts
  
  
end

# shards
if false
  # shard.index
  puts "shard.index" 
  res = http.request_get('/shard', {'Cookie' => cookie})
  shards = JSON.parse(res.body)
  puts res.body
  puts
  
  shards['shards'].each do |shard|
    puts 'shard.show ' + shard['host']
    res = http.request_get("/shard/#{shard['_id']}", {'Cookie' => cookie})
    puts res.body
    puts
  end

  # shard.create
  #res = http.request_post('/shard/create', {host: "localhost:27027"}.to_json, {'Cookie' => cookie})
  #puts "shard.create"
  #puts res
  #puts
  
  # shard.index
  #puts "shard.index" 
  #res = http.request_get('/shard', {'Cookie' => cookie})
  #puts res.body
  #puts
end

# backup
if false
  # backup.index
  puts "backup.index" 
  res = http.request_get('/backupjob', {'Cookie' => cookie})
  shards = JSON.parse(res.body)
  puts res.body
  puts
  
  # backup.create
  #backup = {what: 'operation: 4e80369d2afb6509cc000026', enabled: true, when: {week: [], month: [], time: '09:20'}, name: 'ALoR Test'}
  #res = http.request_post('/backupjob/create', backup.to_json, {'Cookie' => cookie})
  #puts "backup.create"
  #puts res.body
  #puts
  
  #id = JSON.parse(res.body)['_id']
  
  # backup.delete
  #puts "backup.delete"
  #res = http.delete("/backup/#{id}", {'Cookie' => cookie})
  #puts res
  #puts
  
  # backuparchive.index
  puts "backuparchive.index" 
  res = http.request_get('/backuparchive', {'Cookie' => cookie})
  puts res.body
  puts
  
  # backuparchive.delete
  #puts "backuparchive.delete" 
  #res = http.delete('/backuparchive/metadata-2011-09-26-15:30', {'Cookie' => cookie})
  #puts res.body
  #puts

  # backuparchive.restore
  #puts "backuparchive.restore" 
  #res = http.request_post('/backuparchive/restore', {_id: 'metadata-2011-09-26-11:03'}.to_json, {'Cookie' => cookie})
  #puts res.body
  #puts
  
  
end
  
# evidence
if false
  # evidence.index
  #filter = {target: '4f28003c2afb65cf4700006c'}.to_json
  #res = http.request_get(URI.escape("/evidence?filter=#{filter}&startIndex=0&numItems=20"), {'Cookie' => cookie})
  #puts "evidence.index"
  #puts res.body
  #puts
  
  # evidence.index
  filter = {target: '4f86902a2afb6512a700006f', agent: '512f19972afb6522d9000010'}.to_json
  url = URI.escape("/evidence?filter=#{filter}&startIndex=0&numItems=10")
  res = http.request_get(url, {'Cookie' => cookie})
  puts "evidence.index"
  puts url
  puts res.body
  puts

  # evidence.total
  filter = {target: '4f86902a2afb6512a700006f', agent: '512f19972afb6522d9000010'}.to_json
  url = URI.escape("/evidence/total?filter=#{filter}")
  res = http.request_get(url, {'Cookie' => cookie})
  puts "evidence.total"
  puts url
  puts res.body
  puts
  
end
    
# config    
if false
  
  puts "agent.add_config"
  agent_post = {
    _id: '4ea526392afb656f06000097',
    desc: "nuova config via rest",
    config: "{active: true}"
  }
  res = http.request_post("/agent/add_config", agent_post.to_json, {'Cookie' => cookie})
  puts res.body
  config = JSON.parse(res.body)
  puts config['config']
  puts
  
  puts "agent.show"
  res = http.request_get("/agent/4ea526392afb656f06000097", {'Cookie' => cookie})
  puts res.body
  puts
  
end

# exploit
if false
  # exploit.index
  puts "exploit.index" 
  res = http.request_get('/exploit', {'Cookie' => cookie})
  shards = JSON.parse(res.body)
  puts res.body
  puts
end

# item deletion
if false
  puts "operation.create"
  operation_post = {
    name: "test operation", 
    desc: "this is a test operation", 
    contact: "billg@microsoft.com"
  }
  res = http.request_post("/operation/create", operation_post.to_json, {'Cookie' => cookie})
  operation = JSON.parse(res.body)
  puts operation
  puts
  
  res = http.request_get('/user', {'Cookie' => cookie})
  puts "user.index"
  users = JSON.parse(res.body)
  user = users.first
  puts user

  puts "user.add_recent"  
  res = http.request_post('/user/add_recent', {_id: user['_id'], item_id: operation['_id']}.to_json, {'Cookie' => cookie})

  res = http.request_get('/user', {'Cookie' => cookie})
  users = JSON.parse(res.body)
  user = users.first
  puts user

  puts "operation.delete"
  res = http.request_post("/operation/destroy", {_id: operation['_id']}.to_json, {'Cookie' => cookie})
  puts res.body
  puts

  puts "user.index"
  res = http.request_get('/user', {'Cookie' => cookie})
  users = JSON.parse(res.body)
  user = users.first
  puts user
  
end

# position
if false
  cells = [{mobileCountryCode: 222, mobileNetworkCode: 1, locationAreaCode: 61208, cellId: 528, signalStrength: -92, timingAdvance: 0, age: 0}]
  request = {'cellTowers' => cells, radioType: 'gsm'}
  loc = {map: request}
  puts 'location.wifi'
  res = http.request_post('/position', loc.to_json, {'Cookie' => cookie})
  puts res.body
=begin
  # GPS
  loc = {map: {location: {latitude: 45.12345, longitude: 9.54321}}}
  puts 'location.gps'
  res = http.request_post('/position', loc.to_json, {'Cookie' => cookie})
  puts res.body

  # CELL
  loc = {map: {cell_towers: [{mobile_country_code: 222, mobile_network_code: 1, location_area_code: 61208, cell_id: 528, signal_strength: -92, timing_advance: 0, age: 0}
                            ], radio_type: 'gsm'}}
  puts 'location.cell'
  res = http.request_post('/position', loc.to_json, {'Cookie' => cookie})
  puts res.body
  
  # WIFI
  loc = {map: {wifi_towers: [{mac_address: '00:17:C2:F8:9C:60', signal_strength: 55, ssid: 'FASTWEB-1-0017C2F89C60'},
          {mac_address: '00:25:C9:DF:AB:A7', signal_strength: 41, ssid: 'ht-guest-wifi'},
          {mac_address: '38:22:9D:F7:84:F4', signal_strength: 77, ssid: 'FASTWEB-1-38229DF784F4'},
          {mac_address: '00:1F:33:FC:B4:18', signal_strength: 85, ssid: 'NETGEAR'},
          {mac_address: '00:24:89:01:5E:0B', signal_strength: 48, ssid: 'Vodafone-10369386'},
          {mac_address: '00:1C:A2:DC:3C:B8', signal_strength: 84, ssid: 'InfostradaWifi'},
          {mac_address: '00:18:F8:7A:CA:C5', signal_strength: 81, ssid: 'prsp'},
          {mac_address: '00:25:4B:0A:63:E5', signal_strength: 80, ssid: 'Network di laura spinella'},
          {mac_address: '00:18:F8:7A:CA:C5', signal_strength: 81, ssid: 'prsp'}
         ]}
       }
  puts 'location.wifi'
  res = http.request_post('/position', loc.to_json, {'Cookie' => cookie})
  puts res.body

  # IP
  loc = {map: {ip_address: {ipv4: '8.8.8.8'}}}
  puts 'location.ip'
  res = http.request_post('/position', loc.to_json, {'Cookie' => cookie})
  puts res.body
=end
end

# fake sync
if false
  puts 'agent.status'
  request = {:ident => 'RCS_0000000001', :instance => '47170c3e047b6a910e7ecc2e987060db2ff06cd9', :subtype => 'WINDOWS'}      
  res = http.request_get('/agent/status/?' + CGI.encode_query(request), {'Cookie' => cookie})
  puts res.body
  
end

# moving target...
if false
  puts 'target.move (to 2)'
  request = {:_id => '4f214b8c2afb65821100006c', :operation => '4f214b8c2afb658211000032'}      
  res = http.request_post('/target/move', request.to_json, {'Cookie' => cookie})
  puts res.body

  puts "target.show"
  res = http.request_get("/target/4f214b8c2afb65821100006c", {'Cookie' => cookie})
  target = JSON.parse(res.body)
  puts target['path'].inspect
  puts

  puts "factory.show"
  res = http.request_get("/factory/4f214b8c2afb6582110000c9", {'Cookie' => cookie})
  factory = JSON.parse(res.body)
  puts factory['path'].inspect
  puts

  puts 'target.move (to 1)'
  request = {:_id => '4f214b8c2afb65821100006c', :operation => '4f214b8c2afb658211000030'}      
  res = http.request_post('/target/move', request.to_json, {'Cookie' => cookie})
  puts res.body

  puts "target.show"
  res = http.request_get("/target/4f214b8c2afb65821100006c", {'Cookie' => cookie})
  target = JSON.parse(res.body)
  puts target['path'].inspect
  puts

  puts "factory.show"
  res = http.request_get("/factory/4f214b8c2afb6582110000c9", {'Cookie' => cookie})
  factory = JSON.parse(res.body)
  puts factory['path'].inspect
  puts
end

# moving agent...
if false
  agent_id = '4f28003c2afb65cf470000cb'

  puts 'agent.move (to 2)'
  request = {:_id => agent_id, :target => '4f28003c2afb65cf4700006e'}      
  res = http.request_post('/agent/move', request.to_json, {'Cookie' => cookie})
  puts res.body

  puts "agent.show"
  res = http.request_get("/agent/#{agent_id}", {'Cookie' => cookie})
  target = JSON.parse(res.body)
  puts target['path'].inspect
  puts
  
  puts 'agent.move (to 1)'
  request = {:_id => agent_id, :target => '4f28003c2afb65cf4700006c'}      
  res = http.request_post('/agent/move', request.to_json, {'Cookie' => cookie})
  puts res.body

  puts "agent.show"
  res = http.request_get("/agent/#{agent_id}", {'Cookie' => cookie})
  target = JSON.parse(res.body)
  puts target['path'].inspect
  puts
end

# connector
if false
  # connector.index
  puts "connector.index" 
  res = http.request_get('/connector', {'Cookie' => cookie})
  shards = JSON.parse(res.body)
  puts res.body
  puts
  
  # connector.create
  connector = {name: 'test', enabled: true, keep: true}
  res = http.request_post('/connector/create', connector.to_json, {'Cookie' => cookie})
  puts "connector.create"
  puts res.body
  puts

  puts "connector.index" 
  res = http.request_get('/connector', {'Cookie' => cookie})
  shards = JSON.parse(res.body)
  puts res.body
  puts
  
end

# cores
if false
  # core.index
  puts "core.index" 
  res = http.request_get('/core', {'Cookie' => cookie})
  puts res.body
  puts
end

# upload & download
if false
  puts "agent.downloads"
  res = http.request_get("/agent/downloads/4F6059012AFB65C9440000CC", {'Cookie' => cookie})
  puts res.body
  puts
=begin  
  puts "agent.download"
  res = http.request_post("/agent/download", {_id: "4F6059012AFB65C9440000CC", download: {path: "c:\\*.bmp"}}.to_json, {'Cookie' => cookie})
  puts res.body
  puts
  
  puts "agent.downloads"
  res = http.request_get("/agent/downloads/4F6059012AFB65C9440000CC", {'Cookie' => cookie})
  puts res.body
  puts
=end

 puts "agent.uploads"
 res = http.request_get("/agent/uploads/4F6059012AFB65C9440000CC", {'Cookie' => cookie})
 puts res.body
 puts

 puts "agent.upload"
 res = http.request_post("/agent/upload", {_id: "4F6059012AFB65C9440000CC", upload: {filename: "pippo", file: 'test'}}.to_json, {'Cookie' => cookie})
 puts res.body
 puts

 puts "agent.uploads"
 res = http.request_get("/agent/uploads/4F6059012AFB65C9440000CC", {'Cookie' => cookie})
 puts res.body
 puts

 puts "agent.filesystems"
 res = http.request_get("/agent/filesystems/5008225C2AFB654A4F003B9B", {'Cookie' => cookie})
 puts res.body
 puts
 
end

# filesystem
if false
  
  filter = "^C:\\\\Windows$"
  filter = "^[[:alpha:]]:$"
  filter = "[root]"
  #filter = "^\/$"
  #filter = "c:\\windows\\"
  #filter = "C:\\"
  #filter = "/"
  
  puts "evidence.filesystem"
  res = http.request_get(URI.escape("/evidence/filesystem?target=4F86902a2afb6512a700006f&agent=5008225C2AFB654A4F003B9B&filter=#{filter}"), {'Cookie' => cookie})
  puts res.body
  puts
  
end

# license
if false
  # license.create
  content = File.open("rcs.lic", "rb") {|f| f.read}
  res = http.request_post('/license', content, {'Cookie' => cookie})
  puts "license.create"
  puts res.body
  puts
end

# symbian conf
if false
  # symbian.check
  res = http.request_post('/build/symbian_conf', nil, {'Cookie' => cookie})
  puts "symbian_conf.get"
  puts res.body
  puts

  uids = ["20030635","200305D7","20030633","20030634","200316ED","200305DB"]
  conf = {}
  conf[:key] = "pippo"
  conf[:uids] = uids
  res = http.request_post('/build/symbian_conf', conf.to_json, {'Cookie' => cookie})
  puts "symbian_conf.set"
  puts res.body
  puts


end

# public files
if false
  puts "frontend.index"
  res = http.request_get("/public", {'Cookie' => cookie})
  puts res.body
  puts
  
  #puts "frontend.delete"
  #res = http.delete("/public/4fd8a6d32afb650c14000005", {'Cookie' => cookie})
  #puts res.body
  #puts
  
end

# template
if false
  puts "template.index"
  res = http.request_get("/template", {'Cookie' => cookie})
  puts res.body
  puts
end

# filters
if false
  puts "fitler.index"
  res = http.request_get("/filter", {'Cookie' => cookie})
  puts res.body
  puts
=begin  
  puts "fitler.create"
  res = http.request_post("/filter", {name: "public", filter: "ciao"}.to_json, {'Cookie' => cookie})
  puts res.body
  puts

  puts "fitler.create"
  res = http.request_post("/filter", {name: "private", filter: "bau", private: true}.to_json, {'Cookie' => cookie})
  puts res.body
  puts
=end
  
end

# entities
if false
  puts "entity.index"
  res = http.request_get("/entity", {'Cookie' => cookie})
  puts res.body
  puts
=begin  
  entity = '50D19ACF2AFB65246B00000A'
  #entity = '50FD0AD7AEF1DE1658000092'
  entity2 = '50D19ACF2AFB65246B000038'
  
  puts "entity.show"
  res = http.request_get("/entity/#{entity}", {'Cookie' => cookie})
  ent = JSON.parse(res.body)
  puts JSON.pretty_generate(ent)
  puts

  puts "entity.show"
  res = http.request_get("/entity/#{entity2}", {'Cookie' => cookie})
  ent2 = JSON.parse(res.body)
  puts JSON.pretty_generate(ent2)
  puts

  puts "entity.most_contacted"
  filter = URI.escape("_id=#{entity2}&from=20130101&to=20131231&num=1")
  res = http.request_get("/entity/most_contacted?#{filter}", {'Cookie' => cookie})
  puts res.body
  puts
=end
  #puts "entity.add_link"
  #req = {_id: ent['_id'], entity: ent2['_id'], type: :identity, versus: :in}
  #res = http.request_post("/entity/add_link", req.to_json, {'Cookie' => cookie})
  #puts res.body
  #puts
  
  #puts "entity.del_link"
  #req = {_id: ent['_id'], entity: ent2['_id']}
  #res = http.request_post("/entity/del_link", req.to_json, {'Cookie' => cookie})
  #puts res.body
  #puts
  
end

if false
  puts "agent.blacklist"
  res = http.request_get('/agent/blacklist', {'Cookie' => cookie})
  puts res.body
  puts
end

# logout
res = http.request_post('/auth/logout', nil, {'Cookie' => cookie})
puts
puts "auth.logout"
puts res
puts