You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

  1. #!/usr/bin/env ruby
  2. require 'httparty'
  3. require 'uri'
  4. allowed_codes = [200, 302, 403]
  5. args = ARGV
  6. filename = args[0]
  7. fail_flag = false
  8. contents = File.open(filename, 'rb') { |f| f.read }
  9. raw_links = URI.extract(contents, ['http', 'https'])
  10. # Remove trailing ')' from entry URLs
  11. links = []
  12. raw_links.each do |link|
  13. if link.end_with?(')')
  14. links.push(link[0...-1])
  15. else
  16. links.push(link)
  17. end
  18. end
  19. fails = []
  20. # Fail on any duplicate elements
  21. dup = links.select{|element| links.count(element) > 1}
  22. if dup.uniq.length > 0
  23. dup.uniq.each do |e|
  24. fails.push("Duplicate link: #{e}")
  25. end
  26. fail_flag = true
  27. end
  28. # Remove any duplicates from array
  29. links = links.uniq
  30. count = 0
  31. total = links.length
  32. # GET each link and check for valid response code from allowed_codes
  33. links.each do |link|
  34. begin
  35. count += 1
  36. puts "(#{count}/#{total}) #{link}"
  37. res = HTTParty.get(link, timeout: 10)
  38. if !allowed_codes.include?(res.code)
  39. fails.push("(#{res.code}): #{link}")
  40. fail_flag = true
  41. else
  42. puts "\t(#{res.code})"
  43. end
  44. rescue
  45. puts "FAIL: (#{res.code}) #{link}"
  46. fails.push("(#{res.code}): #{link}")
  47. fail_flag = true
  48. end
  49. end
  50. if fails.length <= 0
  51. puts "all links valid"
  52. else
  53. puts "-- RESULTS --"
  54. end
  55. fails.each do |e|
  56. puts e
  57. end
  58. if fail_flag
  59. exit(1)
  60. else
  61. exit(0)
  62. end