ronin 1.1.0 → 1.2.0
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.
- data/ChangeLog.md +23 -0
- data/README.md +19 -13
- data/Rakefile +2 -1
- data/gemspec.yml +18 -17
- data/lib/bond/completions/ronin.rb +147 -0
- data/lib/ronin/auto_load.rb +30 -28
- data/lib/ronin/database/migrations/1.0.0.rb +1 -0
- data/lib/ronin/model/has_authors.rb +92 -2
- data/lib/ronin/model/has_description.rb +54 -2
- data/lib/ronin/model/has_license.rb +101 -2
- data/lib/ronin/model/has_name.rb +72 -2
- data/lib/ronin/model/has_title.rb +52 -2
- data/lib/ronin/model/has_unique_name.rb +93 -2
- data/lib/ronin/model/has_version.rb +58 -2
- data/lib/ronin/model/model.rb +91 -52
- data/lib/ronin/os.rb +30 -15
- data/lib/ronin/repository.rb +1 -1
- data/lib/ronin/ronin.rb +0 -15
- data/lib/ronin/script/script.rb +257 -2
- data/lib/ronin/ui/console.rb +2 -199
- data/lib/ronin/ui/console/commands.rb +164 -0
- data/lib/ronin/ui/console/console.rb +215 -0
- data/lib/ronin/ui/console/context.rb +95 -0
- data/lib/ronin/version.rb +1 -1
- data/spec/os_spec.rb +18 -13
- metadata +206 -239
- data/lib/ronin/class_methods.rb +0 -49
- data/lib/ronin/model/class_methods.rb +0 -58
- data/lib/ronin/model/has_authors/class_methods.rb +0 -60
- data/lib/ronin/model/has_authors/has_authors.rb +0 -70
- data/lib/ronin/model/has_description/class_methods.rb +0 -49
- data/lib/ronin/model/has_description/has_description.rb +0 -49
- data/lib/ronin/model/has_license/class_methods.rb +0 -68
- data/lib/ronin/model/has_license/has_license.rb +0 -71
- data/lib/ronin/model/has_name/class_methods.rb +0 -48
- data/lib/ronin/model/has_name/has_name.rb +0 -62
- data/lib/ronin/model/has_title/class_methods.rb +0 -48
- data/lib/ronin/model/has_title/has_title.rb +0 -48
- data/lib/ronin/model/has_unique_name/class_methods.rb +0 -51
- data/lib/ronin/model/has_unique_name/has_unique_name.rb +0 -78
- data/lib/ronin/model/has_version/class_methods.rb +0 -54
- data/lib/ronin/model/has_version/has_version.rb +0 -48
- data/lib/ronin/script/class_methods.rb +0 -84
- data/lib/ronin/script/instance_methods.rb +0 -217
@@ -17,5 +17,57 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model/
|
21
|
-
require 'ronin/model
|
20
|
+
require 'ronin/model/types/description'
|
21
|
+
require 'ronin/model'
|
22
|
+
|
23
|
+
module Ronin
|
24
|
+
module Model
|
25
|
+
#
|
26
|
+
# Adds a `description` property to a model.
|
27
|
+
#
|
28
|
+
module HasDescription
|
29
|
+
#
|
30
|
+
# Adds the `description` property and {ClassMethods} to the model.
|
31
|
+
#
|
32
|
+
# @param [Class] base
|
33
|
+
# The model.
|
34
|
+
#
|
35
|
+
# @api semipublic
|
36
|
+
#
|
37
|
+
def self.included(base)
|
38
|
+
base.send :include, Model
|
39
|
+
base.send :extend, ClassMethods
|
40
|
+
|
41
|
+
base.module_eval do
|
42
|
+
# The description of the model
|
43
|
+
property :description, Model::Types::Description
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Class methods that are added when {HasDescription} is included into
|
49
|
+
# a model.
|
50
|
+
#
|
51
|
+
module ClassMethods
|
52
|
+
#
|
53
|
+
# Finds models with descriptions containing a given fragment of
|
54
|
+
# text.
|
55
|
+
#
|
56
|
+
# @param [String] fragment
|
57
|
+
# The fragment of text to match descriptions with.
|
58
|
+
#
|
59
|
+
# @return [Array<Model>]
|
60
|
+
# The found models.
|
61
|
+
#
|
62
|
+
# @example
|
63
|
+
# Exploit.describing 'bypass'
|
64
|
+
#
|
65
|
+
# @api public
|
66
|
+
#
|
67
|
+
def describing(fragment)
|
68
|
+
all(:description.like => "%#{fragment}%")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -17,5 +17,104 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model
|
21
|
-
require 'ronin/
|
20
|
+
require 'ronin/model'
|
21
|
+
require 'ronin/license'
|
22
|
+
|
23
|
+
module Ronin
|
24
|
+
module Model
|
25
|
+
#
|
26
|
+
# Adds a `license` relationship between a model and the {License} model.
|
27
|
+
#
|
28
|
+
module HasLicense
|
29
|
+
#
|
30
|
+
# Adds the `license` relationship and {ClassMethods} to the model.
|
31
|
+
#
|
32
|
+
# @param [Class] base
|
33
|
+
# The model.
|
34
|
+
#
|
35
|
+
# @api semipublic
|
36
|
+
#
|
37
|
+
def self.included(base)
|
38
|
+
base.send :include, Model, InstanceMethods
|
39
|
+
base.send :extend, ClassMethods
|
40
|
+
|
41
|
+
base.module_eval do
|
42
|
+
# The license
|
43
|
+
belongs_to :license, Ronin::License, :required => false
|
44
|
+
|
45
|
+
Ronin::License.has 0..n, self.relationship_name, :model => self
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Class methods that are added when {HasLicense} is included into a
|
51
|
+
# model.
|
52
|
+
#
|
53
|
+
module ClassMethods
|
54
|
+
#
|
55
|
+
# Finds all models associated with a given license.
|
56
|
+
#
|
57
|
+
# @param [License, Symbol, #to_s] license
|
58
|
+
# The license which models are associated with.
|
59
|
+
#
|
60
|
+
# @return [Array<Model>]
|
61
|
+
# The models associated with a given license.
|
62
|
+
#
|
63
|
+
# @example Query using a predefined {License} resource.
|
64
|
+
# LicensedModel.licensed_under(License.mit)
|
65
|
+
# # => [#<Ronin::LicensedModel: ...>, ...]
|
66
|
+
#
|
67
|
+
# @example Query using the name of a predefined {License}.
|
68
|
+
# LicensedModel.licensed_under(:cc_by_nc)
|
69
|
+
# # => [#<Ronin::LicensedModel: ...>, ...]
|
70
|
+
#
|
71
|
+
# @example Query using the name of a {License}.
|
72
|
+
# LicensedModel.licensed_under('GPL-2')
|
73
|
+
# # => [#<Ronin::LicensedModel: ...>, ...]
|
74
|
+
#
|
75
|
+
# @since 1.0.0
|
76
|
+
#
|
77
|
+
# @api public
|
78
|
+
#
|
79
|
+
def licensed_under(license)
|
80
|
+
conditions = case license
|
81
|
+
when License
|
82
|
+
{:license => license}
|
83
|
+
when Symbol
|
84
|
+
{:license => License.predefined_resource(license)}
|
85
|
+
else
|
86
|
+
{'license.name' => license.to_s}
|
87
|
+
end
|
88
|
+
|
89
|
+
all(conditions)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
#
|
94
|
+
# Instance methods that are added when {HasLicense} is included into a
|
95
|
+
# model.
|
96
|
+
#
|
97
|
+
module InstanceMethods
|
98
|
+
#
|
99
|
+
# Sets the license of the model.
|
100
|
+
#
|
101
|
+
# @param [Symbol, String] name
|
102
|
+
# The name of the license to use.
|
103
|
+
#
|
104
|
+
# @return [License]
|
105
|
+
# The new license of the model.
|
106
|
+
#
|
107
|
+
# @example
|
108
|
+
# license! :mit
|
109
|
+
#
|
110
|
+
# @since 1.0.0
|
111
|
+
#
|
112
|
+
# @api public
|
113
|
+
#
|
114
|
+
def license!(name)
|
115
|
+
self.license = Ronin::License.predefined_resource(name)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/lib/ronin/model/has_name.rb
CHANGED
@@ -17,5 +17,75 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model
|
21
|
-
|
20
|
+
require 'ronin/model'
|
21
|
+
|
22
|
+
module Ronin
|
23
|
+
module Model
|
24
|
+
#
|
25
|
+
# Adds a `name` property to a model.
|
26
|
+
#
|
27
|
+
module HasName
|
28
|
+
#
|
29
|
+
# Adds the `name` property and {ClassMethods} to the model.
|
30
|
+
#
|
31
|
+
# @param [Class] base
|
32
|
+
# The model.
|
33
|
+
#
|
34
|
+
# @api semipublic
|
35
|
+
#
|
36
|
+
def self.included(base)
|
37
|
+
base.send :include, Model, InstanceMethods
|
38
|
+
base.send :extend, ClassMethods
|
39
|
+
|
40
|
+
base.module_eval do
|
41
|
+
# The name of the model
|
42
|
+
property :name, String, :required => true, :index => true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Class methods that are added when {HasName} is included into a
|
48
|
+
# model.
|
49
|
+
#
|
50
|
+
module ClassMethods
|
51
|
+
#
|
52
|
+
# Finds models with names containing a given fragment of text.
|
53
|
+
#
|
54
|
+
# @param [String] fragment
|
55
|
+
# The fragment of text to search for within the names of models.
|
56
|
+
#
|
57
|
+
# @return [Array<Model>]
|
58
|
+
# The found models.
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# Exploit.named 'ProFTP'
|
62
|
+
#
|
63
|
+
# @api public
|
64
|
+
#
|
65
|
+
def named(fragment)
|
66
|
+
all(:name.like => "%#{fragment}%")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# Instance methods that are added when {HasName} is included into a
|
72
|
+
# model.
|
73
|
+
#
|
74
|
+
module InstanceMethods
|
75
|
+
#
|
76
|
+
# Converts the named resource into a String.
|
77
|
+
#
|
78
|
+
# @return [String]
|
79
|
+
# The name of the resource.
|
80
|
+
#
|
81
|
+
# @since 1.0.0
|
82
|
+
#
|
83
|
+
# @api public
|
84
|
+
#
|
85
|
+
def to_s
|
86
|
+
self.name.to_s
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -17,5 +17,55 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model
|
21
|
-
|
20
|
+
require 'ronin/model'
|
21
|
+
|
22
|
+
module Ronin
|
23
|
+
module Model
|
24
|
+
#
|
25
|
+
# Adds a `title` property to a model.
|
26
|
+
#
|
27
|
+
module HasTitle
|
28
|
+
#
|
29
|
+
# Adds the `title` property and {ClassMethods} to the model.
|
30
|
+
#
|
31
|
+
# @param [Class] base
|
32
|
+
# The model.
|
33
|
+
#
|
34
|
+
# @api semipublic
|
35
|
+
#
|
36
|
+
def self.included(base)
|
37
|
+
base.send :include, Model
|
38
|
+
base.send :extend, ClassMethods
|
39
|
+
|
40
|
+
base.module_eval do
|
41
|
+
# The title of the model
|
42
|
+
property :title, String
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Class methods that are added when {HasTitle} are included into a
|
48
|
+
# model.
|
49
|
+
#
|
50
|
+
module ClassMethods
|
51
|
+
#
|
52
|
+
# Finds models with titles containing a given fragment of text.
|
53
|
+
#
|
54
|
+
# @param [String] fragment
|
55
|
+
# The fragment of text to match titles with.
|
56
|
+
#
|
57
|
+
# @return [Array<Model>]
|
58
|
+
# The found models.
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# Vuln.titled 'bypass'
|
62
|
+
#
|
63
|
+
# @api public
|
64
|
+
#
|
65
|
+
def titled(fragment)
|
66
|
+
all(:title.like => "%#{fragment}%")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -17,5 +17,96 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model/
|
21
|
-
|
20
|
+
require 'ronin/model/has_name'
|
21
|
+
|
22
|
+
module Ronin
|
23
|
+
module Model
|
24
|
+
#
|
25
|
+
# Adds a unique `name` property to a model.
|
26
|
+
#
|
27
|
+
module HasUniqueName
|
28
|
+
#
|
29
|
+
# Adds the unique `name` property and {HasName::ClassMethods} to the
|
30
|
+
# model.
|
31
|
+
#
|
32
|
+
# @param [Class] base
|
33
|
+
# The model.
|
34
|
+
#
|
35
|
+
# @api semipublic
|
36
|
+
#
|
37
|
+
def self.included(base)
|
38
|
+
base.send :include, Model,
|
39
|
+
InstanceMethods
|
40
|
+
|
41
|
+
base.send :extend, HasName::ClassMethods,
|
42
|
+
HasUniqueName::ClassMethods
|
43
|
+
|
44
|
+
base.module_eval do
|
45
|
+
# The name of the model
|
46
|
+
property :name, String, :required => true, :unique => true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Class methods that will be added when {HasUniqueName} is included.
|
52
|
+
#
|
53
|
+
module ClassMethods
|
54
|
+
#
|
55
|
+
# Searches for models with the unique name.
|
56
|
+
#
|
57
|
+
# @param [String, Symbol, Integer] key
|
58
|
+
# The unique name or index to search for.
|
59
|
+
#
|
60
|
+
# @return [Model, nil]
|
61
|
+
# The matching model.
|
62
|
+
#
|
63
|
+
# @since 1.0.0
|
64
|
+
#
|
65
|
+
# @api public
|
66
|
+
#
|
67
|
+
def [](key)
|
68
|
+
case key
|
69
|
+
when String, Symbol
|
70
|
+
first(:name => key.to_s)
|
71
|
+
else
|
72
|
+
super(key)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Instance methods that will be added when {HasUniqueName} is
|
79
|
+
# included.
|
80
|
+
#
|
81
|
+
module InstanceMethods
|
82
|
+
#
|
83
|
+
# Converts the named resource into a String.
|
84
|
+
#
|
85
|
+
# @return [String]
|
86
|
+
# The name of the resource.
|
87
|
+
#
|
88
|
+
# @since 1.0.0
|
89
|
+
#
|
90
|
+
# @api public
|
91
|
+
#
|
92
|
+
def to_s
|
93
|
+
self.name.to_s
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# Inspects the resource with the unique name.
|
98
|
+
#
|
99
|
+
# @return [String]
|
100
|
+
# The inspected resource.
|
101
|
+
#
|
102
|
+
# @since 1.0.0
|
103
|
+
#
|
104
|
+
# @api public
|
105
|
+
#
|
106
|
+
def inspect
|
107
|
+
"#<#{self.class}: #{self.name}>"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -17,5 +17,61 @@
|
|
17
17
|
# along with Ronin. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
-
require 'ronin/model
|
21
|
-
|
20
|
+
require 'ronin/model'
|
21
|
+
|
22
|
+
module Ronin
|
23
|
+
module Model
|
24
|
+
#
|
25
|
+
# Adds a `version` property to a model.
|
26
|
+
#
|
27
|
+
module HasVersion
|
28
|
+
#
|
29
|
+
# Adds the `version` property and {ClassMethods} to the model.
|
30
|
+
#
|
31
|
+
# @param [Class] base
|
32
|
+
# The model.
|
33
|
+
#
|
34
|
+
# @api semipublic
|
35
|
+
#
|
36
|
+
def self.included(base)
|
37
|
+
base.send :include, Model
|
38
|
+
base.send :extend, ClassMethods
|
39
|
+
|
40
|
+
base.module_eval do
|
41
|
+
# The version of the model
|
42
|
+
property :version, String, :default => '0.1', :index => true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Class methods that are added when {HasVersion} is included into a
|
48
|
+
# model.
|
49
|
+
#
|
50
|
+
module ClassMethods
|
51
|
+
#
|
52
|
+
# Finds all models with a specific version.
|
53
|
+
#
|
54
|
+
# @param [String] version
|
55
|
+
# The specific version to search for.
|
56
|
+
#
|
57
|
+
# @return [Array]
|
58
|
+
# The models with the specific version.
|
59
|
+
#
|
60
|
+
# @api public
|
61
|
+
#
|
62
|
+
def revision(version)
|
63
|
+
all(:version => version.to_s)
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Finds latest version of the model.
|
68
|
+
#
|
69
|
+
# @api public
|
70
|
+
#
|
71
|
+
def latest
|
72
|
+
first(:order => [:version.desc])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|