deadfinder 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a2e86be2607ea1af0d52ca1ed57055869cb457d58aa0b3773154d8de15f7a08
4
- data.tar.gz: ffb4fa247f7f388c9e5f71144f8b9728118627feead5159380bac65d2af4420f
3
+ metadata.gz: 3dd7587737b26129d64fcd4887eb39041b8abb27c4b8e1a6c125c7c128b77fb3
4
+ data.tar.gz: cf6b6dd2b663df8ffe3aaae9810deb39be18a15957f0b37cb3f70f7584bfb39d
5
5
  SHA512:
6
- metadata.gz: 237f99c06741f5b509af6ede98be469e20d9a60f7be2a5d615568eb7707686a40998ee49ce41143cb6af72beb3fe181ad9cebaed114d11f7a8e9408b3fd54fee
7
- data.tar.gz: 8cfd465a45ae8b4646e82810e4aa595c809a44a11107c0845f06e11a2eddeee394bb8e01b53a412f33b13bc05aaca49bd0a890ed6a702138d3b7b327634712f1
6
+ metadata.gz: 79df6bc3e4f38da2ceda5f4704dbb69f5bb11af7b0e1637096e930c929ed065f2811ca879956ef9819f8a4afde342eb49757d5fb7bd05124d6fffd5aae0cd64e
7
+ data.tar.gz: 263eeae2ebaa5e4eceee0182ca1721f8d51936b3921060180cfb7efa2422e5f8f3b78f6eebc83d01214ffec83b1f6bd14ae7f79ad3e9b34306b19bef3f6f0826
@@ -2,20 +2,20 @@
2
2
 
3
3
  require 'colorize'
4
4
 
5
- class Logger
6
- def self.info text
7
- puts "".colorize(:blue) + "#{text}".colorize(:light_blue)
8
- end
5
+ class Logger
6
+ def self.info(text)
7
+ puts ''.colorize(:blue) + text.to_s.colorize(:light_blue)
8
+ end
9
9
 
10
- def self.target text
11
- puts "".colorize(:green) + "#{text}".colorize(:light_green)
12
- end
10
+ def self.target(text)
11
+ puts ''.colorize(:green) + text.to_s.colorize(:light_green)
12
+ end
13
13
 
14
- def self.sub_info text
15
- puts "".colorize(:blue) + "#{text}".colorize(:light_blue)
16
- end
14
+ def self.sub_info(text)
15
+ puts ''.colorize(:blue) + text.to_s.colorize(:light_blue)
16
+ end
17
17
 
18
- def self.found text
19
- puts " ✘ #{text}".colorize(:red)
20
- end
21
- end
18
+ def self.found(text)
19
+ puts " ✘ #{text}".colorize(:red)
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ VERSION = '1.1.0'
data/lib/deadfinder.rb CHANGED
@@ -6,13 +6,14 @@ require 'open-uri'
6
6
  require 'nokogiri'
7
7
  require 'deadfinder/utils'
8
8
  require 'deadfinder/logger'
9
+ require 'deadfinder/version'
9
10
  require 'concurrent-edge'
10
11
  require 'sitemap-parser'
11
12
 
12
13
  Channel = Concurrent::Channel
13
14
 
14
15
  class DeadFinderRunner
15
- def run(target)
16
+ def run(target, options)
16
17
  page = Nokogiri::HTML(URI.open(target))
17
18
  nodeset = page.css('a')
18
19
  link_a = nodeset.map { |element| element['href'] }.compact
@@ -22,7 +23,7 @@ class DeadFinderRunner
22
23
  jobs = Channel.new(buffer: :buffered, capacity: 100)
23
24
  results = Channel.new(buffer: :buffered, capacity: 100)
24
25
 
25
- (1..20).each do |w|
26
+ (1..options['concurrency']).each do |w|
26
27
  Channel.go { worker(w, jobs, results) }
27
28
  end
28
29
 
@@ -32,78 +33,82 @@ class DeadFinderRunner
32
33
  end
33
34
  jobs.close
34
35
 
35
- (1..link_a.uniq.length).each do
36
+ (1..link_a.uniq.length).each do
36
37
  ~results
37
38
  end
38
39
  Logger.sub_info 'Done'
39
40
  end
40
41
 
41
- def worker(id, jobs, results)
42
+ def worker(_id, jobs, results)
42
43
  jobs.each do |j|
43
44
  begin
44
45
  URI.open(j)
45
- rescue => exception
46
- if exception.to_s.include? '404 Not Found'
47
- Logger.found "[#{exception}] #{j}"
48
- end
49
- end
46
+ rescue StandardError => e
47
+ Logger.found "[#{e}] #{j}" if e.to_s.include? '404 Not Found'
48
+ end
50
49
  results << j
51
50
  end
52
51
  end
53
52
  end
54
53
 
55
- def run_pipe
54
+ def run_pipe(options)
56
55
  app = DeadFinderRunner.new
57
56
  while $stdin.gets
58
57
  target = $LAST_READ_LINE.gsub("\n", '')
59
- app.run target
58
+ app.run target, options
60
59
  end
61
60
  end
62
61
 
63
- def run_file(filename)
62
+ def run_file(filename,options)
64
63
  app = DeadFinderRunner.new
65
64
  File.open(filename).each do |line|
66
65
  target = line.gsub("\n", '')
67
- app.run target
66
+ app.run target, options
68
67
  end
69
68
  end
70
69
 
71
- def run_url(url)
70
+ def run_url(url,options)
72
71
  app = DeadFinderRunner.new
73
- app.run url
72
+ app.run url, options
74
73
  end
75
74
 
76
- def run_sitemap(sitemap_url)
75
+ def run_sitemap(sitemap_url,options)
77
76
  app = DeadFinderRunner.new
78
- sitemap = SitemapParser.new sitemap_url, {recurse: true}
77
+ sitemap = SitemapParser.new sitemap_url, { recurse: true }
79
78
  sitemap.to_a.each do |url|
80
- app.run url
79
+ app.run url, options
81
80
  end
82
81
  end
83
82
 
84
83
  class DeadFinder < Thor
85
-
84
+ class_option :concurrency, aliases: :c, default: 20, type: :numeric
85
+
86
86
  desc 'pipe', 'Scan the URLs from STDIN. (e.g cat urls.txt | deadfinder pipe)'
87
87
  def pipe
88
88
  Logger.info 'Pipe mode'
89
- run_pipe
89
+ run_pipe options
90
90
  end
91
91
 
92
92
  desc 'file', 'Scan the URLs from File. (e.g deadfinder file urls.txt)'
93
93
  def file(filename)
94
94
  Logger.info 'File mode'
95
- run_file filename
95
+ run_file filename, options
96
96
  end
97
97
 
98
98
  desc 'url', 'Scan the Single URL.'
99
99
  def url(url)
100
100
  Logger.info 'Single URL mode'
101
- run_url url
101
+ run_url url, options
102
102
  end
103
103
 
104
104
  desc 'sitemap', 'Scan the URLs from sitemap.'
105
105
  def sitemap(sitemap)
106
106
  Logger.info 'Sitemap mode'
107
- run_sitemap sitemap
107
+ run_sitemap sitemap, options
108
+ end
109
+
110
+ desc 'version', 'Show version.'
111
+ def version
112
+ Logger.info "deadfinder #{VERSION}"
108
113
  end
109
114
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deadfinder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hahwul
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-24 00:00:00.000000000 Z
11
+ date: 2022-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Find dead-links (broken links)
14
14
  email: hahwul@gmail.com
@@ -21,11 +21,13 @@ files:
21
21
  - lib/deadfinder.rb
22
22
  - lib/deadfinder/logger.rb
23
23
  - lib/deadfinder/utils.rb
24
+ - lib/deadfinder/version.rb
24
25
  homepage: https://www.hahwul.com
25
26
  licenses:
26
27
  - MIT
27
28
  metadata:
28
29
  rubygems_mfa_required: 'true'
30
+ source_code_uri: https://github.com/hahwul/deadfinder
29
31
  post_install_message:
30
32
  rdoc_options: []
31
33
  require_paths: