]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
[agent] add options for ssl and proxy
authorMatthias H <apoc@sixserv.org>
Thu, 17 Jul 2014 21:54:19 +0000 (23:54 +0200)
committerMatthias H <apoc@sixserv.org>
Thu, 17 Jul 2014 21:54:19 +0000 (23:54 +0200)
lib/rbot/core/utils/agent.rb

index fc73c288ed7eeadd27131ecba9a0e8ab546e4944..8949a5c83ffcdf7c217c9ec63aa3e32e0c46a44b 100644 (file)
@@ -6,12 +6,18 @@
 #
 # Author:: Matthias Hecker <apoc@sixserv.org>
 #
-# Central repository for Mechanize agent instances, creates
-# pre-configured agents, allows for persistent caching,
-# cookie and page serialization.
+# Central factory for Mechanize agent instances, creates
+# pre-configured agents. The main goal of this is to have
+# central proxy and user agent configuration for mechanize.
+#
+# plugins can just call @bot.agent.create to return
+# a new unique mechanize agent.
 
 require 'mechanize'
 
+require 'digest/md5'
+require 'uri'
+
 module ::Irc
 module Utils
 
@@ -19,6 +25,24 @@ class AgentFactory
   Bot::Config.register Bot::Config::IntegerValue.new('agent.max_redir',
     :default => 5,
     :desc => "Maximum number of redirections to be used when getting a document")
+  Bot::Config.register Bot::Config::BooleanValue.new('agent.ssl_verify',
+    :default => true,
+    :desc => "Whether or not you want to validate SSL certificates")
+  Bot::Config.register Bot::Config::BooleanValue.new('agent.proxy_use',
+    :default => true,
+    :desc => "Use HTTP proxy or not")
+  Bot::Config.register Bot::Config::StringValue.new('agent.proxy_host',
+    :default => '127.0.0.1',
+    :desc => "HTTP proxy hostname")
+  Bot::Config.register Bot::Config::IntegerValue.new('agent.proxy_port',
+    :default => 8118,
+    :desc => "HTTP proxy port")
+  Bot::Config.register Bot::Config::StringValue.new('agent.proxy_username',
+    :default => nil,
+    :desc => "HTTP proxy username")
+  Bot::Config.register Bot::Config::StringValue.new('agent.proxy_password',
+    :default => nil,
+    :desc => "HTTP proxy password")
 
   def initialize(bot)
     @bot = bot
@@ -28,10 +52,20 @@ class AgentFactory
   end
 
   # Returns a new, unique instance of Mechanize.
-  def get_instance
+  def create(noproxy=false)
     agent = Mechanize.new
     agent.redirection_limit = @bot.config['agent.max_redir']
-
+    if not @bot.config['agent.ssl_verify']
+      agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
+    end
+    if @bot.config['agent.proxy_use'] and not noproxy
+      agent.set_proxy(
+        @bot.config['agent.proxy_host'],
+        @bot.config['agent.proxy_port'],
+        @bot.config['agent.proxy_username'],
+        @bot.config['agent.proxy_password']
+      )
+    end
     agent
   end
 end