ronin 1.0.0.rc1 → 1.0.0.rc2
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 +24 -26
- data/Gemfile +24 -12
- data/README.md +39 -22
- data/Rakefile +2 -4
- data/gemspec.yml +27 -30
- data/lib/ronin/address.rb +3 -6
- data/lib/ronin/cached_file.rb +4 -3
- data/lib/ronin/campaign.rb +2 -1
- data/lib/ronin/credential.rb +3 -2
- data/lib/ronin/database/database.rb +3 -0
- data/lib/ronin/database/migrations/create_addresses_table.rb +1 -3
- data/lib/ronin/database/migrations/create_open_ports_table.rb +0 -3
- data/lib/ronin/database/migrations/create_organizations_table.rb +1 -6
- data/lib/ronin/database/migrations/create_urls_table.rb +1 -4
- data/lib/ronin/database/migrations.rb +0 -2
- data/lib/ronin/email_address.rb +5 -3
- data/lib/ronin/environment.rb +1 -1
- data/lib/ronin/host_name.rb +4 -3
- data/lib/ronin/host_name_ip_address.rb +3 -2
- data/lib/ronin/ip_address.rb +5 -4
- data/lib/ronin/ip_address_mac_address.rb +3 -2
- data/lib/ronin/mac_address.rb +3 -1
- data/lib/ronin/model/has_authors/class_methods.rb +2 -2
- data/lib/ronin/model/has_authors/has_authors.rb +1 -1
- data/lib/ronin/model/has_license/class_methods.rb +22 -5
- data/lib/ronin/{database/migrations/create_tags_table.rb → model/has_unique_name/class_methods.rb} +20 -15
- data/lib/ronin/model/has_unique_name/has_unique_name.rb +72 -0
- data/lib/ronin/model/has_unique_name.rb +2 -51
- data/lib/ronin/model/model.rb +1 -1
- data/lib/ronin/open_port.rb +5 -8
- data/lib/ronin/organization.rb +2 -5
- data/lib/ronin/os.rb +3 -2
- data/lib/ronin/os_guess.rb +3 -2
- data/lib/ronin/password.rb +2 -1
- data/lib/ronin/port.rb +2 -1
- data/lib/ronin/repository.rb +2 -1
- data/lib/ronin/service.rb +2 -1
- data/lib/ronin/service_credential.rb +2 -1
- data/lib/ronin/software.rb +2 -1
- data/lib/ronin/spec/database.rb +4 -0
- data/lib/ronin/target.rb +3 -2
- data/lib/ronin/tcp_port.rb +4 -2
- data/lib/ronin/ui/cli/cli.rb +2 -3
- data/lib/ronin/ui/cli/command.rb +48 -16
- data/lib/ronin/ui.rb +0 -1
- data/lib/ronin/url.rb +9 -10
- data/lib/ronin/url_scheme.rb +15 -1
- data/lib/ronin/version.rb +1 -1
- data/lib/ronin/web_credential.rb +3 -2
- data/ronin.gemspec +2 -2
- data/spec/model/cacheable_spec.rb +9 -6
- data/spec/model/has_authors_spec.rb +60 -0
- data/spec/model/has_description_spec.rb +8 -6
- data/spec/model/has_license_spec.rb +31 -12
- data/spec/model/has_name_spec.rb +12 -10
- data/spec/model/has_title_spec.rb +8 -6
- data/spec/model/has_version_spec.rb +58 -0
- data/spec/model/model_spec.rb +1 -3
- data/spec/model/models/authored_model.rb +11 -0
- data/spec/model/models/described_model.rb +0 -1
- data/spec/model/models/licensed_model.rb +0 -1
- data/spec/model/models/named_model.rb +0 -1
- data/spec/model/models/titled_model.rb +0 -1
- data/spec/model/models/versioned_model.rb +11 -0
- data/spec/model/spec_helper.rb +2 -2
- data/spec/ui/cli/classes/test_command.rb +7 -1
- data/spec/ui/cli/command_spec.rb +6 -0
- metadata +94 -267
- data/lib/ronin/database/migrations/create_taggings_table.rb +0 -45
- data/lib/ronin/ui/hexdump/extensions/file.rb +0 -39
- data/lib/ronin/ui/hexdump/extensions/kernel.rb +0 -31
- data/lib/ronin/ui/hexdump/extensions.rb +0 -21
- data/lib/ronin/ui/hexdump/hexdump.rb +0 -92
- data/lib/ronin/ui/hexdump.rb +0 -21
- data/spec/model/models/lazy_model.rb +0 -9
- data/spec/support/inflector_spec.rb +0 -20
data/lib/ronin/url_scheme.rb
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
require 'ronin/model'
|
21
21
|
require 'ronin/model/has_unique_name'
|
22
22
|
|
23
|
+
require 'dm-is-predefined'
|
24
|
+
|
23
25
|
module Ronin
|
24
26
|
#
|
25
27
|
# Represents a {URL} scheme.
|
@@ -28,12 +30,24 @@ module Ronin
|
|
28
30
|
|
29
31
|
include Model
|
30
32
|
include Model::HasUniqueName
|
33
|
+
|
34
|
+
is :predefined
|
31
35
|
|
32
36
|
# primary key of the URL Scheme
|
33
37
|
property :id, Serial
|
34
38
|
|
35
39
|
# The URLs that use the scheme
|
36
|
-
has
|
40
|
+
has 0..n, :urls, :model => 'URL',
|
41
|
+
:child_key => [:scheme_id]
|
42
|
+
|
43
|
+
# Predefines the HTTP URL Scheme
|
44
|
+
predefine :http, :name => 'http'
|
45
|
+
|
46
|
+
# Predefines the HTTPS URL Scheme
|
47
|
+
predefine :https, :name => 'https'
|
48
|
+
|
49
|
+
# Predefines the FTP URL Scheme
|
50
|
+
predefine :ftp, :name => 'ftp'
|
37
51
|
|
38
52
|
end
|
39
53
|
end
|
data/lib/ronin/version.rb
CHANGED
data/lib/ronin/web_credential.rb
CHANGED
@@ -18,10 +18,11 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'ronin/credential'
|
21
|
-
require 'ronin/email_address'
|
22
|
-
require 'ronin/url'
|
23
21
|
|
24
22
|
module Ronin
|
23
|
+
autoload :EmailAddress, 'ronin/email_address'
|
24
|
+
autoload :URL, 'ronin/url'
|
25
|
+
|
25
26
|
#
|
26
27
|
# Represents Credentials used to access websites at specified {URL}s.
|
27
28
|
#
|
data/ronin.gemspec
CHANGED
@@ -9,7 +9,7 @@ rescue NameError
|
|
9
9
|
require 'ore/specification'
|
10
10
|
retry
|
11
11
|
rescue LoadError
|
12
|
-
STDERR.puts "The '
|
13
|
-
STDERR.puts "Run `gem install ore` to install Ore."
|
12
|
+
STDERR.puts "The '#{__FILE__}' file requires Ore."
|
13
|
+
STDERR.puts "Run `gem install ore-core` to install Ore."
|
14
14
|
end
|
15
15
|
end
|
@@ -8,22 +8,25 @@ describe Model::Cacheable do
|
|
8
8
|
include Helpers::Repositories
|
9
9
|
|
10
10
|
let(:repo) { repository('test1') }
|
11
|
-
let(:cacheable_model) { CacheableModel }
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
subject { CacheableModel }
|
13
|
+
|
14
|
+
before(:all) { repo.cache_files! }
|
15
|
+
|
16
|
+
it "should include Ronin::Model" do
|
17
|
+
subject.ancestors.should include(Model)
|
15
18
|
end
|
16
19
|
|
17
20
|
it "should add the type property to the model" do
|
18
|
-
|
21
|
+
subject.properties.should be_named(:type)
|
19
22
|
end
|
20
23
|
|
21
24
|
it "should add a relation between CachedFile and the model" do
|
22
|
-
|
25
|
+
subject.relationships.should be_named(:cached_file)
|
23
26
|
end
|
24
27
|
|
25
28
|
it "should add the class to Cacheable.models" do
|
26
|
-
Model::Cacheable.models.should include(
|
29
|
+
Model::Cacheable.models.should include(subject)
|
27
30
|
end
|
28
31
|
|
29
32
|
describe "load_from" do
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'model/spec_helper'
|
2
|
+
require 'model/models/authored_model'
|
3
|
+
|
4
|
+
require 'ronin/model/has_authors'
|
5
|
+
|
6
|
+
describe Model::HasAuthors do
|
7
|
+
subject { AuthoredModel }
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
subject.auto_migrate!
|
11
|
+
|
12
|
+
resource = subject.new(:content => 'Test')
|
13
|
+
resource.author(
|
14
|
+
:name => 'Alice',
|
15
|
+
:email => 'alice@example.com',
|
16
|
+
:organization => 'Crew'
|
17
|
+
)
|
18
|
+
|
19
|
+
resource.save
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should include Ronin::Model" do
|
23
|
+
subject.ancestors.should include(Model)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should define an authors relationship" do
|
27
|
+
relationship = subject.relationships['authors']
|
28
|
+
|
29
|
+
relationship.should_not be_nil
|
30
|
+
relationship.child_model.should == Author
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should define relationships with Author" do
|
34
|
+
relationship = Author.relationships['authored_models']
|
35
|
+
|
36
|
+
relationship.should_not be_nil
|
37
|
+
relationship.child_model.should == subject
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow adding authors to a resource" do
|
41
|
+
resource = subject.new
|
42
|
+
resource.author(:name => 'Alice', :email => 'alice@example.com')
|
43
|
+
|
44
|
+
resource.authors.should_not be_empty
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow querying resources based on their Author" do
|
48
|
+
resources = subject.written_by('Alice')
|
49
|
+
|
50
|
+
resources.length.should == 1
|
51
|
+
resources[0].authors[0].name.should == 'Alice'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should allow querying resources based on their Organization" do
|
55
|
+
resources = subject.written_for('Crew')
|
56
|
+
|
57
|
+
resources.length.should == 1
|
58
|
+
resources[0].authors[0].organization.should == 'Crew'
|
59
|
+
end
|
60
|
+
end
|
@@ -6,8 +6,10 @@ require 'ronin/model/has_description'
|
|
6
6
|
describe Model::HasDescription do
|
7
7
|
subject { DescribedModel }
|
8
8
|
|
9
|
-
before(:all)
|
10
|
-
|
9
|
+
before(:all) { subject.auto_migrate! }
|
10
|
+
|
11
|
+
it "should include Ronin::Model" do
|
12
|
+
subject.ancestors.should include(Model)
|
11
13
|
end
|
12
14
|
|
13
15
|
it "should define a description property" do
|
@@ -52,10 +54,10 @@ describe Model::HasDescription do
|
|
52
54
|
subject.create!(:description => 'foo one')
|
53
55
|
subject.create!(:description => 'foo bar two')
|
54
56
|
|
55
|
-
|
57
|
+
resources = subject.describing('foo')
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
59
|
+
resources.length.should == 2
|
60
|
+
resources[0].description.should == 'foo one'
|
61
|
+
resources[1].description.should == 'foo bar two'
|
60
62
|
end
|
61
63
|
end
|
@@ -8,6 +8,15 @@ describe Model::HasLicense do
|
|
8
8
|
|
9
9
|
before(:all) do
|
10
10
|
subject.auto_migrate!
|
11
|
+
|
12
|
+
subject.create(
|
13
|
+
:content => 'stuff here',
|
14
|
+
:license => License.gpl2
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should include Ronin::Model" do
|
19
|
+
subject.ancestors.should include(Model)
|
11
20
|
end
|
12
21
|
|
13
22
|
it "should define a license relationship" do
|
@@ -24,21 +33,31 @@ describe Model::HasLicense do
|
|
24
33
|
relationship.child_model.should == subject
|
25
34
|
end
|
26
35
|
|
27
|
-
it "should
|
28
|
-
|
29
|
-
:content => 'bla',
|
30
|
-
:license => License.gpl2
|
31
|
-
)
|
36
|
+
it "should not require a license" do
|
37
|
+
resource = subject.new(:content => 'bla')
|
32
38
|
|
33
|
-
|
39
|
+
resource.should be_valid
|
34
40
|
end
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
describe "licensed_under" do
|
43
|
+
let(:license) { License.gpl2 }
|
44
|
+
|
45
|
+
it "should accept License resources" do
|
46
|
+
resource = subject.licensed_under(license).first
|
47
|
+
|
48
|
+
resource.license.should == license
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should accept the names of predefined Licenses" do
|
52
|
+
resource = subject.licensed_under(:gpl2).first
|
53
|
+
|
54
|
+
resource.license.should == license
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should accept the names of licenses" do
|
58
|
+
resource = subject.licensed_under('GPL-2').first
|
41
59
|
|
42
|
-
|
60
|
+
resource.license.should == license
|
61
|
+
end
|
43
62
|
end
|
44
63
|
end
|
data/spec/model/has_name_spec.rb
CHANGED
@@ -6,8 +6,10 @@ require 'ronin/model/has_name'
|
|
6
6
|
describe Model::HasName do
|
7
7
|
subject { NamedModel }
|
8
8
|
|
9
|
-
before(:all)
|
10
|
-
|
9
|
+
before(:all) { subject.auto_migrate! }
|
10
|
+
|
11
|
+
it "should include Ronin::Model" do
|
12
|
+
subject.ancestors.should include(Model)
|
11
13
|
end
|
12
14
|
|
13
15
|
it "should define a name property" do
|
@@ -15,21 +17,21 @@ describe Model::HasName do
|
|
15
17
|
end
|
16
18
|
|
17
19
|
it "should require a name" do
|
18
|
-
|
19
|
-
|
20
|
+
resource = subject.new
|
21
|
+
resource.should_not be_valid
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
resource.name = 'foo'
|
24
|
+
resource.should be_valid
|
23
25
|
end
|
24
26
|
|
25
27
|
it "should be able to find resources with similar names" do
|
26
28
|
subject.create!(:name => 'foo1')
|
27
29
|
subject.create!(:name => 'foo2')
|
28
30
|
|
29
|
-
|
31
|
+
resources = subject.named('foo')
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
resources.length.should == 2
|
34
|
+
resources[0].name.should == 'foo1'
|
35
|
+
resources[1].name.should == 'foo2'
|
34
36
|
end
|
35
37
|
end
|
@@ -6,8 +6,10 @@ require 'ronin/model/has_title'
|
|
6
6
|
describe Model::HasTitle do
|
7
7
|
subject { TitledModel }
|
8
8
|
|
9
|
-
before(:all)
|
10
|
-
|
9
|
+
before(:all) { subject.auto_migrate! }
|
10
|
+
|
11
|
+
it "should include Ronin::Model" do
|
12
|
+
subject.ancestors.should include(Model)
|
11
13
|
end
|
12
14
|
|
13
15
|
it "should define a title property" do
|
@@ -18,10 +20,10 @@ describe Model::HasTitle do
|
|
18
20
|
subject.create!(:title => 'Foo one')
|
19
21
|
subject.create!(:title => 'Foo bar two')
|
20
22
|
|
21
|
-
|
23
|
+
resources = subject.titled('Foo')
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
resources.length.should == 2
|
26
|
+
resources[0].title.should == 'Foo one'
|
27
|
+
resources[1].title.should == 'Foo bar two'
|
26
28
|
end
|
27
29
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'model/spec_helper'
|
2
|
+
require 'model/models/versioned_model'
|
3
|
+
|
4
|
+
require 'ronin/model/has_version'
|
5
|
+
|
6
|
+
describe Model::HasVersion do
|
7
|
+
subject { VersionedModel }
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
subject.auto_migrate!
|
11
|
+
|
12
|
+
subject.create(
|
13
|
+
:version => '1.1',
|
14
|
+
:content => 'Foo'
|
15
|
+
)
|
16
|
+
|
17
|
+
subject.create(
|
18
|
+
:version => '1.1',
|
19
|
+
:content => 'Bar'
|
20
|
+
)
|
21
|
+
|
22
|
+
subject.create(
|
23
|
+
:version => '1.2',
|
24
|
+
:content => 'Foo'
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should include Ronin::Model" do
|
29
|
+
subject.ancestors.should include(Model)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should define a version property" do
|
33
|
+
subject.properties.should be_named(:version)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should default the version property to '1.0'" do
|
37
|
+
resource = subject.new
|
38
|
+
|
39
|
+
resource.version.should == '0.1'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should allow querying specific revisions" do
|
43
|
+
resources = subject.revision('1.1')
|
44
|
+
|
45
|
+
resources.length.should == 2
|
46
|
+
resources[0].version.should == '1.1'
|
47
|
+
resources[0].content.should == 'Foo'
|
48
|
+
|
49
|
+
resources[1].version.should == '1.1'
|
50
|
+
resources[1].content.should == 'Bar'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should allow querying the latest revision" do
|
54
|
+
resource = subject.all(:content => 'Foo').latest
|
55
|
+
|
56
|
+
resource.version.should == '1.2'
|
57
|
+
end
|
58
|
+
end
|
data/spec/model/model_spec.rb
CHANGED
@@ -9,9 +9,7 @@ describe Model do
|
|
9
9
|
|
10
10
|
let(:custom_model) { CustomModel }
|
11
11
|
|
12
|
-
before(:all)
|
13
|
-
subject.auto_migrate!
|
14
|
-
end
|
12
|
+
before(:all) { subject.auto_migrate! }
|
15
13
|
|
16
14
|
it "should have a default repository name" do
|
17
15
|
subject.default_repository_name.should == :default
|
data/spec/model/spec_helper.rb
CHANGED
@@ -2,8 +2,8 @@ require 'spec_helper'
|
|
2
2
|
require 'model/models/basic_model'
|
3
3
|
require 'model/models/cacheable_model'
|
4
4
|
require 'model/models/custom_model'
|
5
|
+
require 'model/models/authored_model'
|
5
6
|
require 'model/models/described_model'
|
6
|
-
require 'model/models/lazy_model'
|
7
7
|
require 'model/models/licensed_model'
|
8
8
|
require 'model/models/named_model'
|
9
9
|
require 'model/models/titled_model'
|
@@ -13,8 +13,8 @@ RSpec.configure do |spec|
|
|
13
13
|
BasicModel.auto_migrate!
|
14
14
|
CacheableModel.auto_migrate!
|
15
15
|
CustomModel.auto_migrate!
|
16
|
+
AuthoredModel.auto_migrate!
|
16
17
|
DescribedModel.auto_migrate!
|
17
|
-
LazyModel.auto_migrate!
|
18
18
|
LicensedModel.auto_migrate!
|
19
19
|
NamedModel.auto_migrate!
|
20
20
|
TitledModel.auto_migrate!
|
data/spec/ui/cli/command_spec.rb
CHANGED
@@ -14,6 +14,12 @@ describe UI::CLI::Command do
|
|
14
14
|
subject.start([]).should == ['default task']
|
15
15
|
end
|
16
16
|
|
17
|
+
it "should allow running the task with options" do
|
18
|
+
command = subject.run({:foo => true})
|
19
|
+
|
20
|
+
command.options.foo.should == true
|
21
|
+
end
|
22
|
+
|
17
23
|
it "should have zero indentation by default" do
|
18
24
|
command = subject.new
|
19
25
|
command.instance_variable_get('@indent').should == 0
|