summaryrefslogtreecommitdiff
path: root/rbot/httputil.rb
diff options
context:
space:
mode:
Diffstat (limited to 'rbot/httputil.rb')
-rw-r--r--rbot/httputil.rb83
1 files changed, 83 insertions, 0 deletions
diff --git a/rbot/httputil.rb b/rbot/httputil.rb
new file mode 100644
index 00000000..000dcf98
--- /dev/null
+++ b/rbot/httputil.rb
@@ -0,0 +1,83 @@
+module Irc
+
+require 'net/http'
+Net::HTTP.version_1_2
+
+# class for making http requests easier (mainly for plugins to use)
+# this class can check the bot proxy configuration to determine if a proxy
+# needs to be used, which includes support for per-url proxy configuration.
+class HttpUtil
+ def initialize(bot)
+ @bot = bot
+ end
+
+ # uri:: Uri to create a proxy for
+ #
+ # return a net/http Proxy object, which is configured correctly for
+ # proxying based on the bot's proxy configuration.
+ # This will include per-url proxy configuration based on the bot config
+ # +http_proxy_include/exclude+ options.
+ def get_proxy(uri)
+ proxy = nil
+ if (ENV['http_proxy'])
+ proxy = URI.parse ENV['http_proxy']
+ end
+ if (@bot.config["http_proxy"])
+ proxy = URI.parse ENV['http_proxy']
+ end
+
+ # if http_proxy_include or http_proxy_exclude are set, then examine the
+ # uri to see if this is a proxied uri
+ if uri
+ if @bot.config["http_proxy_exclude"]
+ # TODO
+ end
+ if @bot.config["http_proxy_include"]
+ end
+ end
+
+ proxy_host = nil
+ proxy_port = nil
+ proxy_user = nil
+ proxy_pass = nil
+ if @bot.config["http_proxy_user"]
+ proxy_user = @bot.config["http_proxy_user"]
+ if @bot.config["http_proxy_pass"]
+ proxy_pass = @bot.config["http_proxy_pass"]
+ end
+ end
+ if proxy
+ proxy_host = proxy.host
+ proxy_port = proxy.port
+ end
+
+ return Net::HTTP.new(uri.host, uri.port, proxy_host, proxy_port, proxy_user, proxy_port)
+ end
+
+ # uri:: uri to query (Uri object)
+ # readtimeout:: timeout for reading the response
+ # opentimeout:: timeout for opening the connection
+ #
+ # simple get request, returns response body if the status code is 200 and
+ # the request doesn't timeout.
+ def get(uri, readtimeout=10, opentimeout=5)
+ proxy = get_proxy(uri)
+ proxy.open_timeout = opentimeout
+ proxy.read_timeout = readtimeout
+
+ begin
+ proxy.start() {|http|
+ resp = http.get(uri)
+ if resp.code == "200"
+ return resp.body
+ end
+ return nil
+ }
+ rescue StandardError, Timeout::Error => e
+ $stderr.puts "HttpUtil.get exception: #{e}, while trying to get #{uri}"
+ end
+ return nil
+ end
+end
+
+end