ronin-wordlists 0.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.document +4 -0
  3. data/.github/workflows/ruby.yml +43 -0
  4. data/.gitignore +14 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +18 -0
  7. data/.ruby-version +1 -0
  8. data/.yardopts +1 -0
  9. data/COPYING.txt +165 -0
  10. data/ChangeLog.md +10 -0
  11. data/Gemfile +37 -0
  12. data/README.md +180 -0
  13. data/Rakefile +45 -0
  14. data/bin/ronin-wordlists +34 -0
  15. data/data/completions/ronin-wordlists +107 -0
  16. data/data/completions/ronin-wordlists.yml +7 -0
  17. data/data/wordlists.yml +260 -0
  18. data/gemspec.yml +40 -0
  19. data/lib/ronin/wordlists/cache_dir.rb +257 -0
  20. data/lib/ronin/wordlists/cli/command.rb +40 -0
  21. data/lib/ronin/wordlists/cli/commands/completion.rb +61 -0
  22. data/lib/ronin/wordlists/cli/commands/download.rb +109 -0
  23. data/lib/ronin/wordlists/cli/commands/list.rb +79 -0
  24. data/lib/ronin/wordlists/cli/commands/purge.rb +60 -0
  25. data/lib/ronin/wordlists/cli/commands/remove.rb +74 -0
  26. data/lib/ronin/wordlists/cli/commands/search.rb +145 -0
  27. data/lib/ronin/wordlists/cli/commands/update.rb +98 -0
  28. data/lib/ronin/wordlists/cli/wordlist_dir_option.rb +64 -0
  29. data/lib/ronin/wordlists/cli/wordlist_index.rb +178 -0
  30. data/lib/ronin/wordlists/cli/wordlist_option.rb +66 -0
  31. data/lib/ronin/wordlists/cli.rb +56 -0
  32. data/lib/ronin/wordlists/exceptions.rb +47 -0
  33. data/lib/ronin/wordlists/mixin.rb +106 -0
  34. data/lib/ronin/wordlists/root.rb +28 -0
  35. data/lib/ronin/wordlists/search_paths.rb +153 -0
  36. data/lib/ronin/wordlists/version.rb +26 -0
  37. data/lib/ronin/wordlists/wordlist_dir.rb +194 -0
  38. data/lib/ronin/wordlists/wordlist_file.rb +141 -0
  39. data/lib/ronin/wordlists/wordlist_metadata.rb +43 -0
  40. data/lib/ronin/wordlists/wordlist_repo.rb +167 -0
  41. data/lib/ronin/wordlists.rb +96 -0
  42. data/man/ronin-wordlists-completion.1 +76 -0
  43. data/man/ronin-wordlists-completion.1.md +78 -0
  44. data/man/ronin-wordlists-download.1 +47 -0
  45. data/man/ronin-wordlists-download.1.md +48 -0
  46. data/man/ronin-wordlists-list.1 +42 -0
  47. data/man/ronin-wordlists-list.1.md +44 -0
  48. data/man/ronin-wordlists-purge.1 +39 -0
  49. data/man/ronin-wordlists-purge.1.md +39 -0
  50. data/man/ronin-wordlists-remove.1 +43 -0
  51. data/man/ronin-wordlists-remove.1.md +44 -0
  52. data/man/ronin-wordlists-search.1 +37 -0
  53. data/man/ronin-wordlists-search.1.md +37 -0
  54. data/man/ronin-wordlists-update.1 +43 -0
  55. data/man/ronin-wordlists-update.1.md +44 -0
  56. data/man/ronin-wordlists.1 +65 -0
  57. data/man/ronin-wordlists.1.md +64 -0
  58. data/ronin-wordlists.gemspec +62 -0
  59. data/scripts/setup +58 -0
  60. metadata +154 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ ronin-wordlists remove: &remove
3
+ - $(ronin-wordlists list)
4
+ ronin-wordlists rm: *remove
5
+ ronin-wordlists update: &update
6
+ - $(ronin-wordlists list)
7
+ ronin-wordlists up: *update
@@ -0,0 +1,260 @@
1
+ #
2
+ # YAML Schema
3
+ # ===========
4
+ #
5
+ # wordlist-name:
6
+ # :url: https://...
7
+ # :summary: ...
8
+ # :categories:
9
+ # - ...
10
+ # - ...
11
+ #
12
+ # Note: the wordlist's URL may be a regular `http://` or `https://` URL to a
13
+ # file, or a `https://` Git URL (ex: `https://github.com/foo/bar.git`).
14
+ #
15
+ ---
16
+ alexa-top-1000:
17
+ :url: https://github.com/urbanadventurer/WhatWeb/blob/master/plugin-development/alexa-top-1000.txt
18
+ :summary: The Alexa Top 1000 domain names.
19
+ :categories:
20
+ - dns
21
+ - domains
22
+
23
+ subdomains:
24
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains.txt
25
+ :summary: List of common subdomain names used by the dnscan util.
26
+ :categories:
27
+ - dns
28
+ - subdomains
29
+
30
+ subdomains-100:
31
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains-100.txt
32
+ :summary: Top 100 most common subdomain names used by the dnscan util.
33
+ :categories:
34
+ - dns
35
+ - subdomains
36
+
37
+ subdomains-500:
38
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains-500.txt
39
+ :summary: Top 500 most common subdomain names used by the dnscan util.
40
+ :categories:
41
+ - dns
42
+ - subdomains
43
+
44
+ subdomains-1000:
45
+ :url: https:/raw.githubusercontent./com/rbsec/dnscan/master/subdomains-1000.txt
46
+ :summary: Top 1000 most common subdomain names used by the dnscan util.
47
+ :categories:
48
+ - dns
49
+ - subdomains
50
+
51
+ subdomains-10000:
52
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains-10000.txt
53
+ :summary: Top 10000 most common subdomain names used by the dnscan util.
54
+ :categories:
55
+ - dns
56
+ - subdomains
57
+
58
+ subdomains-uk-500:
59
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains-uk-500.txt
60
+ :summary: Top 500 most common UK subdomain names used by the dnscan util.
61
+ :categories:
62
+ - dns
63
+ - subdomains
64
+
65
+ subdomains-uk-1000:
66
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/subdomains-uk-1000.txt
67
+ :summary: Top 1000 most common UK subdomain names used by the dnscan util.
68
+ :categories:
69
+ - dns
70
+ - subdomains
71
+
72
+ suffixes:
73
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/suffixes.txt
74
+ :summary: List of common domain suffixes used by the dnscan util.
75
+ :categories:
76
+ - dns
77
+ - public-suffixes
78
+
79
+ tlds:
80
+ :url: https://raw.githubusercontent.com/rbsec/dnscan/master/tlds.txt
81
+ :summary: List of common TLDs used by the dnscan util.
82
+ :categories:
83
+ - dns
84
+ - tlds
85
+
86
+ argon:
87
+ :url: http://www.mediafire.com/file/zd3zhzfezl9wd96/Argon_Wordlist_v2.gz
88
+ :summary: Really big password list.
89
+ :categories:
90
+ - passwords
91
+
92
+ hashes.org-2012-2015:
93
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2012-2015.7z
94
+ :summary: Hashes.org archive of passwords found in 2012 - 2015.
95
+ :categories:
96
+ - passwords
97
+
98
+ hashes.org-2016:
99
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2016.7z
100
+ :summary: Hashes.org archive of passwords found in 2016.
101
+ :categories:
102
+ - passwords
103
+
104
+ hashes.org-2017:
105
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2017.7z
106
+ :summary: Hashes.org archive of passwords found in 2017.
107
+ :categories:
108
+ - passwords
109
+
110
+ hashes.org-2018:
111
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2018.7z
112
+ :summary: Hashes.org archive of passwords found in 2018.
113
+ :categories:
114
+ - passwords
115
+
116
+ hashes.org-2019:
117
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2019.7z
118
+ :summary: Hashes.org archive of passwords found in 2019.
119
+ :categories:
120
+ - passwords
121
+
122
+ hashes.org-2020:
123
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2020.7z
124
+ :summary: Hashes.org archive of passwords found in 2020.
125
+ :categories:
126
+ - passwords
127
+
128
+ hashes.org-2021:
129
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashes.org-2021.txt
130
+ :summary: Hashes.org archive of passwords found in 2021.
131
+ :categories:
132
+ - passwords
133
+
134
+ hashkiller-dict:
135
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/hashkiller-dict.txt
136
+ :summary: Hashkiller dictionary from hashkiller.io.
137
+ :categories:
138
+ - passwords
139
+
140
+ DailyQuiz:
141
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/DailyQuiz.txt
142
+ :summary: Passwords from the DailyQuiz.me data breach.
143
+ :categories:
144
+ - passwords
145
+
146
+ LiveJournal:
147
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/LiveJournal.txt
148
+ :summary: Passwords from the LiveJournal.com data breach.
149
+ :categories:
150
+ - passwords
151
+
152
+ Top120Million-probable-WPA:
153
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/Top120Million-probable-WPA.txt
154
+ :summary: Old set of popular WPA passwords.
155
+ :categories:
156
+ - passwords
157
+ - wifi
158
+
159
+ zxcvbn:
160
+ :url: https://hashmob.net/api/v2/downloads/research/wordlists/zxcvbn.txt
161
+ :summary: Realistic weak passwords.
162
+ :categories:
163
+ - passwords
164
+
165
+ rockyou:
166
+ :url: https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
167
+ :summary: Common passwords list.
168
+ :categories:
169
+ - passwords
170
+
171
+ weakpass_3:
172
+ :url: https://download.weakpass.com/wordlists/1947/weakpass_3.7z
173
+ :summary: Updated Weakpass wordlist for general purpose.
174
+ :categories:
175
+ - passwords
176
+
177
+ weakpass_3w:
178
+ :url: https://download.weakpass.com/wordlists/1950/weakpass_3w.7z
179
+ :summary:
180
+ Same as weakpass_3p, but passwords length limited from 8 to 24 chars.
181
+ Specially for fast WI-FI cracking.
182
+ :categories:
183
+ - passwords
184
+ - wifi
185
+
186
+ weakpass_3p:
187
+ :url: https://download.weakpass.com/wordlists/1949/weakpass_3p.7z
188
+ :summary: Same as weakpass_3, but passwords contains only printalbe charsets.
189
+ :categories:
190
+ - passwords
191
+
192
+ weakpass_3a:
193
+ :url: https://download.weakpass.com/wordlists/1948/weakpass_3a.7z
194
+ :summary:
195
+ The most complete compilation of wordlist's - more than 1500 in one.
196
+ Contains near 8 billion of passwords with length from 4 to 25.
197
+ :categories:
198
+ - passwords
199
+
200
+ directory-list-2-3-medium:
201
+ :url: https://github.com/daviddias/node-dirbuster/raw/master/lists/directory-list-2.3-medium.txt
202
+ :summary: Common directory name wordlist used for dirbusting.
203
+ :categories:
204
+ - dirs
205
+
206
+ ws-dirs:
207
+ :url: https://raw.githubusercontent.com/3ndG4me/KaliLists/master/wfuzz/webservices/ws-dirs.txt
208
+ :summary: wfuzz webservices directories' wordlist.
209
+ :categories:
210
+ - dirs
211
+
212
+ ws-files:
213
+ :url: https://raw.githubusercontent.com/3ndG4me/KaliLists/master/wfuzz/webservices/ws-files.txt
214
+ :summary: wfuzz webservices files' wordlist.
215
+ :categories:
216
+ - files
217
+
218
+ xajkep-wordlists:
219
+ :url: https://github.com/xajkep/wordlists.git
220
+ :summary: xajkep's wordlists.
221
+ :categories:
222
+ - collection
223
+
224
+ SecLists:
225
+ :url: https://github.com/danielmiessler/SecLists.git
226
+ :summary: The SecLists repository of pentester wordlists.
227
+ :categories:
228
+ - collection
229
+
230
+ pry0cc:
231
+ :url: https://github.com/pry0cc/relevant-wordlist.git
232
+ :summary: Dynamically generated wordlists based off of news headlines.
233
+ :categories:
234
+ - collection
235
+
236
+ fuzzdb:
237
+ :url: https://github.com/fuzzdb-project/fuzzdb.git
238
+ :summary: FuzzDB repository of fuzzing wordlists.
239
+ :categories:
240
+ - collection
241
+ - fuzzing
242
+
243
+ kkrypt0nn:
244
+ :url: https://github.com/kkrypt0nn/wordlists.git
245
+ :summary: kkrypt0nn's collection of wordlists.
246
+ :categories:
247
+ - collection
248
+
249
+ trickest:
250
+ :url: https://github.com/trickest/wordlists.git
251
+ :summary: trickest's collection of wordlists.
252
+ :categories:
253
+ - collection
254
+
255
+ graphql-wordlist:
256
+ :url: https://github.com/Escape-Technologies/graphql-wordlist.git
257
+ :summary: GraphQL wordlists for Operations, field names, type names, etc.
258
+ :categories:
259
+ - collection
260
+ - graphql
data/gemspec.yml ADDED
@@ -0,0 +1,40 @@
1
+ name: ronin-wordlists
2
+ summary: A library and tool for managing wordlists.
3
+ description: |
4
+ ronin-wordlists is a library and tool for managing wordlists. ronin-wordlists
5
+ can install and update wordlists, and contains a curated list of popular
6
+ wordlists and their download URLs.
7
+
8
+ license: LGPL-3.0
9
+ authors: Postmodern
10
+ email: postmodern.mod3@gmail.com
11
+ homepage: https://ronin-rb.dev/
12
+ has_yard: true
13
+
14
+ metadata:
15
+ documentation_uri: https://ronin-rb.dev/docs/ronin-wordlists
16
+ source_code_uri: https://github.com/ronin-rb/ronin-wordlists
17
+ bug_tracker_uri: https://github.com/ronin-rb/ronin-wordlists/issues
18
+ changelog_uri: https://github.com/ronin-rb/ronin-wordlists/blob/main/ChangeLog.md
19
+ rubygems_mfa_required: 'true'
20
+
21
+ generated_files:
22
+ - data/completions/ronin-wordlists
23
+ - man/ronin-wordlists.1
24
+ - man/ronin-wordlists-search.1
25
+ - man/ronin-wordlists-completion.1
26
+ - man/ronin-wordlists-download.1
27
+ - man/ronin-wordlists-list.1
28
+ - man/ronin-wordlists-purge.1
29
+ - man/ronin-wordlists-remove.1
30
+ - man/ronin-wordlists-update.1
31
+
32
+ required_ruby_version: ">= 3.0.0"
33
+
34
+ dependencies:
35
+ wordlist: ~> 1.1
36
+ # Ronin dependencies:
37
+ ronin-core: ~> 0.2.0.rc1
38
+
39
+ development_dependencies:
40
+ bundler: ~> 2.0
@@ -0,0 +1,257 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # ronin-wordlists - A library and tool for managing wordlists.
4
+ #
5
+ # Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
6
+ #
7
+ # ronin-wordlists is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published
9
+ # by the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # ronin-wordlists is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with ronin-wordlists. If not, see <https://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ require 'ronin/wordlists/wordlist_dir'
22
+ require 'ronin/wordlists/exceptions'
23
+ require 'ronin/core/home'
24
+
25
+ require 'uri'
26
+ require 'yaml'
27
+ require 'yaml/store'
28
+ require 'fileutils'
29
+
30
+ module Ronin
31
+ module Wordlists
32
+ #
33
+ # Represents the cache directory.
34
+ #
35
+ # @api private
36
+ #
37
+ class CacheDir
38
+
39
+ include Enumerable
40
+
41
+ # The `~/.cache/ronin-wordlists/` directory where all repos are stored.
42
+ PATH = Core::Home.cache_dir('ronin-wordlists')
43
+
44
+ # The path to the cache directory.
45
+ #
46
+ # @return [String]
47
+ attr_reader :path
48
+
49
+ # The directory containing the downloaded wordlists.
50
+ #
51
+ # @return [WrodlistDir]
52
+ attr_reader :wordlist_dir
53
+
54
+ #
55
+ # Initializes the repository cache.
56
+ #
57
+ # @param [String] path
58
+ # The path to the repository cache directory.
59
+ #
60
+ def initialize(path=PATH)
61
+ @path = path
62
+
63
+ @manifest_file = File.join(@path,'manifest.yml')
64
+ @wordlist_dir = WordlistDir.new(File.join(@path,'wordlists'))
65
+
66
+ @manifest = load_manifest
67
+ end
68
+
69
+ # Mapping of wordlist `type:` values and their classes.
70
+ WORDLIST_TYPES = {
71
+ git: WordlistRepo,
72
+ file: WordlistFile
73
+ }
74
+
75
+ #
76
+ # Accesses a wordlist file or repository from the cache directory.
77
+ #
78
+ # @param [String] name
79
+ # The name of the wordlist file or repository.
80
+ #
81
+ # @return [WordlistRepo, WordlistFile]
82
+ # The wordlist file or repository.
83
+ #
84
+ # @raise [WordlistNotFound]
85
+ # No wordlist with the given name exists in the cache directory.
86
+ #
87
+ # @raise [InvalidManifestFile]
88
+ # The `~/.cache/ronin-wordlists/manifest.yml` file contained invalid
89
+ # YAML data.
90
+ #
91
+ def [](name)
92
+ unless (metadata = @manifest[name])
93
+ raise(WordlistNotFound,"wordlist not downloaded: #{name.inspect}")
94
+ end
95
+
96
+ type = metadata.fetch(:type) do
97
+ raise(InvalidManifestFile,"entry #{name.inspect} is missing a :type attribute")
98
+ end
99
+
100
+ url = metadata.fetch(:url) do
101
+ raise(InvalidManifestFile,"entry #{name.inspect} is missing a :url attribute")
102
+ end
103
+
104
+ filename = metadata.fetch(:filename) do
105
+ raise(InvalidManifestFile,"entry #{name.inspect} is missing a :filename attribute")
106
+ end
107
+
108
+ path = File.join(@wordlist_dir.path,filename)
109
+
110
+ wordlist_class = WORDLIST_TYPES.fetch(type) do
111
+ raise(InvalidManifestFile,"unsupported wordlist type: #{type.inspect}")
112
+ end
113
+
114
+ return wordlist_class.new(path, url: url)
115
+ end
116
+
117
+ #
118
+ # Enumerates over every wordlist in the cache directory.
119
+ #
120
+ # @yield [name, wordlist]
121
+ #
122
+ # @yieldparam [WordlistFile, WordlistRepo] wordlist
123
+ #
124
+ # @return [Enumerator]
125
+ # If no block is given an enumerator will be returned.
126
+ #
127
+ def each
128
+ return enum_for unless block_given?
129
+
130
+ @manifest.each_key do |name|
131
+ yield self[name]
132
+ end
133
+ end
134
+
135
+ #
136
+ # Lists the wordlists in the cache directory.
137
+ #
138
+ # @param [String] name
139
+ # Optional file name to search for.
140
+ #
141
+ # @return [Array<String>]
142
+ # The wordlist files within the wordlist directory.
143
+ #
144
+ def list(name='*')
145
+ @wordlist_dir.list(name)
146
+ end
147
+
148
+ #
149
+ # Opens a wordlist from the wordlist directory.
150
+ #
151
+ # @param [String] name
152
+ # The wordlist file name.
153
+ #
154
+ # @return [Wordlist::File]
155
+ # The opened wordlist file.
156
+ #
157
+ # @raise [WordlistNotFound]
158
+ # No wordlist with the given name.
159
+ #
160
+ def open(name)
161
+ @wordlist_dir.open(name)
162
+ end
163
+
164
+ #
165
+ # Downloads a wordlist into the cache directory.
166
+ #
167
+ # @param [String, URI::HTTP] url
168
+ # The wordlist URL.
169
+ #
170
+ # @return [WordlistFile, WordlistRepo]
171
+ # The newly downloaded wordlist or the previously downloaded wordlist.
172
+ #
173
+ def download(url)
174
+ wordlist = @wordlist_dir.download(url)
175
+
176
+ update_manifest do |manifest|
177
+ manifest[wordlist.name] = {
178
+ type: wordlist.type,
179
+ filename: wordlist.filename,
180
+ url: wordlist.url.to_s
181
+ }
182
+ end
183
+
184
+ return wordlist
185
+ end
186
+
187
+ #
188
+ # Updates the wordlists in the cache directory.
189
+ #
190
+ def update
191
+ each(&:update)
192
+ end
193
+
194
+ #
195
+ # Deletes a wordlist from the cache directory.
196
+ #
197
+ # @param [String] name
198
+ # The wordlist file or directory name to delete.
199
+ #
200
+ def remove(name)
201
+ wordlist = self[name]
202
+ wordlist.delete
203
+
204
+ update_manifest do |manifest|
205
+ manifest.delete(name)
206
+ end
207
+ end
208
+
209
+ #
210
+ # Purge all wordlists from the cache directory.
211
+ #
212
+ def purge
213
+ FileUtils.rm_rf(@path)
214
+ end
215
+
216
+ private
217
+
218
+ #
219
+ # Loads the manifest file.
220
+ #
221
+ # @return [Hash{String => Hash{Symbol => String}}]
222
+ #
223
+ def load_manifest
224
+ if File.file?(@manifest_file)
225
+ YAML.load_file(@manifest_file)
226
+ else
227
+ {}
228
+ end
229
+ end
230
+
231
+ #
232
+ # Updates both the {#manifest} and the `manifest.yml` file.
233
+ #
234
+ # @yield [manifest]
235
+ #
236
+ # @yieldparam [Hash] manifest
237
+ #
238
+ def update_manifest(&block)
239
+ yield @manifest
240
+ update_manifest_file(&block)
241
+ end
242
+
243
+ #
244
+ # Updates the `manifest.yml` file.
245
+ #
246
+ # @yield [manifest]
247
+ #
248
+ # @yieldparam [Hash] manifest
249
+ #
250
+ def update_manifest_file(&block)
251
+ manifest = YAML::Store.new(@manifest_file)
252
+ manifest.transaction(&block)
253
+ end
254
+
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # ronin-wordlists - A library and tool for managing wordlists.
4
+ #
5
+ # Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
6
+ #
7
+ # ronin-wordlists is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published
9
+ # by the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # ronin-wordlists is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with ronin-wordlists. If not, see <https://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ require 'ronin/wordlists/root'
22
+
23
+ require 'ronin/core/cli/command'
24
+
25
+ module Ronin
26
+ module Wordlists
27
+ class CLI
28
+ #
29
+ # Base class for all `ronin-wordlists` commands.
30
+ #
31
+ class Command < Core::CLI::Command
32
+
33
+ man_dir File.join(ROOT,'man')
34
+
35
+ bug_report_url 'https://github.com/ronin-rb/ronin-wordlists/issues/new'
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # ronin-wordlists - A library and tool for managing wordlists.
4
+ #
5
+ # Copyright (c) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
6
+ #
7
+ # ronin-wordlists is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published
9
+ # by the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # ronin-wordlists is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with ronin-wordlists. If not, see <https://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ require 'ronin/wordlists/root'
22
+ require 'ronin/core/cli/completion_command'
23
+
24
+ module Ronin
25
+ module Wordlists
26
+ class CLI
27
+ module Commands
28
+ #
29
+ # Manages the shell completion rules for `ronin-wordlists`.
30
+ #
31
+ # ## Usage
32
+ #
33
+ # ronin-wordlists completion [options]
34
+ #
35
+ # ## Options
36
+ #
37
+ # --print Prints the shell completion file
38
+ # --install Installs the shell completion file
39
+ # --uninstall Uninstalls the shell completion file
40
+ # -h, --help Print help information
41
+ #
42
+ # ## Examples
43
+ #
44
+ # ronin-wordlists completion --print
45
+ # ronin-wordlists completion --install
46
+ # ronin-wordlists completion --uninstall
47
+ #
48
+ class Completion < Core::CLI::CompletionCommand
49
+
50
+ completion_file File.join(ROOT,'data','completions','ronin-wordlists')
51
+
52
+ man_dir File.join(ROOT,'man')
53
+ man_page 'ronin-wordlists-completion.1'
54
+
55
+ description 'Manages the shell completion rules for ronin-wordlists'
56
+
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end