w4b-file 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 337ca12ca612c3698cb4143695c039f497b6ece29b4af1f60a6c3f6371d8c040
4
- data.tar.gz: 557204d4b1356a0a5da089db66f0201da542af3d589ce0f7e07bf2a16f7a7687
3
+ metadata.gz: 3b52d52d15b4fe0ac4a5153535db040e0b53d8b17a497d7404c54e8c7cb72090
4
+ data.tar.gz: c06dda2ee353bb0c284feeb5990f4c24e47d75382a166d3eca160670c4c5ef9f
5
5
  SHA512:
6
- metadata.gz: 72a66f05b021d4dd15b643946d7147c176adfb7addde5da9ea519ae0d1d3ab0f94cc5663c96ca1a1c976fbdc27f764f44110f940a3bfbc97ff84c19869ecc6c1
7
- data.tar.gz: 7530ee51f7916aa6a2544db03e8c77a4569886688b4f218971a54296ec6fcf538c0f78a51e9e955cc9a1f19f14387ae3906fce6f2831109748cdb9c18ac7fc56
6
+ metadata.gz: b5f3e689e5168ea855a40da42a6f412eb620e53206b447de4ac98ebca9709d16f23340c88824ba9ba0e33bcd958687a8102a6cbdac089be6cd65d6fdda31134c
7
+ data.tar.gz: '0802219fc1b1032e56669b5dfd02e2cfe593d2ba6a1779aa412b258701b02cb26b77954cdaa5d5b3b9014dceeddad8b269d44c682d1d44b86a309daf26e03db4'
data/bin/w4b-file CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
+ require_relative '../lib/w4b_file/cli'
2
3
 
3
- require_relative '../lib/w4b-file/cli'
4
-
5
- W4bFile::CLI.start
4
+ W4bFile::CLI.start(ARGV)
@@ -0,0 +1,177 @@
1
+ #!/bin/ruby
2
+ ############################################################################
3
+ # © 2023 Tony-Linux. All Rights Reserved. #
4
+ # For inquiries regarding this project, kindly reach out to: #
5
+ # Email: mrhunter5@proton.me #
6
+ # #
7
+ # This content is protected by copyright law and may not be replicated #
8
+ # or altered without the explicit written consent of the copyright #
9
+ # holder. #
10
+ ############################################################################
11
+
12
+ require 'uri'
13
+ require 'net/http'
14
+ require 'openssl'
15
+
16
+ module W4bFile
17
+ class CLI
18
+ def self.validate_and_sanitize_url(url)
19
+ uri = URI.parse(url)
20
+ return nil unless uri.scheme == 'http' || uri.scheme == 'https'
21
+
22
+ uri.to_s
23
+ end
24
+
25
+ def self.scan_website(url)
26
+ uri = URI.parse(url)
27
+ response = Net::HTTP.get_response(uri)
28
+
29
+ return [] unless response.is_a?(Net::HTTPSuccess)
30
+
31
+ response.body.scan(/href="([^"#]*)"|\ssrc="([^"#]*)"/).flatten.compact
32
+ end
33
+
34
+ def self.display_files(files, type, base_url)
35
+ return if files.empty?
36
+
37
+ puts "\e[37m [\e[32m+\e[37m]\e[32m #{type} files :"
38
+ files.each do |file|
39
+ display_url = URI.join(base_url, file).to_s
40
+ puts "\e[37m [\e[32m+\e[37m]\e[32m Link : #{display_url}"
41
+ end
42
+ puts
43
+ end
44
+
45
+ def self.scan_hidden_files(url)
46
+ uri = URI.parse(url)
47
+ http = Net::HTTP.new(uri.host, uri.port)
48
+ http.use_ssl = (uri.scheme == 'https')
49
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
50
+
51
+ request = Net::HTTP::Get.new(uri)
52
+ request['User-Agent'] = 'Googlebot'
53
+ response = http.request(request)
54
+
55
+ hidden_files = []
56
+ if response.is_a?(Net::HTTPSuccess)
57
+ response.body.scan(/href="([^"#]*)"/).flatten.compact.each do |file|
58
+ hidden_files << file if file.start_with?(".") || file.include?("/.")
59
+ end
60
+ end
61
+
62
+ hidden_files
63
+ end
64
+
65
+ def self.check_files(type, url)
66
+ resources = scan_website(url)
67
+ files = resources.grep(/\.(#{type})$/i)
68
+ display_files(files, type.upcase, url) if !files.empty?
69
+ files
70
+ end
71
+
72
+ def self.check_all_files(url)
73
+ resources = scan_website(url)
74
+ display_files(resources, "All", url) if !resources.empty?
75
+ resources
76
+ end
77
+
78
+ def self.run_checks(check_type, website_url)
79
+ case check_type
80
+ when "videos"
81
+ files_found = check_files("mp4|avi", website_url)
82
+ if files_found.empty?
83
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No video files found."
84
+ end
85
+ when "images"
86
+ files_found = check_files("jpg|jpeg|png", website_url)
87
+ if files_found.empty?
88
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No image files found."
89
+ end
90
+ when "zip"
91
+ files_found = check_files("zip", website_url)
92
+ if files_found.empty?
93
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No zip files found."
94
+ end
95
+ when "pdf"
96
+ files_found = check_files("pdf", website_url)
97
+ if files_found.empty?
98
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No PDF files found."
99
+ end
100
+ when "document"
101
+ files_found = check_files("doc|docx|txt", website_url)
102
+ if files_found.empty?
103
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No document files found."
104
+ end
105
+ when "--check hidden"
106
+ hidden_files = scan_hidden_files(website_url)
107
+ display_files(hidden_files, "Hidden", website_url) if !hidden_files.empty?
108
+ else
109
+ puts "\e[37m [\e[31m+\e[37m]\e[31m Invalid check type. Available options: videos, images, zip, pdf, document, --check hidden"
110
+ end
111
+ end
112
+
113
+ def self.start(argv)
114
+ website_url = argv[0]
115
+ check_type = argv[1]
116
+
117
+ if website_url.nil?
118
+ puts "w4b-file : is a powerful tool that scans sites for files. It finds file types and shows hidden files. Examples: PDFs, images, videos, or all site files.\nLINK : https://github.com/Tony-Linux/w4b-file\nUsage : w4b-file <website_url> [--check <file_type>]\n\nOptions:\n <website_url> The URL of the website to scan for files.\n --check <file_type> Specify the type of files to check (pdf, image, video, php, zip, doc, hidden).\n w4b-file <website_url> Check and display all files on the website.\n\nExamples:\n w4b-file https://example-url.co.vias --check pdf # Check all PDF files on the website.\n w4b-file https://example-url.co.vias --check image # Check all image files on the website.\n w4b-file https://example-url.co.vias --check zip # Check all ZIP files on the website.\n w4b-file https://example-url.co.vias --check document # Check all document files on the website.\n w4b-file https://example-url.co.vias --check videos # Check Video files on the website."
119
+ exit 1
120
+ end
121
+
122
+ website_url = validate_and_sanitize_url(website_url)
123
+ if website_url.nil?
124
+ puts "\e[37m [\e[31m+\e[37m]\e[31m Invalid URL format."
125
+ exit 1
126
+ end
127
+
128
+ if check_type == "--check"
129
+ file_type = argv[2]
130
+ run_checks(file_type, website_url) if file_type
131
+ elsif check_type == "--check all"
132
+ check_all_files(website_url)
133
+ elsif check_type == "--check hidden"
134
+ run_checks(check_type, website_url)
135
+ else
136
+ pdf_files = scan_website(website_url).grep(/\.pdf$/i)
137
+ image_files = scan_website(website_url).grep(/\.(jpg|jpeg|png)$/i)
138
+ video_files = scan_website(website_url).grep(/\.(mp4|avi)$/i)
139
+ php_files = scan_website(website_url).grep(/\.php$/i)
140
+ zip_files = scan_website(website_url).grep(/\.zip$/i)
141
+ doc_files = scan_website(website_url).grep(/\.(doc|docx|txt)$/i)
142
+
143
+ case check_type
144
+ when "images"
145
+ if image_files.empty?
146
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No image files found."
147
+ else
148
+ display_files(image_files, "Image", website_url)
149
+ end
150
+ when "pdf"
151
+ if pdf_files.empty?
152
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No PDF files found."
153
+ else
154
+ display_files(pdf_files, "PDF", website_url)
155
+ end
156
+ when "videos"
157
+ if video_files.empty?
158
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No video files found."
159
+ else
160
+ display_files(video_files, "Video", website_url)
161
+ end
162
+ else
163
+ display_files(image_files, "Image", website_url) if !image_files.empty?
164
+ display_files(pdf_files, "PDF", website_url) if !pdf_files.empty?
165
+ display_files(video_files, "Video", website_url) if !video_files.empty?
166
+ display_files(php_files, "PHP", website_url) if !php_files.empty?
167
+ display_files(zip_files, "ZIP", website_url) if !zip_files.empty?
168
+ display_files(doc_files, "Document", website_url) if !doc_files.empty?
169
+
170
+ if image_files.empty? && pdf_files.empty? && video_files.empty? && php_files.empty? && zip_files.empty? && doc_files.empty?
171
+ puts "\e[37m [\e[31m+\e[37m]\e[31m No files found."
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,3 @@
1
+ module W4bFile
2
+ VERSION = "0.1.0"
3
+ end
data/lib/w4b_file.rb ADDED
@@ -0,0 +1,2 @@
1
+ require_relative 'w4b_file/version'
2
+ require_relative 'w4b_file/cli'
data/w4b-file.gemspec CHANGED
@@ -3,7 +3,7 @@ lib = File.expand_path('lib', __dir__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'w4b-file'
6
- spec.version = '1.0.3'
6
+ spec.version = '1.0.4'
7
7
  spec.authors = ['MrFidal']
8
8
  spec.license = 'MIT'
9
9
  spec.required_ruby_version = '>= 3.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: w4b-file
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - MrFidal
@@ -51,6 +51,9 @@ files:
51
51
  - lib/w4b-file/cli.rb
52
52
  - lib/w4b-file/scanner.rb
53
53
  - lib/w4b-file/version.rb
54
+ - lib/w4b_file.rb
55
+ - lib/w4b_file/cli.rb
56
+ - lib/w4b_file/version.rb
54
57
  - w4b-file.gemspec
55
58
  homepage: https://github.com/Tony-Linux/w4b-file
56
59
  licenses: