deadfinder 1.1.2 → 1.2.1

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: 1e08daa4368e4c3e041e642f1708619637ea618c2937c6e36f2aba841f152ec4
4
- data.tar.gz: 5162fb9eb973b7638ece6bcac4e6b2c731f3a6bd654f842f1aeeeed286cee4ed
3
+ metadata.gz: cccf1eac41e7cb13f5391bd8191931b6225f3b16dd23a2e4432816d93730be2e
4
+ data.tar.gz: dddb0d51bc6b00507ae8622945114d373e7366714a74ebc4ede95057db1224f2
5
5
  SHA512:
6
- metadata.gz: aa82c3b87b81f8f5293819dbd0e242e57e7fda14fe8820197aa4e32d6c774ea0c379adda7ef49e88865fc00f32cb5cce36c6fae711ac019e2d5be921e1747d65
7
- data.tar.gz: 952de90ed7b150e106fe33ec203140c162f2f74c941400328fc3da9c41866111f940043b53d9560903fdb822337ff8973bfc70740ad937cdc04428e5598e37fb
6
+ metadata.gz: d273d3d94cce7a98185dfda1713b43ddf632b19b11bff3f93c1c68bdbf3306c65825411b95f2b4ab3a517bfb88ca3db2f888a4b4a84814058a030b7c62098a0c
7
+ data.tar.gz: ca7d125f5c7a89275672418546e6913af1765bdc0eaaa8ce324be94c24e4b84989df9ec4fae371d6a4a7a160c97be47db2633b8de04be0eb98dfdc4ea2009978
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- VERSION = '1.1.2'
3
+ VERSION = '1.2.1'
data/lib/deadfinder.rb CHANGED
@@ -10,10 +10,12 @@ require 'deadfinder/version'
10
10
  require 'concurrent-edge'
11
11
  require 'sitemap-parser'
12
12
  require 'set'
13
+ require 'json'
13
14
 
14
15
  Channel = Concurrent::Channel
15
16
  CacheSet = Set.new
16
17
  CacheQue = {}
18
+ Output = {}
17
19
 
18
20
  class DeadFinderRunner
19
21
  def run(target, options)
@@ -27,7 +29,7 @@ class DeadFinderRunner
27
29
  link_link = nodeset_link.map { |element| element['href'] }.compact
28
30
 
29
31
  link_merged = []
30
- link_merged = link_merged.concat link_a, link_script, link_link
32
+ link_merged.concat link_a, link_script, link_link
31
33
 
32
34
  Logger.target target
33
35
  Logger.sub_info "Found #{link_merged.length} point. [a:#{link_a.length}/s:#{link_script.length}/l:#{link_link.length}]"
@@ -36,7 +38,7 @@ class DeadFinderRunner
36
38
  results = Channel.new(buffer: :buffered, capacity: 1000)
37
39
 
38
40
  (1..options['concurrency']).each do |w|
39
- Channel.go { worker(w, jobs, results, options) }
41
+ Channel.go { worker(w, jobs, results, target, options) }
40
42
  end
41
43
 
42
44
  link_a.uniq.each do |node|
@@ -51,24 +53,25 @@ class DeadFinderRunner
51
53
  Logger.sub_done 'Done'
52
54
  end
53
55
 
54
- def worker(_id, jobs, results, options)
56
+ def worker(_id, jobs, results, target, options)
55
57
  jobs.each do |j|
56
58
  if !CacheSet.include? j
57
59
  CacheSet.add j
58
60
  begin
59
61
  CacheQue[j] = true
60
- URI.open(j, :read_timeout => options['timeout'])
62
+ URI.open(j, read_timeout: options['timeout'])
61
63
  rescue StandardError => e
62
- Logger.found "[#{e}] #{j}" if e.to_s.include? '404 Not Found'
63
- CacheQue[j] = false
64
+ if e.to_s.include? '404 Not Found'
65
+ Logger.found "[#{e}] #{j}"
66
+ CacheQue[j] = false
67
+ Output[target] = [] if Output[target].nil?
68
+ Output[target].push j
69
+ end
64
70
  end
65
- results << j
66
- else
67
- if !CacheQue[j]
68
- Logger.found "[404 Not Found] #{j}"
69
- end
70
- results << j
71
+ elsif !CacheQue[j]
72
+ Logger.found "[404 Not Found] #{j}"
71
73
  end
74
+ results << j
72
75
  end
73
76
  end
74
77
  end
@@ -79,6 +82,7 @@ def run_pipe(options)
79
82
  target = $LAST_READ_LINE.gsub("\n", '')
80
83
  app.run target, options
81
84
  end
85
+ gen_output
82
86
  end
83
87
 
84
88
  def run_file(filename, options)
@@ -87,11 +91,13 @@ def run_file(filename, options)
87
91
  target = line.gsub("\n", '')
88
92
  app.run target, options
89
93
  end
94
+ gen_output
90
95
  end
91
96
 
92
97
  def run_url(url, options)
93
98
  app = DeadFinderRunner.new
94
99
  app.run url, options
100
+ gen_output
95
101
  end
96
102
 
97
103
  def run_sitemap(sitemap_url, options)
@@ -100,11 +106,17 @@ def run_sitemap(sitemap_url, options)
100
106
  sitemap.to_a.each do |url|
101
107
  app.run url, options
102
108
  end
109
+ gen_output
110
+ end
111
+
112
+ def gen_output
113
+ File.write options['output'], Output.to_json if options['output'] != ''
103
114
  end
104
115
 
105
116
  class DeadFinder < Thor
106
- class_option :concurrency, aliases: :c, default: 20, type: :numeric
107
- class_option :timeout, aliases: :t, default: 10, type: :numeric
117
+ class_option :concurrency, aliases: :c, default: 20, type: :numeric, desc: 'Set Concurrncy'
118
+ class_option :timeout, aliases: :t, default: 10, type: :numeric, desc: 'Set HTTP Timeout'
119
+ class_option :output, aliases: :o, default: '', type: :string, desc: 'Save JSON Result'
108
120
 
109
121
  desc 'pipe', 'Scan the URLs from STDIN. (e.g cat urls.txt | deadfinder pipe)'
110
122
  def pipe
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deadfinder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - hahwul
@@ -94,9 +94,37 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.2.0
97
- description: Dead link (broken link) means a link within a web page that cannot be
98
- connected. These links can have a security negative impact with SEO. This tool makes
99
- it easy to identify and modify.
97
+ - !ruby/object:Gem::Dependency
98
+ name: set
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: json
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 2.6.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.6.0
125
+ description: Find dead-links (broken links). Dead link (broken link) means a link
126
+ within a web page that cannot be connected. These links can have a negative impact
127
+ to SEO and Security. This tool makes it easy to identify and modify.
100
128
  email: hahwul@gmail.com
101
129
  executables:
102
130
  - deadfinder