6 Commits
+96 -15
View File
@@ -4,20 +4,34 @@ require "validator"
output = "passed.txt" output = "passed.txt"
urlTimeout = 1 urlTimeout = 1
includes = ""
includesFlag = false
debug = false
quiet = false
OptionParser.parse do |parser| OptionParser.parse do |parser|
parser.banner = "Usage: rete [arguments] [file/urls]" parser.banner = "Usage: rete [arguments] [file/urls]"
parser.on("-i STRING", "--includes=STRING", "Checks to see if a successful response") {|string|
includes = string
includesFlag = true}
parser.on("-t TIMEOUT", "--timeout=TIMEOUT", "Sets how many seconds until rete declares a timeout") {|timeout| parser.on("-t TIMEOUT", "--timeout=TIMEOUT", "Sets how many seconds until rete declares a timeout") {|timeout|
urlTimeout = timeout} urlTimeout = timeout}
parser.on("-f FILE", "--file=FILE", "Checks all urls in a txt file.") { |file| parser.on("-f FILE", "--file=FILE", "Checks all urls in a txt file.") { |file|
urls = File.read(file) urls = File.read(file)
checkUrlFromFile urls, output, urlTimeout.to_i checkUrlFromFile urls, output, urlTimeout.to_i, includesFlag, includes, debug, quiet
exit 0} exit 0}
parser.on("-o FILENAME", "--output=FILENAME", "Sets the name of the outputted file. -f flag required") {|filename| parser.on("-o FILENAME", "--output=FILENAME", "Sets the name of the outputted file. -f flag required") {|filename|
output = filename} output = filename}
parser.on("-v", "--version", "Displays current version of rete.") { parser.on("-v", "--version", "Displays current version of rete") {
puts "Rete 1.0 by koffee.zip" puts "Rete 1.1 by koffee.zip"
exit(0)} exit(0)}
parser.on("-q", "--quiet", "Prints out less info") do
quiet = true
end
parser.on("-d", "--debug", "Debug Mode") do
debug = true
puts "Debug mode enabled!"
end
parser.on("-h", "--help", "Show this help") do parser.on("-h", "--help", "Show this help") do
puts parser puts parser
exit exit
@@ -29,7 +43,7 @@ OptionParser.parse do |parser|
end end
end end
def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method name. def checkUrlFromFile(content, output, urlTimeout, includesFlag, includes, debug, quiet) # Sorry for the crappy method name.
repeat = 0 repeat = 0
working = 0 working = 0
notWorking = 0 notWorking = 0
@@ -37,6 +51,12 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
begin begin
config = File.read("config.txt") config = File.read("config.txt")
if debug == true
puts "=============================="
puts "Current Config:"
puts config
puts "=============================="
end
rescue File::NotFoundError rescue File::NotFoundError
puts "Oh No! It seems that your config.txt file does not exist!" puts "Oh No! It seems that your config.txt file does not exist!"
puts "This is required for rete to know what classifies if a url is working or not!" puts "This is required for rete to know what classifies if a url is working or not!"
@@ -46,6 +66,10 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
urls = content.split("\n") urls = content.split("\n")
if quiet
print "\n"
end
while repeat < urls.size while repeat < urls.size
begin begin
validUrl = Valid.url? urls[repeat] validUrl = Valid.url? urls[repeat]
@@ -55,38 +79,73 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
if validUrl == true if validUrl == true
begin begin
STDIN.read_timeout = 1
uri = URI.parse(urls[repeat]) uri = URI.parse(urls[repeat])
client = HTTP::Client.new(uri) client = HTTP::Client.new(uri)
client.connect_timeout = urlTimeout.seconds client.connect_timeout = urlTimeout.seconds
response = client.get("/") response = client.get("/")
if config.includes?(response.status_code.to_s) if config.includes?(response.status_code.to_s)
puts "#{urls[repeat]} is a valid URL and works. Status code: #{response.status_code}" if debug == true
puts "=============================="
puts "First line of Response from URL:"
puts response.body.lines.first
puts "=============================="
end
if includesFlag
if response.body.includes?(includes)
if !quiet
puts "#{urls[repeat]} is a valid URL, works and includes \"#{includes}\" Status code: #{response.status_code}"
end
File.open("#{output}", "a") do |file|
file.puts urls[repeat]
end
working += 1
else
if !quiet
puts "#{urls[repeat]} is a valid URL, works but does not include \"#{includes}\" Status code: #{response.status_code}"
end
notWorking += 1
end
else
if !quiet
puts "#{urls[repeat]} is a valid URL and works. Status code: #{response.status_code}"
end
working += 1
File.open("#{output}", "a") do |file| File.open("#{output}", "a") do |file|
file.puts urls[repeat] file.puts urls[repeat]
end end
working += 1 end
else else
puts "#{urls[repeat]} is a valid URL but does not work. Status Code: #{response.status_code}" if !quiet
puts "#{urls[repeat]} is a valid URL but does not work. Status Code: #{response.status_code}"
end
notWorking += 1 notWorking += 1
end end
rescue rescue
puts "#{urls[repeat]} is a valid URL but does not exist." if !quiet
puts "#{urls[repeat]} is a valid URL but does not exist."
end
notWorking += 1 notWorking += 1
end end
else else
puts "#{urls[repeat]} is not a valid URL" if !quiet
puts "#{urls[repeat]} is not a valid URL."
end
notWorking += 1 notWorking += 1
end end
if quiet
print "\e[1A"
puts "#{repeat + 1}/#{urls.size} urls are done."
end
repeat += 1 repeat += 1
end end
puts "==============================" puts "=============================="
puts "Finished testing urls." puts "Finished testing urls."
puts "A total of #{repeat} url(s) were tested." puts "A total of #{urls.size} url(s) were tested."
puts "#{working}/#{repeat} url(s) were working." puts "#{working}/#{urls.size} url(s) were working."
puts "#{notWorking}/#{repeat} url(s) were not working." puts "#{notWorking}/#{urls.size} url(s) were not working."
exit 0 exit 0
end end
@@ -97,6 +156,12 @@ exist = true
begin begin
config = File.read("config.txt") config = File.read("config.txt")
if debug == true
puts "=============================="
puts "Current Config:"
puts config
puts "=============================="
end
rescue File::NotFoundError rescue File::NotFoundError
puts "Oh No! It seems that your config.txt file does not exist!" puts "Oh No! It seems that your config.txt file does not exist!"
puts "This is required for rete to know what classifies if a url is working or not!" puts "This is required for rete to know what classifies if a url is working or not!"
@@ -113,14 +178,30 @@ while repeat < ARGV.size
if validUrl == true if validUrl == true
begin begin
STDIN.read_timeout = 1
uri = URI.parse(ARGV[repeat]) uri = URI.parse(ARGV[repeat])
client = HTTP::Client.new(uri) client = HTTP::Client.new(uri)
client.connect_timeout = urlTimeout.to_i.seconds client.connect_timeout = urlTimeout.to_i.seconds
response = client.get("/") response = client.get("/")
if config.includes?(response.status_code.to_s) if config.includes?(response.status_code.to_s)
puts "#{ARGV[repeat]} is a valid URL and works. Status code: #{response.status_code}" if debug == true
puts "=============================="
puts "First line of Response from URL:"
puts response.body.lines.first
puts "=============================="
end
if includesFlag
if response.body.includes?(includes)
puts "#{ARGV[repeat]} is a valid URL, works and includes \"#{includes}\" Status code: #{response.status_code}"
working += 1
else
puts "#{ARGV[repeat]} is a valid URL, works but does not include \"#{includes}\" Status code: #{response.status_code}"
notWorking += 1
end
else
puts "#{ARGV[repeat]} is a valid URL and works. Status code: #{response.status_code}"
end
working += 1 working += 1
else else
puts "#{ARGV[repeat]} is a valid URL but does not work. Status Code: #{response.status_code}" puts "#{ARGV[repeat]} is a valid URL but does not work. Status Code: #{response.status_code}"