summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias H <apoc@sixserv.org>2014-07-17 23:54:19 +0200
committerMatthias H <apoc@sixserv.org>2014-07-17 23:54:19 +0200
commitec56d8a5c3dd91da1f9ec1d9daf0fca8d1669810 (patch)
tree04850df0c1eb319b8aa137ecc281a2bcffe95b3d
parent836cf49c210ebfeb443861d26379a81b333c2c78 (diff)
[agent] add options for ssl and proxy
-rw-r--r--lib/rbot/core/utils/agent.rb44
1 files changed, 39 insertions, 5 deletions
diff --git a/lib/rbot/core/utils/agent.rb b/lib/rbot/core/utils/agent.rb
index fc73c288..8949a5c8 100644
--- a/lib/rbot/core/utils/agent.rb
+++ b/lib/rbot/core/utils/agent.rb
@@ -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