ronin 1.0.0.rc1 → 1.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|