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,194 @@
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_file'
22
+ require 'ronin/wordlists/wordlist_repo'
23
+ require 'ronin/wordlists/exceptions'
24
+
25
+ require 'wordlist'
26
+
27
+ module Ronin
28
+ module Wordlists
29
+ #
30
+ # Represents a directory of wordlists.
31
+ #
32
+ # ## Example
33
+ #
34
+ # wordlist_dir = Wordlists::WordlistDir.new('/path/to/wordlists')
35
+ # wordlist_dir.find('passwords.txt')
36
+ # # => "/path/to/wordlists/passwords.txt"
37
+ # wordlist_dir.find('passwords')
38
+ # # => "/path/to/wordlists/passwords.txt"
39
+ # wordlist_dir.open('passwords.txt')
40
+ # # => #<Wordlist::File:...>
41
+ # wordlist_dir.open('passwords')
42
+ # # => #<Wordlist::File:...>
43
+ #
44
+ # @api public
45
+ #
46
+ class WordlistDir
47
+
48
+ # The path to the wordlist directory.
49
+ #
50
+ # @return [String]
51
+ attr_reader :path
52
+
53
+ #
54
+ # Initializes the wordlist directory.
55
+ #
56
+ # @param [String] path
57
+ # The path to the wordlist directory.
58
+ #
59
+ def initialize(path)
60
+ @path = path
61
+ end
62
+
63
+ #
64
+ # Enumerates over every wordlist in the wordlist directory.
65
+ #
66
+ # @yield [path]
67
+ # The given block will be passed each path to each wordlist.
68
+ #
69
+ # @yieldparam [String] path
70
+ # A path to a wordlist within the wordlist directory.
71
+ #
72
+ # @return [Enumerator]
73
+ # If no block is given, an Enumerator will be returned.
74
+ #
75
+ def each(&block)
76
+ return enum_for unless block
77
+
78
+ Dir.glob(File.join(@path,'**','*.{txt,gz,bz2,xz}'),&block)
79
+ end
80
+
81
+ #
82
+ # Looks up a wordlist within the wordlist directory.
83
+ #
84
+ # @param [String] name
85
+ # The wordlist file name.
86
+ #
87
+ # @return [String, nil]
88
+ # The path to the wordlist or `nil` if the wordlist could not be found.
89
+ #
90
+ # @example
91
+ # wordlist_dir.find('passwords.txt')
92
+ # # => "/path/to/wordlists/passwords.txt"
93
+ # wordlist_dir.find('passwords')
94
+ # # => "/path/to/wordlists/passwords.txt"
95
+ #
96
+ def find(name)
97
+ path = File.join(@path,name)
98
+
99
+ # check for an exact filename match first
100
+ if File.file?(path)
101
+ path
102
+ else
103
+ # fallback to search for the wordlist file by name
104
+ Dir.glob(File.join(@path,'**',"#{name}.{txt,gz,bz2,xz}")).first
105
+ end
106
+ end
107
+
108
+ #
109
+ # Lists the wordlists in the wordlist directory.
110
+ #
111
+ # @param [String] name
112
+ # Optional file name to search for.
113
+ #
114
+ # @return [Array<String>]
115
+ # The wordlist files within the wordlist directory.
116
+ #
117
+ def list(name='*')
118
+ Dir.glob("{**/}#{name}.{txt,gz,bz2,xz}", base: @path)
119
+ end
120
+
121
+ #
122
+ # Opens a wordlist from the wordlist directory.
123
+ #
124
+ # @param [String] name
125
+ # The wordlist file name.
126
+ #
127
+ # @return [Wordlist::File]
128
+ # The opened wordlist file.
129
+ #
130
+ # @raise [WordlistNotFound]
131
+ # No wordlist with the given name.
132
+ #
133
+ # @example
134
+ # wordlist_dir.open('passwords.txt')
135
+ # # => #<Wordlist::File:...>
136
+ # wordlist_dir.open('passwords')
137
+ # # => #<Wordlist::File:...>
138
+ #
139
+ def open(name)
140
+ if (path = find(name))
141
+ Wordlist.open(path)
142
+ else
143
+ raise(WordlistNotFound,"wordlist not found: #{name.inspect}")
144
+ end
145
+ end
146
+
147
+ #
148
+ # Downloads a wordlist from the given URL into the wordlist directory.
149
+ #
150
+ # @param [String, URI::HTTP] url
151
+ # The URL of the wordlist to downloaded.
152
+ #
153
+ # @return [WordlistFile, WordlistRepo]
154
+ # The downloaded wordlist. A {WordlistRepo} will be returned for git
155
+ # URLs and {WordlistFile} for `http://` or `https://` URLs.
156
+ #
157
+ # @raise [DownloadFailed]
158
+ # The download of the wordlist file or repository failed.
159
+ #
160
+ def download(url)
161
+ uri = URI(url)
162
+
163
+ wordlist_class = if uri.scheme == 'git' || uri.path.end_with?('.git')
164
+ WordlistRepo
165
+ else
166
+ WordlistFile
167
+ end
168
+
169
+ FileUtils.mkdir_p(@path)
170
+ return wordlist_class.download(url,@path)
171
+ end
172
+
173
+ #
174
+ # Deletes a wordlist file from the wordlist directory.
175
+ #
176
+ # @param [String] name
177
+ # The wordlist name to delete.
178
+ #
179
+ # @raise [ArgumentError]
180
+ # No wordlist with the given name.
181
+ #
182
+ def delete(name)
183
+ if (path = find(name))
184
+ File.unlink(path)
185
+
186
+ return path
187
+ else
188
+ raise(WordlistNotFound,"unknown wordlist: #{name.inspect}")
189
+ end
190
+ end
191
+
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,141 @@
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_metadata'
22
+ require 'ronin/wordlists/exceptions'
23
+ require 'ronin/core/system'
24
+
25
+ require 'net/https'
26
+ require 'uri'
27
+
28
+ module Ronin
29
+ module Wordlists
30
+ #
31
+ # Represents a wordlist file.
32
+ #
33
+ class WordlistFile
34
+
35
+ include WordlistMetadata
36
+
37
+ # The path to the wordlist file.
38
+ #
39
+ # @return [String]
40
+ attr_reader :path
41
+
42
+ # The name of the wordlist file.
43
+ #
44
+ # @return [String]
45
+ attr_reader :name
46
+
47
+ #
48
+ # Initializes the wordlist file.
49
+ #
50
+ # @param [String] path
51
+ # The path to the wordlist file.
52
+ #
53
+ # @param [Hash{Symbol => Object}] kwargs
54
+ # Additional metadata keyword arguments for
55
+ # {WordlistMetadata#initialize}.
56
+ #
57
+ # @option kwargs [String, nil] :url
58
+ # The optional URL for the wordlist file.
59
+ #
60
+ def initialize(path,**kwargs)
61
+ super(**kwargs)
62
+
63
+ @path = path
64
+ @name = File.basename(@path,File.extname(@path))
65
+ end
66
+
67
+ #
68
+ # Downloads a remote wordlist file.
69
+ #
70
+ # @param [String, URI::HTTP] url
71
+ # The `http://` or `https://` URL for the wordlist file.
72
+ #
73
+ # @param [String] dest
74
+ # The directory to download the wordlist file into.
75
+ #
76
+ # @raise [DownloadFailed]
77
+ # Failed to download the wordlist file.
78
+ #
79
+ # @return [WordlistFile]
80
+ # The wordlist file.
81
+ #
82
+ def self.download(url,dest=Dir.pwd)
83
+ dest_path = begin
84
+ Core::System.download(url,dest)
85
+ rescue Core::System::DownloadFailed => error
86
+ raise(DownloadFailed,error.message)
87
+ end
88
+
89
+ return new(dest_path, url: url.to_s)
90
+ end
91
+
92
+ #
93
+ # The wordlist type.
94
+ #
95
+ # @return [:file]
96
+ #
97
+ def type
98
+ :file
99
+ end
100
+
101
+ #
102
+ # The name of the wordlist file.
103
+ #
104
+ # @return [String]
105
+ #
106
+ def filename
107
+ File.basename(@path)
108
+ end
109
+
110
+ #
111
+ # Updates the wordlist file, if {#url} is set.
112
+ #
113
+ # @raise [DownloadFailed]
114
+ # Failed to download the wordlist.
115
+ #
116
+ def update
117
+ if @url
118
+ self.class.download(@url,@path)
119
+ end
120
+ end
121
+
122
+ #
123
+ # Deletes the wordlist file.
124
+ #
125
+ def delete
126
+ File.unlink(@path)
127
+ end
128
+
129
+ #
130
+ # Converts the wordlist file to a String.
131
+ #
132
+ # @return [String]
133
+ # The wordlist file's path.
134
+ #
135
+ def to_s
136
+ @path
137
+ end
138
+
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,43 @@
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
+ module Ronin
22
+ module Wordlists
23
+ #
24
+ # Common wordlist metadata attributes.
25
+ #
26
+ module WordlistMetadata
27
+ # The optional URL for the wordlist.
28
+ #
29
+ # @return [String, nil]
30
+ attr_reader :url
31
+
32
+ #
33
+ # Initializes the wordlist metadata attributes.
34
+ #
35
+ # @param [String, nil] url
36
+ # The optional URL of the wordlist.
37
+ #
38
+ def initialize(url: nil)
39
+ @url = url
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,167 @@
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_metadata'
22
+ require 'ronin/wordlists/exceptions'
23
+
24
+ require 'fileutils'
25
+ require 'uri'
26
+
27
+ module Ronin
28
+ module Wordlists
29
+ #
30
+ # Represents a git repository of wordlists.
31
+ #
32
+ class WordlistRepo
33
+
34
+ include WordlistMetadata
35
+
36
+ # The path to the wordlist repository.
37
+ #
38
+ # @return [String]
39
+ attr_reader :path
40
+
41
+ # The name of the wordlist repository.
42
+ #
43
+ # @return [String]
44
+ attr_reader :name
45
+
46
+ #
47
+ # Initializes the wordlist repository.
48
+ #
49
+ # @param [String] path
50
+ # The path to the wordlist repository.
51
+ #
52
+ # @param [Hash{Symbol => Object}] kwargs
53
+ # Additional metadata keyword arguments for
54
+ # {WordlistMetadata#initialize}.
55
+ #
56
+ # @option kwargs [String, nil] :url
57
+ # The optional URL of the wordlist repository.
58
+ # If no URL is given, {#url} will infer it from the git repository.
59
+ #
60
+ def initialize(path,**kwargs)
61
+ super(**kwargs)
62
+
63
+ @path = path
64
+ @name = File.basename(@path)
65
+ end
66
+
67
+ #
68
+ # Clones a wordlist repository from the given git URL.
69
+ #
70
+ # @param [String, URI::HTTP] url
71
+ # The git URL for the wordlist repository.
72
+ #
73
+ # @param [String] dest_dir
74
+ # The directory to clone the wordlist repository into.
75
+ #
76
+ # @return [WordlistRepo]
77
+ # The newly cloned wordlist repository.
78
+ #
79
+ # @raise [DownloadFailed]
80
+ # The `git clone --depth 1` command failed or `git` was not installed on
81
+ # the system.
82
+ #
83
+ def self.download(url,dest_dir=Dir.pwd)
84
+ uri = URI(url)
85
+ url = url.to_s
86
+ repo_name = File.basename(uri.path,'.git')
87
+ repo_path = File.join(dest_dir,repo_name)
88
+
89
+ case system('git','clone','--depth','1','--',url,repo_path)
90
+ when true
91
+ new(repo_path, url: url)
92
+ when false
93
+ raise(DownloadFailed,"git command failed: git clone --depth 1 -- #{url} #{repo_path}")
94
+ when nil
95
+ raise(DownloadFailed,"git is not installed on the system")
96
+ end
97
+ end
98
+
99
+ #
100
+ # The wordlist type.
101
+ #
102
+ # @return [:git]
103
+ #
104
+ def type
105
+ :git
106
+ end
107
+
108
+ #
109
+ # Determines if the wordlist repository uses Git.
110
+ #
111
+ # @return [Boolean]
112
+ #
113
+ def git?
114
+ File.directory?(File.join(@path,'.git'))
115
+ end
116
+
117
+ #
118
+ # The name of the wordlist repository directory.
119
+ #
120
+ # @return [String]
121
+ #
122
+ def filename
123
+ File.basename(@path)
124
+ end
125
+
126
+ #
127
+ # The URL of the wordlist repository.
128
+ #
129
+ # @return [String, nil]
130
+ #
131
+ def url
132
+ @url ||= if git?
133
+ Dir.chdir(@path) do
134
+ `git config --get remote.origin.url`.chomp
135
+ end
136
+ end
137
+ end
138
+
139
+ #
140
+ # Updates the wordlist repository.
141
+ #
142
+ # @raise [DownloadFailed]
143
+ # The `git pull -C` command failed or `git` was not installed on the
144
+ # system.
145
+ #
146
+ def update
147
+ if git?
148
+ case system('git','pull','-C',@path)
149
+ when true then true
150
+ when false
151
+ raise(DownloadFailed,"git command failed: git pull -C #{@path}")
152
+ when nil
153
+ raise(DownloadFailed,"git is not installed on the system")
154
+ end
155
+ end
156
+ end
157
+
158
+ #
159
+ # Deletes the wordlist repository.
160
+ #
161
+ def delete
162
+ FileUtils.rm_rf(@path)
163
+ end
164
+
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,96 @@
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/cache_dir'
22
+ require 'ronin/wordlists/search_paths'
23
+
24
+ module Ronin
25
+ #
26
+ # Top-level methods for `ronin-wordlists`.
27
+ #
28
+ module Wordlists
29
+ @cache_dir = CacheDir.new
30
+ @search_paths = SearchPaths[
31
+ @cache_dir.wordlist_dir.path,
32
+ '/usr/local/share/wordlists',
33
+ '/usr/share/wordlists'
34
+ ]
35
+
36
+ #
37
+ # Downloads a new wordlist.
38
+ #
39
+ # @param [String, URI::HTTP] url
40
+ # The URL of the wordlist to download.
41
+ #
42
+ # @api public
43
+ #
44
+ def self.download(url)
45
+ @cache_dir.download(url)
46
+ end
47
+
48
+ #
49
+ # Finds a wordlist.
50
+ #
51
+ # @param [String] name
52
+ # The wordlist file name.
53
+ #
54
+ # @return [String, nil]
55
+ # The path to the wordlist file.
56
+ #
57
+ # @api public
58
+ #
59
+ def self.find(name)
60
+ @search_paths.find(name)
61
+ end
62
+
63
+ #
64
+ # Lists all wordlists on the system.
65
+ #
66
+ # @param [String] pattern
67
+ # Optional glob pattern to search for within the wordlist directory.
68
+ #
69
+ # @return [Set<String>]
70
+ # The wordlist files within the wordlist directories.
71
+ #
72
+ # @api public
73
+ #
74
+ def self.list(pattern='*')
75
+ @search_paths.list(pattern)
76
+ end
77
+
78
+ #
79
+ # Opens a wordlist.
80
+ #
81
+ # @param [String] name
82
+ # The wordlist file name.
83
+ #
84
+ # @return [Wordlist::File]
85
+ # The opened wordlist file.
86
+ #
87
+ # @raise [WordlistNotFound]
88
+ # No wordlist with the given name.
89
+ #
90
+ # @api public
91
+ #
92
+ def self.open(name)
93
+ @search_paths.open(name)
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,76 @@
1
+ .\" Generated by kramdown-man 1.0.1
2
+ .\" https://github.com/postmodern/kramdown-man#readme
3
+ .TH ronin-wordlists-completion 1 "2024-01-01" Ronin Wordlists "User Manuals"
4
+ .SH NAME
5
+ .PP
6
+ ronin\-wordlists\-completion \- Manages shell completion rules for \fBronin\-wordlists\fR
7
+ .SH SYNOPSIS
8
+ .PP
9
+ \fBronin\-wordlists completion\fR \[lB]\fIoptions\fP\[rB]
10
+ .SH DESCRIPTION
11
+ .PP
12
+ The \fBronin\-wordlists completion\fR command can print, install, or uninstall shell
13
+ completion rules for the \fBronin\-wordlists\fR command\.
14
+ .PP
15
+ Supports installing completion rules for Bash or Zsh shells\.
16
+ Completion rules for the Fish shell is currently not supported\.
17
+ .SS ZSH SUPPORT
18
+ .PP
19
+ Zsh users will have to add the following lines to their \fB\[ti]\[sl]\.zshrc\fR file in
20
+ order to enable Zsh\[cq]s Bash completion compatibility layer:
21
+ .PP
22
+ .RS 4
23
+ .EX
24
+ autoload \-Uz \[pl]X compinit && compinit
25
+ autoload \-Uz \[pl]X bashcompinit && bashcompinit
26
+ .EE
27
+ .RE
28
+ .SH OPTIONS
29
+ .TP
30
+ \fB\-\-print\fR
31
+ Prints the shell completion file\.
32
+ .TP
33
+ \fB\-\-install\fR
34
+ Installs the shell completion file\.
35
+ .TP
36
+ \fB\-\-uninstall\fR
37
+ Uninstalls the shell completion file\.
38
+ .TP
39
+ \fB\-h\fR, \fB\-\-help\fR
40
+ Prints help information\.
41
+ .SH ENVIRONMENT
42
+ .TP
43
+ \fIPREFIX\fP
44
+ Specifies the root prefix for the file system\.
45
+ .TP
46
+ \fIHOME\fP
47
+ Specifies the home directory of the user\. Ronin will search for the
48
+ \fB\[ti]\[sl]\.cache\[sl]ronin\-wordlists\fR cache directory within the home directory\.
49
+ .TP
50
+ \fIXDG\[ru]DATA\[ru]HOME\fP
51
+ Specifies the data directory to use\. Defaults to \fB\[Do]HOME\[sl]\.local\[sl]share\fR\.
52
+ .SH FILES
53
+ .TP
54
+ \fB\[ti]\[sl]\.local\[sl]share\[sl]bash\-completion\[sl]completions\[sl]\fR
55
+ The user\-local installation directory for Bash completion files\.
56
+ .TP
57
+ \fB\[sl]usr\[sl]local\[sl]share\[sl]bash\-completion\[sl]completions\[sl]\fR
58
+ The system\-wide installation directory for Bash completions files\.
59
+ .TP
60
+ \fB\[sl]usr\[sl]local\[sl]share\[sl]zsh\[sl]site\-functions\[sl]\fR
61
+ The installation directory for Zsh completion files\.
62
+ .SH EXAMPLES
63
+ .TP
64
+ \fBronin\-wordlists completion \-\-print\fR
65
+ Prints the shell completion rules instead of installing them\.
66
+ .TP
67
+ \fBronin\-wordlists completion \-\-install\fR
68
+ Installs the shell completion rules for \fBronin\-wordlists\fR\.
69
+ .TP
70
+ \fBronin\-wordlists completion \-\-uninstall\fR
71
+ Uninstalls the shell completion rules for \fBronin\-wordlists\fR\.
72
+ .SH AUTHOR
73
+ .PP
74
+ Postmodern
75
+ .MT postmodern\.mod3\[at]gmail\.com
76
+ .ME