ronin-repos 0.1.0 → 0.2.0.rc1
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 +4 -4
- data/.document +0 -1
- data/.github/workflows/ruby.yml +16 -1
- data/.gitignore +1 -0
- data/.rubocop.yml +21 -0
- data/ChangeLog.md +28 -1
- data/Gemfile +11 -5
- data/README.md +19 -5
- data/Rakefile +12 -2
- data/bin/ronin-repos +6 -7
- data/data/completions/ronin-repos +139 -0
- data/data/completions/ronin-repos.yml +10 -0
- data/data/templates/repo/README.md.erb +1 -1
- data/gemspec.yml +11 -2
- data/lib/ronin/repos/cache_dir.rb +6 -7
- data/lib/ronin/repos/class_dir.rb +21 -14
- data/lib/ronin/repos/cli/command.rb +5 -3
- data/lib/ronin/repos/cli/commands/completion.rb +61 -0
- data/lib/ronin/repos/cli/commands/install.rb +7 -3
- data/lib/ronin/repos/cli/commands/list.rb +15 -18
- data/lib/ronin/repos/cli/commands/new.rb +7 -3
- data/lib/ronin/repos/cli/commands/purge.rb +17 -2
- data/lib/ronin/repos/cli/commands/remove.rb +1 -1
- data/lib/ronin/repos/cli/commands/show.rb +93 -0
- data/lib/ronin/repos/cli/commands/update.rb +2 -2
- data/lib/ronin/repos/cli.rb +5 -4
- data/lib/ronin/repos/exceptions.rb +4 -4
- data/lib/ronin/repos/repository.rb +33 -4
- data/lib/ronin/repos/root.rb +1 -1
- data/lib/ronin/repos/version.rb +2 -2
- data/lib/ronin/repos.rb +19 -5
- data/man/ronin-repos-completion.1 +76 -0
- data/man/ronin-repos-completion.1.md +78 -0
- data/man/ronin-repos-install.1 +27 -37
- data/man/ronin-repos-install.1.md +22 -15
- data/man/ronin-repos-list.1 +27 -33
- data/man/ronin-repos-list.1.md +22 -15
- data/man/ronin-repos-new.1 +17 -18
- data/man/ronin-repos-new.1.md +34 -0
- data/man/ronin-repos-purge.1 +26 -33
- data/man/ronin-repos-purge.1.md +20 -13
- data/man/ronin-repos-remove.1 +23 -35
- data/man/ronin-repos-remove.1.md +18 -14
- data/man/ronin-repos-show.1 +48 -0
- data/man/ronin-repos-show.1.md +48 -0
- data/man/ronin-repos-update.1 +26 -36
- data/man/ronin-repos-update.1.md +22 -15
- data/man/ronin-repos.1 +43 -31
- data/man/ronin-repos.1.md +35 -11
- data/ronin-repos.gemspec +4 -3
- data/scripts/setup +58 -0
- metadata +19 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b43c676948f9c9db4f57ccea422578e0704a9d7fb1514753b7493fa6e199c27f
|
4
|
+
data.tar.gz: 5fb086f975e9f32d318ecffea62277b925637e7cb1ae5a0489bee86be5fcc052
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a91bc01c3266d23b53f27270537fafe9d2c71db686f83e13aac733ac8fc5ee23a18c2c5c4b736ca42297baff252fe376ef5560c9eae1f99c6a41a024213f8ea
|
7
|
+
data.tar.gz: 85450d4e6c41a38b7272d440f95d0fad05bb8cd3bad14e7ded9e10f6348f22d789c86abc562febb6b63bc008669debf497c150d16cccc725f65c331f9de4becc
|
data/.document
CHANGED
data/.github/workflows/ruby.yml
CHANGED
@@ -12,11 +12,12 @@ jobs:
|
|
12
12
|
- '3.0'
|
13
13
|
- '3.1'
|
14
14
|
- '3.2'
|
15
|
+
- '3.3'
|
15
16
|
- jruby
|
16
17
|
- truffleruby
|
17
18
|
name: Ruby ${{ matrix.ruby }}
|
18
19
|
steps:
|
19
|
-
- uses: actions/checkout@
|
20
|
+
- uses: actions/checkout@v4
|
20
21
|
- name: Set up Ruby
|
21
22
|
uses: ruby/setup-ruby@v1
|
22
23
|
with:
|
@@ -26,3 +27,17 @@ jobs:
|
|
26
27
|
run: bundle install --jobs 4 --retry 3
|
27
28
|
- name: Run tests
|
28
29
|
run: bundle exec rake test
|
30
|
+
|
31
|
+
# rubocop linting
|
32
|
+
rubocop:
|
33
|
+
runs-on: ubuntu-latest
|
34
|
+
steps:
|
35
|
+
- uses: actions/checkout@v4
|
36
|
+
- name: Set up Ruby
|
37
|
+
uses: ruby/setup-ruby@v1
|
38
|
+
with:
|
39
|
+
ruby-version: 3.0
|
40
|
+
- name: Install dependencies
|
41
|
+
run: bundle install --jobs 4 --retry 3
|
42
|
+
- name: Run rubocop
|
43
|
+
run: bundle exec rubocop --parallel
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
SuggestExtensions: false
|
4
|
+
TargetRubyVersion: 3.1
|
5
|
+
|
6
|
+
inherit_gem:
|
7
|
+
rubocop-ronin: rubocop.yml
|
8
|
+
|
9
|
+
#
|
10
|
+
# ronin-repos specific exceptions
|
11
|
+
#
|
12
|
+
|
13
|
+
Lint/EmptyFile:
|
14
|
+
Exclude:
|
15
|
+
- 'spec/fixtures/class_dir/file1.rb'
|
16
|
+
- 'spec/fixtures/class_dir/file2.rb'
|
17
|
+
- 'spec/fixtures/class_dir/only_in_class_dir.rb'
|
18
|
+
|
19
|
+
Style/MapIntoArray:
|
20
|
+
Exclude:
|
21
|
+
- 'spec/cache_dir_spec.rb'
|
data/ChangeLog.md
CHANGED
@@ -1,4 +1,31 @@
|
|
1
|
-
### 0.
|
1
|
+
### 0.2.0 / 2024-XX-XX
|
2
|
+
|
3
|
+
* Added {Ronin::Repos::Repository#url}.
|
4
|
+
* Added {Ronin::Repos::Repository#last_updated_at}.
|
5
|
+
* Added {Ronin::Repos.cache_dir}.
|
6
|
+
|
7
|
+
#### CLI
|
8
|
+
|
9
|
+
* Added the `ronin-repos show` command.
|
10
|
+
* Changed `ronin-repos list` to fuzzy match repo names.
|
11
|
+
* Changed `ronin-repos new` to also create empty `exploits/`, `payloads/`,
|
12
|
+
`recon/`, and `brute/`.
|
13
|
+
* Added the `ronin-repos completion` command to install shell completion files
|
14
|
+
for all `ronin-repos` commands for Bash and Zsh shells.
|
15
|
+
|
16
|
+
### 0.1.1 / 2023-06-09
|
17
|
+
|
18
|
+
* Fixed a bug in {Ronin::Repos::ClassDir::ClassMethods#list_files} where the
|
19
|
+
{Ronin::Repos::ClassDir::ClassMethods#repo_class_dir repo_class_dir} was not
|
20
|
+
being removed from paths.
|
21
|
+
* Documentation fixes and improvements.
|
22
|
+
|
23
|
+
#### CLI
|
24
|
+
|
25
|
+
* Multiple bug fixes to the `ronin-repos install` command.
|
26
|
+
* Add missing man-page for the `ronin-repos new` command.
|
27
|
+
|
28
|
+
### 0.1.0 / 2023-02-01
|
2
29
|
|
3
30
|
* Initial release:
|
4
31
|
* Supports installing any [Git][git] repository.
|
data/Gemfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
gemspec
|
@@ -7,10 +9,10 @@ platform :jruby do
|
|
7
9
|
end
|
8
10
|
|
9
11
|
# Ronin dependencies:
|
10
|
-
# gem 'ronin-core', '~> 0.
|
12
|
+
# gem 'ronin-core', '~> 0.2', github: 'ronin-rb/ronin-core',
|
11
13
|
# branch: 'main'
|
12
14
|
|
13
|
-
# gem 'command_kit', '~> 0.
|
15
|
+
# gem 'command_kit', '~> 0.5', github: 'postmodern/command_kit.rb',
|
14
16
|
# branch: 'main'
|
15
17
|
|
16
18
|
group :development do
|
@@ -20,13 +22,17 @@ group :development do
|
|
20
22
|
gem 'simplecov', '~> 0.20'
|
21
23
|
|
22
24
|
gem 'kramdown', '~> 2.0'
|
23
|
-
gem 'kramdown-man', '~> 0
|
25
|
+
gem 'kramdown-man', '~> 1.0'
|
24
26
|
|
25
27
|
gem 'redcarpet', platform: :mri
|
26
28
|
gem 'yard', '~> 0.9'
|
27
29
|
gem 'yard-spellcheck', require: false
|
28
30
|
|
29
31
|
gem 'dead_end', require: false
|
30
|
-
gem 'sord', require: false,
|
31
|
-
gem 'stackprof', require: false,
|
32
|
+
gem 'sord', require: false, platform: :mri
|
33
|
+
gem 'stackprof', require: false, platform: :mri
|
34
|
+
gem 'rubocop', require: false, platform: :mri
|
35
|
+
gem 'rubocop-ronin', require: false, platform: :mri
|
36
|
+
|
37
|
+
gem 'command_kit-completion', '~> 0.2', require: false
|
32
38
|
end
|
data/README.md
CHANGED
@@ -9,13 +9,23 @@
|
|
9
9
|
* [Issues](https://github.com/ronin-rb/ronin-repos/issues)
|
10
10
|
* [Documentation](https://ronin-rb.dev/docs/ronin-repos/frames)
|
11
11
|
* [Discord](https://discord.gg/6WAb3PsVX9) |
|
12
|
-
[Twitter](https://twitter.com/ronin_rb) |
|
13
12
|
[Mastodon](https://infosec.exchange/@ronin_rb)
|
14
13
|
|
15
14
|
## Description
|
16
15
|
|
17
16
|
ronin-repos provides a repository system for installing, managing, and accessing
|
18
|
-
third-party git repositories,
|
17
|
+
third-party git repositories, that can contain additional Ruby code or other
|
18
|
+
data.
|
19
|
+
|
20
|
+
Third-party git repositories can be used to extend parts of Ronin. Other Ronin
|
21
|
+
libraries can then list and load additional third-party Ruby classes from
|
22
|
+
specific directories within the installed third-party repos:
|
23
|
+
|
24
|
+
* `exploits/` - may contain additional exploits for [ronin-exploits].
|
25
|
+
* `payloads/` - may contain additional payloads for [ronin-payloads].
|
26
|
+
|
27
|
+
**tl;dr** ronin-repos is essentially a decentralized plugin system for Ronin
|
28
|
+
using git repos.
|
19
29
|
|
20
30
|
ronin-repos is part of the [ronin-rb] project, a toolkit for security research
|
21
31
|
and development.
|
@@ -40,12 +50,14 @@ Arguments:
|
|
40
50
|
[ARGS ...] Additional arguments for the command
|
41
51
|
|
42
52
|
Commands:
|
53
|
+
completion
|
43
54
|
help
|
44
55
|
install
|
45
56
|
list, ls
|
46
57
|
new
|
47
58
|
purge
|
48
59
|
remove, rm
|
60
|
+
show, info
|
49
61
|
update, up
|
50
62
|
```
|
51
63
|
|
@@ -111,7 +123,7 @@ Rnnin::Repos.glob("wordlists/*.txt")
|
|
111
123
|
## Requirements
|
112
124
|
|
113
125
|
* [Ruby] >= 3.0.0
|
114
|
-
* [ronin-core] ~> 0.
|
126
|
+
* [ronin-core] ~> 0.2
|
115
127
|
|
116
128
|
## Install
|
117
129
|
|
@@ -130,7 +142,7 @@ gem 'ronin-repos', '~> 0.1'
|
|
130
142
|
1. [Fork It!](https://github.com/ronin-rb/ronin-repos/fork)
|
131
143
|
2. Clone It!
|
132
144
|
3. `cd ronin-repos`
|
133
|
-
4. `
|
145
|
+
4. `./scripts/server`
|
134
146
|
5. `git checkout -b my_feature`
|
135
147
|
6. Code It!
|
136
148
|
7. `bundle exec rake spec`
|
@@ -138,7 +150,7 @@ gem 'ronin-repos', '~> 0.1'
|
|
138
150
|
|
139
151
|
## License
|
140
152
|
|
141
|
-
Copyright (c) 2021-
|
153
|
+
Copyright (c) 2021-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
142
154
|
|
143
155
|
ronin-repos is free software: you can redistribute it and/or modify
|
144
156
|
it under the terms of the GNU Lesser General Public License as published
|
@@ -158,3 +170,5 @@ along with ronin-repos. If not, see <https://www.gnu.org/licenses/>.
|
|
158
170
|
[Ruby]: https://www.ruby-lang.org
|
159
171
|
[git]: https://git-scm.com/
|
160
172
|
[ronin-core]: https://github.com/ronin-rb/ronin-core#readme
|
173
|
+
[ronin-exploits]: https://github.com/ronin-rb/ronin-exploits#readme
|
174
|
+
[ronin-payloads]: https://github.com/ronin-rb/ronin-payloads#readme
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'bundler'
|
5
5
|
rescue LoadError => e
|
6
6
|
warn e.message
|
7
7
|
warn "Run `gem install bundler` to install Bundler"
|
8
|
-
exit
|
8
|
+
exit(-1)
|
9
9
|
end
|
10
10
|
|
11
11
|
begin
|
@@ -32,3 +32,13 @@ task :docs => :yard
|
|
32
32
|
|
33
33
|
require 'kramdown/man/task'
|
34
34
|
Kramdown::Man::Task.new
|
35
|
+
|
36
|
+
require 'command_kit/completion/task'
|
37
|
+
CommandKit::Completion::Task.new(
|
38
|
+
class_file: 'ronin/repos/cli',
|
39
|
+
class_name: 'Ronin::Repos::CLI',
|
40
|
+
input_file: 'data/completions/ronin-repos.yml',
|
41
|
+
output_file: 'data/completions/ronin-repos'
|
42
|
+
)
|
43
|
+
|
44
|
+
task :setup => %w[man command_kit:completion]
|
data/bin/ronin-repos
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
#
|
3
4
|
# Copyright (c) 2021-2023 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
5
|
#
|
@@ -21,13 +22,11 @@
|
|
21
22
|
root = File.expand_path(File.join(__dir__,'..'))
|
22
23
|
if File.file?(File.join(root,'Gemfile.lock'))
|
23
24
|
Dir.chdir(root) do
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
exit -1
|
30
|
-
end
|
25
|
+
require 'bundler/setup'
|
26
|
+
rescue LoadError => e
|
27
|
+
warn e.message
|
28
|
+
warn "Run `gem install bundler` to install Bundler"
|
29
|
+
exit(-1)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# ronin-repos completion -*- shell-script -*-
|
2
|
+
|
3
|
+
# This bash completions script was generated by
|
4
|
+
# completely (https://github.com/dannyben/completely)
|
5
|
+
# Modifying it manually is not recommended
|
6
|
+
|
7
|
+
_ronin-repos_completions_filter() {
|
8
|
+
local words="$1"
|
9
|
+
local cur=${COMP_WORDS[COMP_CWORD]}
|
10
|
+
local result=()
|
11
|
+
|
12
|
+
if [[ "${cur:0:1}" == "-" ]]; then
|
13
|
+
echo "$words"
|
14
|
+
|
15
|
+
else
|
16
|
+
for word in $words; do
|
17
|
+
[[ "${word:0:1}" != "-" ]] && result+=("$word")
|
18
|
+
done
|
19
|
+
|
20
|
+
echo "${result[*]}"
|
21
|
+
|
22
|
+
fi
|
23
|
+
}
|
24
|
+
|
25
|
+
_ronin-repos_completions() {
|
26
|
+
local cur=${COMP_WORDS[COMP_CWORD]}
|
27
|
+
local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")
|
28
|
+
local compline="${compwords[*]}"
|
29
|
+
|
30
|
+
case "$compline" in
|
31
|
+
'install'*'--cache-dir')
|
32
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
33
|
+
;;
|
34
|
+
|
35
|
+
'remove'*'--cache-dir')
|
36
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
37
|
+
;;
|
38
|
+
|
39
|
+
'update'*'--cache-dir')
|
40
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
41
|
+
;;
|
42
|
+
|
43
|
+
'purge'*'--cache-dir')
|
44
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
45
|
+
;;
|
46
|
+
|
47
|
+
'list'*'--cache-dir')
|
48
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
49
|
+
;;
|
50
|
+
|
51
|
+
'show'*'--cache-dir')
|
52
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
53
|
+
;;
|
54
|
+
|
55
|
+
'new'*'--cache-dir')
|
56
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
57
|
+
;;
|
58
|
+
|
59
|
+
'completion'*)
|
60
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--print --install --uninstall")" -- "$cur" )
|
61
|
+
;;
|
62
|
+
|
63
|
+
'install'*'-C')
|
64
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
65
|
+
;;
|
66
|
+
|
67
|
+
'remove'*'-C')
|
68
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
69
|
+
;;
|
70
|
+
|
71
|
+
'update'*'-C')
|
72
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
73
|
+
;;
|
74
|
+
|
75
|
+
'purge'*'-C')
|
76
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
77
|
+
;;
|
78
|
+
|
79
|
+
'install'*)
|
80
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C")" -- "$cur" )
|
81
|
+
;;
|
82
|
+
|
83
|
+
'list'*'-C')
|
84
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
85
|
+
;;
|
86
|
+
|
87
|
+
'show'*'-C')
|
88
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
89
|
+
;;
|
90
|
+
|
91
|
+
'new'*'-C')
|
92
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
|
93
|
+
;;
|
94
|
+
|
95
|
+
'remove'*)
|
96
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C $(ronin-repos list)")" -- "$cur" )
|
97
|
+
;;
|
98
|
+
|
99
|
+
'update'*)
|
100
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C $(ronin-repos list)")" -- "$cur" )
|
101
|
+
;;
|
102
|
+
|
103
|
+
'purge'*)
|
104
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C")" -- "$cur" )
|
105
|
+
;;
|
106
|
+
|
107
|
+
'list'*)
|
108
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C")" -- "$cur" )
|
109
|
+
;;
|
110
|
+
|
111
|
+
'show'*)
|
112
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C $(ronin-repos list)")" -- "$cur" )
|
113
|
+
;;
|
114
|
+
|
115
|
+
'info'*)
|
116
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "$(ronin-repos list)")" -- "$cur" )
|
117
|
+
;;
|
118
|
+
|
119
|
+
'new'*)
|
120
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--cache-dir -C")" -- "$cur" )
|
121
|
+
;;
|
122
|
+
|
123
|
+
'rm'*)
|
124
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "$(ronin-repos list)")" -- "$cur" )
|
125
|
+
;;
|
126
|
+
|
127
|
+
'up'*)
|
128
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "$(ronin-repos list)")" -- "$cur" )
|
129
|
+
;;
|
130
|
+
|
131
|
+
*)
|
132
|
+
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-repos_completions_filter "--version -V help completion install list new purge remove show update ls up rm info")" -- "$cur" )
|
133
|
+
;;
|
134
|
+
|
135
|
+
esac
|
136
|
+
} &&
|
137
|
+
complete -F _ronin-repos_completions ronin-repos
|
138
|
+
|
139
|
+
# ex: filetype=sh
|
@@ -5,7 +5,7 @@
|
|
5
5
|
This git repository can be installed by the [ronin-repos] command:
|
6
6
|
|
7
7
|
```shell
|
8
|
-
ronin-repos
|
8
|
+
ronin-repos install https://github.com/<%= @github_user %>/<%= @name %>.git
|
9
9
|
```
|
10
10
|
|
11
11
|
[ronin-repos]: https://github.com/ronin-rb/ronin-repos#readme
|
data/gemspec.yml
CHANGED
@@ -2,7 +2,13 @@ name: ronin-repos
|
|
2
2
|
summary: Third-party git repository support for ronin.
|
3
3
|
description:
|
4
4
|
ronin-repos provides a repository system for installing, managing, and
|
5
|
-
accessing third-party git repositories,
|
5
|
+
accessing third-party git repositories, that can contain additional Ruby code
|
6
|
+
or other data. Other Ronin libraries, such as ronin-exploits or
|
7
|
+
ronin-payloads, can then list and load additional third-party Ruby classes
|
8
|
+
from specific directories within the installed third-party reposs.
|
9
|
+
|
10
|
+
ronin-repos is essentially a decentralized plugin system for Ronin using git
|
11
|
+
repos.
|
6
12
|
|
7
13
|
license: LGPL-3.0
|
8
14
|
authors: Postmodern
|
@@ -18,11 +24,14 @@ metadata:
|
|
18
24
|
rubygems_mfa_required: 'true'
|
19
25
|
|
20
26
|
generated_files:
|
27
|
+
- data/completions/ronin-repos
|
21
28
|
- man/ronin-repos.1
|
29
|
+
- man/ronin-repos-completion.1
|
22
30
|
- man/ronin-repos-install.1
|
23
31
|
- man/ronin-repos-list.1
|
24
32
|
- man/ronin-repos-new.1
|
25
33
|
- man/ronin-repos-remove.1
|
34
|
+
- man/ronin-repos-show.1
|
26
35
|
- man/ronin-repos-update.1
|
27
36
|
- man/ronin-repos-purge.1
|
28
37
|
|
@@ -30,7 +39,7 @@ required_ruby_version: ">= 3.0.0"
|
|
30
39
|
|
31
40
|
dependencies:
|
32
41
|
# Library dependencies:
|
33
|
-
ronin-core: ~> 0.
|
42
|
+
ronin-core: ~> 0.2.0.rc1
|
34
43
|
|
35
44
|
development_dependencies:
|
36
45
|
bundler: ~> 2.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2021-
|
3
|
+
# Copyright (c) 2021-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-repos is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -34,7 +34,7 @@ module Ronin
|
|
34
34
|
|
35
35
|
include Enumerable
|
36
36
|
|
37
|
-
# The
|
37
|
+
# The `~/.cache/ronin-repos/` directory where all repos are stored.
|
38
38
|
PATH = Core::Home.cache_dir('ronin-repos')
|
39
39
|
|
40
40
|
# The path to the cache directory.
|
@@ -52,7 +52,7 @@ module Ronin
|
|
52
52
|
@path = path
|
53
53
|
end
|
54
54
|
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# Accesses a repository from the cache directory.
|
57
57
|
#
|
58
58
|
# @param [String] name
|
@@ -129,10 +129,9 @@ module Ronin
|
|
129
129
|
#
|
130
130
|
def update
|
131
131
|
each do |repo|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
end
|
132
|
+
repo.update
|
133
|
+
rescue CommandFailed
|
134
|
+
# ignore any `git` errors when updating
|
136
135
|
end
|
137
136
|
end
|
138
137
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2021-
|
3
|
+
# Copyright (c) 2021-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-repos is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -33,12 +33,12 @@ module Ronin
|
|
33
33
|
#
|
34
34
|
# require 'ronin/core/module_registry'
|
35
35
|
# require 'ronin/repos/class_dir'
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# module Ronin
|
38
38
|
# module Exploits
|
39
39
|
# include Ronin::Core::ClassRegistry
|
40
40
|
# include Ronin::Repos::ClassDir
|
41
|
-
#
|
41
|
+
#
|
42
42
|
# class_dir "#{__dir__}/classes"
|
43
43
|
# repo_class_dir "exploits"
|
44
44
|
# end
|
@@ -49,11 +49,11 @@ module Ronin
|
|
49
49
|
# module Ronin
|
50
50
|
# module Exploits
|
51
51
|
# class Exploit
|
52
|
-
#
|
52
|
+
#
|
53
53
|
# def self.register(name)
|
54
54
|
# Exploits.register(name,self)
|
55
55
|
# end
|
56
|
-
#
|
56
|
+
#
|
57
57
|
# end
|
58
58
|
# end
|
59
59
|
# end
|
@@ -61,13 +61,13 @@ module Ronin
|
|
61
61
|
# `~/.cache/ronin-repos/repo1/exploits/my_exploit.rb`:
|
62
62
|
#
|
63
63
|
# require 'ronin/exploits/exploit'
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# module Ronin
|
66
66
|
# module Exploits
|
67
67
|
# class MyExploit < Exploit
|
68
|
-
#
|
68
|
+
#
|
69
69
|
# register 'my_exploit'
|
70
|
-
#
|
70
|
+
#
|
71
71
|
# end
|
72
72
|
# end
|
73
73
|
# end
|
@@ -88,6 +88,9 @@ module Ronin
|
|
88
88
|
namespace.extend ClassMethods
|
89
89
|
end
|
90
90
|
|
91
|
+
#
|
92
|
+
# Class-methods.
|
93
|
+
#
|
91
94
|
module ClassMethods
|
92
95
|
#
|
93
96
|
# Gets or sets the repository module directory name.
|
@@ -97,7 +100,7 @@ module Ronin
|
|
97
100
|
#
|
98
101
|
# @return [String]
|
99
102
|
# The repository module directory name.
|
100
|
-
#
|
103
|
+
#
|
101
104
|
# @raise [NotImplementedError]
|
102
105
|
# The `repo_class_dir` method was not defined in the module.
|
103
106
|
#
|
@@ -117,16 +120,20 @@ module Ronin
|
|
117
120
|
# {#repo_class_dir} across all installed repositories.
|
118
121
|
#
|
119
122
|
# @return [Array<String>]
|
120
|
-
#
|
123
|
+
#
|
121
124
|
def list_files
|
122
|
-
|
123
|
-
pattern = File.join(repo_class_dir,"{**/}*.rb")
|
125
|
+
paths = Set.new(super)
|
126
|
+
pattern = File.join(repo_class_dir,"{**/}*.rb")
|
127
|
+
|
128
|
+
# the String#slice range to remove the repo_class_dir/ and .rb ext
|
129
|
+
slice_range = (repo_class_dir.length + 1)...-3
|
124
130
|
|
125
131
|
Repos.list_files(pattern).each do |path|
|
126
|
-
|
132
|
+
# NOTE: String#slice is faster than .delete_prefix + delete.suffix
|
133
|
+
paths << path.slice(slice_range)
|
127
134
|
end
|
128
135
|
|
129
|
-
return
|
136
|
+
return paths.to_a
|
130
137
|
end
|
131
138
|
|
132
139
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
|
-
# Copyright (c) 2021-
|
3
|
+
# Copyright (c) 2021-2024 Hal Brodigan (postmodern.mod3 at gmail.com)
|
4
4
|
#
|
5
5
|
# ronin-repos is free software: you can redistribute it and/or modify
|
6
6
|
# it under the terms of the GNU Lesser General Public License as published
|
@@ -24,6 +24,9 @@ require 'ronin/core/cli/command'
|
|
24
24
|
module Ronin
|
25
25
|
module Repos
|
26
26
|
class CLI
|
27
|
+
#
|
28
|
+
# Base command for all `ronin-repos` commands.
|
29
|
+
#
|
27
30
|
class Command < Core::CLI::Command
|
28
31
|
|
29
32
|
man_dir File.join(ROOT,'man')
|
@@ -39,8 +42,7 @@ module Ronin
|
|
39
42
|
@cache_dir = CacheDir.new(dir)
|
40
43
|
end
|
41
44
|
|
42
|
-
|
43
|
-
# The ronin-repos cache directory.
|
45
|
+
# The `ronin-repos` cache directory.
|
44
46
|
#
|
45
47
|
# @return [CacheDir]
|
46
48
|
attr_reader :cache_dir
|