summaryrefslogtreecommitdiff
path: root/lib/rbot/plugins/wserver.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbot/plugins/wserver.rb')
-rw-r--r--lib/rbot/plugins/wserver.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/rbot/plugins/wserver.rb b/lib/rbot/plugins/wserver.rb
new file mode 100644
index 00000000..e1fe10bd
--- /dev/null
+++ b/lib/rbot/plugins/wserver.rb
@@ -0,0 +1,75 @@
+require 'net/http'
+require 'uri'
+Net::HTTP.version_1_2
+
+class WserverPlugin < Plugin
+ def help(plugin, topic="")
+ "wserver <uri> => try and determine what webserver <uri> is using"
+ end
+ def privmsg(m)
+ unless(m.params && m.params =~ /^\S+$/)
+ m.reply "incorrect usage: " + help(m.plugins)
+ return
+ end
+
+ redirect_count = 0
+ hostname = m.params.dup
+ hostname = "http://#{hostname}" unless hostname =~ /:\/\//
+ begin
+ if(redirect_count > 3)
+ m.reply "cowardly refusing to follow more than 3 redirects"
+ return
+ end
+
+ begin
+ uri = URI.parse(hostname)
+ rescue URI::InvalidURIError => err
+ m.reply "#{m.params} is not a valid URI"
+ return
+ end
+
+ unless(uri)
+ m.reply "incorrect usage: " + help(m.plugin)
+ return
+ end
+
+ http = @bot.httputil.get_proxy(uri)
+ http.open_timeout = 5
+
+ http.start {|http|
+ resp = http.head('/')
+ server = resp['Server']
+ if(server && server.length > 0)
+ m.reply "#{uri.host} is running #{server}"
+ else
+ m.reply "couldn't tell what #{uri.host} is running"
+ end
+
+ if(resp.code == "302" || resp.code == "301")
+ newloc = resp['location']
+ newuri = URI.parse(newloc)
+ # detect and ignore incorrect redirects (to relative paths etc)
+ if (newuri.host != nil)
+ if(uri.host != newuri.host)
+ m.reply "#{uri.host} redirects to #{newuri.scheme}://#{newuri.host}"
+ raise resp['location']
+ end
+ end
+ end
+ }
+ rescue TimeoutError => err
+ m.reply "timed out connecting to #{uri.host}:#{uri.port} :("
+ return
+ rescue RuntimeError => err
+ redirect_count += 1
+ hostname = err.message
+ retry
+ rescue StandardError => err
+ puts err
+ m.reply "couldn't connect to #{uri.host}:#{uri.port} :("
+ return
+ end
+ end
+end
+plugin = WserverPlugin.new
+plugin.register("wserver")