6 Commits
+96 -15
View File
@@ -4,20 +4,34 @@ require "validator"
output = "passed.txt"
urlTimeout = 1
includes = ""
includesFlag = false
debug = false
quiet = false
OptionParser.parse do |parser|
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|
urlTimeout = timeout}
parser.on("-f FILE", "--file=FILE", "Checks all urls in a txt file.") { |file|
urls = File.read(file)
checkUrlFromFile urls, output, urlTimeout.to_i
checkUrlFromFile urls, output, urlTimeout.to_i, includesFlag, includes, debug, quiet
exit 0}
parser.on("-o FILENAME", "--output=FILENAME", "Sets the name of the outputted file. -f flag required") {|filename|
output = filename}
parser.on("-v", "--version", "Displays current version of rete.") {
puts "Rete 1.0 by koffee.zip"
parser.on("-v", "--version", "Displays current version of rete") {
puts "Rete 1.1 by koffee.zip"
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
puts parser
exit
@@ -29,7 +43,7 @@ OptionParser.parse do |parser|
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
working = 0
notWorking = 0
@@ -37,6 +51,12 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
begin
config = File.read("config.txt")
if debug == true
puts "=============================="
puts "Current Config:"
puts config
puts "=============================="
end
rescue File::NotFoundError
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!"
@@ -46,6 +66,10 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
urls = content.split("\n")
if quiet
print "\n"
end
while repeat < urls.size
begin
validUrl = Valid.url? urls[repeat]
@@ -55,38 +79,73 @@ def checkUrlFromFile(content, output, urlTimeout) # Sorry for the crappy method
if validUrl == true
begin
STDIN.read_timeout = 1
uri = URI.parse(urls[repeat])
client = HTTP::Client.new(uri)
client.connect_timeout = urlTimeout.seconds
response = client.get("/")
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.puts urls[repeat]
end
working += 1
end
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
end
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
end
else
puts "#{urls[repeat]} is not a valid URL"
if !quiet
puts "#{urls[repeat]} is not a valid URL."
end
notWorking += 1
end
if quiet
print "\e[1A"
puts "#{repeat + 1}/#{urls.size} urls are done."
end
repeat += 1
end
puts "=============================="
puts "Finished testing urls."
puts "A total of #{repeat} url(s) were tested."
puts "#{working}/#{repeat} url(s) were working."
puts "#{notWorking}/#{repeat} url(s) were not working."
puts "A total of #{urls.size} url(s) were tested."
puts "#{working}/#{urls.size} url(s) were working."
puts "#{notWorking}/#{urls.size} url(s) were not working."
exit 0
end
@@ -97,6 +156,12 @@ exist = true
begin
config = File.read("config.txt")
if debug == true
puts "=============================="
puts "Current Config:"
puts config
puts "=============================="
end
rescue File::NotFoundError
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!"
@@ -113,14 +178,30 @@ while repeat < ARGV.size
if validUrl == true
begin
STDIN.read_timeout = 1
uri = URI.parse(ARGV[repeat])
client = HTTP::Client.new(uri)
client.connect_timeout = urlTimeout.to_i.seconds
response = client.get("/")
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
else
puts "#{ARGV[repeat]} is a valid URL but does not work. Status Code: #{response.status_code}"