ronin-db 0.1.0.beta1-java
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 +7 -0
- data/.document +5 -0
- data/.github/workflows/ruby.yml +31 -0
- data/.gitignore +13 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +165 -0
- data/ChangeLog.md +12 -0
- data/Gemfile +39 -0
- data/README.md +272 -0
- data/Rakefile +76 -0
- data/bin/ronin-db +35 -0
- data/gemspec.yml +46 -0
- data/lib/ronin/db/cli/command.rb +37 -0
- data/lib/ronin/db/cli/commands/add.rb +206 -0
- data/lib/ronin/db/cli/commands/asn.rb +218 -0
- data/lib/ronin/db/cli/commands/creds.rb +80 -0
- data/lib/ronin/db/cli/commands/edit.rb +58 -0
- data/lib/ronin/db/cli/commands/emails.rb +90 -0
- data/lib/ronin/db/cli/commands/hosts.rb +100 -0
- data/lib/ronin/db/cli/commands/ips.rb +100 -0
- data/lib/ronin/db/cli/commands/irb.rb +81 -0
- data/lib/ronin/db/cli/commands/list.rb +124 -0
- data/lib/ronin/db/cli/commands/migrate.rb +75 -0
- data/lib/ronin/db/cli/commands/remove.rb +69 -0
- data/lib/ronin/db/cli/commands/urls.rb +170 -0
- data/lib/ronin/db/cli/database_command.rb +71 -0
- data/lib/ronin/db/cli/model_command.rb +202 -0
- data/lib/ronin/db/cli/modifiable.rb +141 -0
- data/lib/ronin/db/cli/resources_command.rb +120 -0
- data/lib/ronin/db/cli/ruby_shell.rb +51 -0
- data/lib/ronin/db/cli/uri_methods.rb +97 -0
- data/lib/ronin/db/cli.rb +38 -0
- data/lib/ronin/db/config_file.rb +132 -0
- data/lib/ronin/db/exceptions.rb +26 -0
- data/lib/ronin/db/home.rb +36 -0
- data/lib/ronin/db/root.rb +28 -0
- data/lib/ronin/db/version.rb +26 -0
- data/lib/ronin/db.rb +123 -0
- data/man/ronin-db-add.1 +99 -0
- data/man/ronin-db-add.1.md +75 -0
- data/man/ronin-db-asn.1 +79 -0
- data/man/ronin-db-asn.1.md +59 -0
- data/man/ronin-db-creds.1 +78 -0
- data/man/ronin-db-creds.1.md +58 -0
- data/man/ronin-db-edit.1 +48 -0
- data/man/ronin-db-edit.1.md +36 -0
- data/man/ronin-db-emails.1 +82 -0
- data/man/ronin-db-emails.1.md +61 -0
- data/man/ronin-db-hosts.1 +86 -0
- data/man/ronin-db-hosts.1.md +64 -0
- data/man/ronin-db-ips.1 +90 -0
- data/man/ronin-db-ips.1.md +67 -0
- data/man/ronin-db-irb.1 +61 -0
- data/man/ronin-db-irb.1.md +46 -0
- data/man/ronin-db-list.1 +58 -0
- data/man/ronin-db-list.1.md +44 -0
- data/man/ronin-db-migrate.1 +44 -0
- data/man/ronin-db-migrate.1.md +32 -0
- data/man/ronin-db-remove.1 +55 -0
- data/man/ronin-db-remove.1.md +42 -0
- data/man/ronin-db-urls.1 +98 -0
- data/man/ronin-db-urls.1.md +73 -0
- data/ronin-db.gemspec +78 -0
- data/spec/cli/commands/add_spec.rb +220 -0
- data/spec/cli/commands/edit_spec.rb +12 -0
- data/spec/cli/commands/irb_spec.rb +26 -0
- data/spec/cli/database_command_spec.rb +53 -0
- data/spec/cli/model_command_spec.rb +237 -0
- data/spec/cli/ruby_shell_spec.rb +14 -0
- data/spec/cli/uri_methods_spec.rb +190 -0
- data/spec/spec_helper.rb +15 -0
- metadata +200 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/core/cli/ruby_shell'
|
22
|
+
|
23
|
+
module Ronin
|
24
|
+
module DB
|
25
|
+
class CLI
|
26
|
+
#
|
27
|
+
# The interactive Ruby shell for {Ronin::DB}.
|
28
|
+
#
|
29
|
+
class RubyShell < Core::CLI::RubyShell
|
30
|
+
|
31
|
+
#
|
32
|
+
# Initializes the `ronin-db` Ruby shell.
|
33
|
+
#
|
34
|
+
# @param [String] name
|
35
|
+
# The name of the IRB shell.
|
36
|
+
#
|
37
|
+
# @param [Object] context
|
38
|
+
# Custom context to launch IRB from within.
|
39
|
+
#
|
40
|
+
# @param [Hash{Symbol => Object}] kwargs
|
41
|
+
# Additional keyword arguments for
|
42
|
+
# `Ronin::Core::CLI::RubyShell#initialize`.
|
43
|
+
#
|
44
|
+
def initialize(name: 'ronin-db', context: Ronin::DB, **kwargs)
|
45
|
+
super(name: name, context: context, **kwargs)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/db/cli/command'
|
22
|
+
require 'ronin/db'
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module DB
|
26
|
+
class CLI
|
27
|
+
module URIMethods
|
28
|
+
# Common database adapter names and their ActiveRecord equivalents.
|
29
|
+
ADAPTER_ALIASES = {
|
30
|
+
'sqlite' => 'sqlite3',
|
31
|
+
'mysql' => 'mysql2',
|
32
|
+
'pg' => 'postgresql',
|
33
|
+
'psql' => 'postgresql',
|
34
|
+
'postgres' => 'postgresql'
|
35
|
+
}
|
36
|
+
|
37
|
+
#
|
38
|
+
# Normalizes a database adapter name.
|
39
|
+
#
|
40
|
+
# @param [String] adapter
|
41
|
+
# The adapter name to normalize.
|
42
|
+
#
|
43
|
+
# @return [String]
|
44
|
+
# The normalized adapter.
|
45
|
+
#
|
46
|
+
def normalize_adapter(adapter)
|
47
|
+
ADAPTER_ALIASES.fetch(adapter,adapter)
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Normalizes a sqlite3 database path.
|
52
|
+
#
|
53
|
+
# @param [String] path
|
54
|
+
# The path to the sqlite3 database.
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
# The expanded path or `":memory:"` if the path was `":memory:"`.
|
58
|
+
#
|
59
|
+
def normalize_sqlite3_path(path)
|
60
|
+
if path== ':memory:' then path
|
61
|
+
else File.expand_path(path)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# Parses a database URI.
|
67
|
+
#
|
68
|
+
# @param [String] uri
|
69
|
+
# The database URI to parse.
|
70
|
+
#
|
71
|
+
# @return [Hash{Symbol => String,Integer,nil}]
|
72
|
+
# The database configuration Hash.
|
73
|
+
#
|
74
|
+
def parse_uri(uri)
|
75
|
+
if (match = uri.match(/\Asqlite[3]?:(.+)\z/))
|
76
|
+
{
|
77
|
+
adapter: 'sqlite3',
|
78
|
+
database: normalize_sqlite3_path(match[1])
|
79
|
+
}
|
80
|
+
else
|
81
|
+
uri = URI.parse(uri)
|
82
|
+
adapter = normalize_adapter(uri.scheme)
|
83
|
+
|
84
|
+
hash = {adapter: adapter}
|
85
|
+
hash[:host] = uri.host if uri.host
|
86
|
+
hash[:port] = uri.port if uri.port
|
87
|
+
hash[:username] = uri.user if uri.user
|
88
|
+
hash[:password] = uri.password if uri.password
|
89
|
+
hash[:database] = uri.path[1..]
|
90
|
+
|
91
|
+
return hash
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/ronin/db/cli.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'command_kit/commands'
|
22
|
+
require 'command_kit/commands/auto_load'
|
23
|
+
|
24
|
+
module Ronin
|
25
|
+
module DB
|
26
|
+
class CLI
|
27
|
+
|
28
|
+
include CommandKit::Commands
|
29
|
+
include CommandKit::Commands::AutoLoad.new(
|
30
|
+
dir: "#{__dir__}/cli/commands",
|
31
|
+
namespace: "#{self}::Commands"
|
32
|
+
)
|
33
|
+
|
34
|
+
command_name 'ronin-db'
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/db/exceptions'
|
22
|
+
require 'ronin/db/home'
|
23
|
+
|
24
|
+
require 'yaml'
|
25
|
+
require 'yaml/store'
|
26
|
+
|
27
|
+
module Ronin
|
28
|
+
module DB
|
29
|
+
#
|
30
|
+
# Represents the `~/.config/ronin-db/databases.yml` configuration file.
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
#
|
34
|
+
module ConfigFile
|
35
|
+
# Path to the `~/.config/ronin-db/databases.yml` configuration file.
|
36
|
+
PATH = File.join(DB::Home::CONFIG_DIR,'databases.yml')
|
37
|
+
|
38
|
+
# Path to the default sqlite3 database file.
|
39
|
+
DEFAULT_DB_FILE = File.join(DB::Home::LOCAL_SHARE_DIR,'default.sqlite3')
|
40
|
+
|
41
|
+
# Default database configuration.
|
42
|
+
DEFAULT_CONFIG = {
|
43
|
+
default: {
|
44
|
+
adapter: 'sqlite3',
|
45
|
+
database: DEFAULT_DB_FILE
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
#
|
50
|
+
# Validates the loaded configuration data from the given path.
|
51
|
+
#
|
52
|
+
# @param [String] path
|
53
|
+
# The path the configuration data was loaded from.
|
54
|
+
#
|
55
|
+
# @param [Object] data
|
56
|
+
# The loaded configuration data.
|
57
|
+
#
|
58
|
+
# @raise [InvalidConfig]
|
59
|
+
# The configuration data is not a Hash, does not contain Symbol keys,
|
60
|
+
# or does not contain Hashes.
|
61
|
+
#
|
62
|
+
# @return [true]
|
63
|
+
# The configuration data is valid.
|
64
|
+
#
|
65
|
+
def self.validate(path,data)
|
66
|
+
unless data.kind_of?(Hash)
|
67
|
+
raise(InvalidConfig)
|
68
|
+
end
|
69
|
+
|
70
|
+
data.each do |key,value|
|
71
|
+
unless (key.kind_of?(Symbol) || key.kind_of?(String))
|
72
|
+
raise(InvalidConfig)
|
73
|
+
end
|
74
|
+
|
75
|
+
unless value.kind_of?(Hash)
|
76
|
+
raise(InvalidConfig)
|
77
|
+
end
|
78
|
+
|
79
|
+
value.each_key do |sub_key|
|
80
|
+
unless (sub_key.kind_of?(Symbol) || sub_key.kind_of?(String))
|
81
|
+
raise(InvalidConfig)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
return true
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Loads configuration data from the given path.
|
91
|
+
#
|
92
|
+
# @param [String] path
|
93
|
+
# The path to the configuration file.
|
94
|
+
#
|
95
|
+
# @return [Hash{Symbol => Hash}]
|
96
|
+
# The loaded configuration data.
|
97
|
+
#
|
98
|
+
# @raise [InvalidConfig]
|
99
|
+
# The configuration data is not a Hash, does not contain Symbol keys,
|
100
|
+
# or does not contain Hashes.
|
101
|
+
#
|
102
|
+
def self.load(path=PATH)
|
103
|
+
if File.file?(path)
|
104
|
+
config = YAML.load_file(path, symbolize_names: true).tap do |data|
|
105
|
+
validate(path,data)
|
106
|
+
end
|
107
|
+
|
108
|
+
DEFAULT_CONFIG.merge(config)
|
109
|
+
else
|
110
|
+
DEFAULT_CONFIG
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
#
|
115
|
+
# Opens the configuration file and edits it's contents.
|
116
|
+
#
|
117
|
+
# @yield [yaml]
|
118
|
+
# The given block will be given the loaded configuration data.
|
119
|
+
# Once the block has returned, the YAML configuration data will be
|
120
|
+
# written back to the file.
|
121
|
+
#
|
122
|
+
# @yieldparam [YAML::Store] yaml
|
123
|
+
# The loaded YAML configuration data.
|
124
|
+
#
|
125
|
+
def self.edit(path=PATH,&block)
|
126
|
+
store = YAML::Store.new(path)
|
127
|
+
|
128
|
+
store.transaction(&block)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
module Ronin
|
22
|
+
module DB
|
23
|
+
class UnknownDatabase < RuntimeError
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/core/home'
|
22
|
+
|
23
|
+
module Ronin
|
24
|
+
module DB
|
25
|
+
module Home
|
26
|
+
# The path to the `~/.config/ronin-db/` directory.
|
27
|
+
CONFIG_DIR = File.join(Core::Home::CONFIG_DIR,'ronin-db')
|
28
|
+
|
29
|
+
# The path to the `~/.cache/ronin-db/` directory.
|
30
|
+
CACHE_DIR = File.join(Core::Home::CACHE_DIR,'ronin-db')
|
31
|
+
|
32
|
+
# The path to the `~/.local/share/ronin-db/` directory.
|
33
|
+
LOCAL_SHARE_DIR = File.join(Core::Home::LOCAL_SHARE_DIR,'ronin-db')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
module Ronin
|
22
|
+
module DB
|
23
|
+
# Path to `ronin-db` root directory.
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
ROOT = File.expand_path(File.join(__dir__,'..','..','..'))
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
module Ronin
|
22
|
+
module DB
|
23
|
+
# ronin-db version
|
24
|
+
VERSION = '0.1.0.beta1'
|
25
|
+
end
|
26
|
+
end
|
data/lib/ronin/db.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# ronin-db - A common database library for managing and querying security data.
|
4
|
+
#
|
5
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
6
|
+
#
|
7
|
+
# ronin-db 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-db 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-db. If not, see <https://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'ronin/db/exceptions'
|
22
|
+
require 'ronin/db/config_file'
|
23
|
+
require 'ronin/db/version'
|
24
|
+
|
25
|
+
module Ronin
|
26
|
+
module DB
|
27
|
+
#
|
28
|
+
# Sets up the Database logger.
|
29
|
+
#
|
30
|
+
# @api semipublic
|
31
|
+
#
|
32
|
+
def self.logger=(new_logger)
|
33
|
+
require 'active_record'
|
34
|
+
ActiveRecord::Base.logger = new_logger
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# `ronin-db` database(s) configuration.
|
39
|
+
#
|
40
|
+
# @return [Hash{Symbol => Hash}]
|
41
|
+
#
|
42
|
+
# @api private
|
43
|
+
#
|
44
|
+
def self.config
|
45
|
+
@config ||= ConfigFile.load
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Migrate the database up and apply any pending migrations.
|
50
|
+
#
|
51
|
+
def self.migrate!
|
52
|
+
require 'ronin/db/migrations'
|
53
|
+
Migrations.migrate
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Only migrate the database if the database is empty, otherwise warn the
|
58
|
+
# user that there are pending migrations.
|
59
|
+
#
|
60
|
+
def self.migrate
|
61
|
+
require 'ronin/db/migrations'
|
62
|
+
|
63
|
+
if Migrations.current_version == 0
|
64
|
+
# auto-run the migrations when the database is empty
|
65
|
+
Migrations.migrate
|
66
|
+
elsif Migrations.needs_migration?
|
67
|
+
# warn the user that there are pending migrations, instead of
|
68
|
+
# auto-running migrations each time
|
69
|
+
warn "WARNING: Database requires migrating!"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Connects to the Database.
|
75
|
+
#
|
76
|
+
# @param [Symbol, Hash] uri
|
77
|
+
# The optional default repository to setup instead of {repositories}.
|
78
|
+
#
|
79
|
+
# @param [Boolean] migrate
|
80
|
+
# Specifies whether to hard or lazy migrate the database.
|
81
|
+
#
|
82
|
+
# @param [Boolean] load_models
|
83
|
+
# Specifies whether to load all models or just connect to the database.
|
84
|
+
#
|
85
|
+
# @raise [UnknownDatabase]
|
86
|
+
#
|
87
|
+
# @raise [ArgumentError]
|
88
|
+
#
|
89
|
+
# @api semipublic
|
90
|
+
#
|
91
|
+
def self.connect(database=:default, migrate: nil, load_models: true)
|
92
|
+
config = case database
|
93
|
+
when Hash
|
94
|
+
database
|
95
|
+
when Symbol
|
96
|
+
self.config.fetch(database) do
|
97
|
+
raise(UnknownDatabase,"unknown database: #{database.inspect}")
|
98
|
+
end
|
99
|
+
else
|
100
|
+
raise(ArgumentError,"#{self.class}.#{__method__} only accepts a Symbol or a Hash")
|
101
|
+
end
|
102
|
+
|
103
|
+
# load activerecord
|
104
|
+
require 'active_record'
|
105
|
+
|
106
|
+
# connect to the database
|
107
|
+
ActiveRecord::Base.establish_connection(config)
|
108
|
+
|
109
|
+
# migrate the database if necessary
|
110
|
+
if migrate == true then migrate!
|
111
|
+
else self.migrate
|
112
|
+
end
|
113
|
+
|
114
|
+
if load_models
|
115
|
+
# require and connect all models
|
116
|
+
require 'ronin/db/models'
|
117
|
+
Models.connect
|
118
|
+
end
|
119
|
+
|
120
|
+
return true
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/man/ronin-db-add.1
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
.\" Generated by kramdown-man 0.1.8
|
2
|
+
.\" https://github.com/postmodern/kramdown-man#readme
|
3
|
+
.TH ronin-db-add 1 "2022-01-01" Ronin DB "User Manuals"
|
4
|
+
.LP
|
5
|
+
.SH SYNOPSIS
|
6
|
+
.LP
|
7
|
+
.HP
|
8
|
+
\fBronin-db add\fR \[lB]\fIoptions\fP\[rB] \fINAME\fP \[lB]\fIURI\fP\[rB]
|
9
|
+
.LP
|
10
|
+
.SH DESCRIPTION
|
11
|
+
.LP
|
12
|
+
.PP
|
13
|
+
Lists entries in the \fB~/.config/ronin-db/database.yml\fR configuration file\.
|
14
|
+
.LP
|
15
|
+
.SH ARGUMENTS
|
16
|
+
.LP
|
17
|
+
.TP
|
18
|
+
\fINAME\fP
|
19
|
+
The name of the database to add\.
|
20
|
+
.LP
|
21
|
+
.TP
|
22
|
+
\fIURI\fP
|
23
|
+
The optional URI to the database to add\.
|
24
|
+
.LP
|
25
|
+
.SH OPTIONS
|
26
|
+
.LP
|
27
|
+
.TP
|
28
|
+
\fB-A\fR, \fB--adapter\fR \fBsqlite3|mysql2|postgres|...\fR
|
29
|
+
The adapter of the database to add\.
|
30
|
+
.LP
|
31
|
+
.TP
|
32
|
+
\fB--sqlite3\fR \fIFILE\fP
|
33
|
+
Alias for \fB--adapter sqlite3 --database\fR \fIFILE\fP\.
|
34
|
+
.LP
|
35
|
+
.TP
|
36
|
+
\fB--mysql2\fR
|
37
|
+
Alias for \fB--adapter mysql2\fR\.
|
38
|
+
.LP
|
39
|
+
.TP
|
40
|
+
\fB--postgresql\fR
|
41
|
+
Alias for \fB--adapter postgresql\fR\.
|
42
|
+
.LP
|
43
|
+
.TP
|
44
|
+
\fB-H\fR, \fB--host\fR \fIHOST\fP
|
45
|
+
The host of the database to add\.
|
46
|
+
.LP
|
47
|
+
.TP
|
48
|
+
\fB-p\fR, \fB--port\fR \fIPORT\fP
|
49
|
+
The port of the database to add\.
|
50
|
+
.LP
|
51
|
+
.TP
|
52
|
+
\fB-u\fR, \fB--username\fR \fIUSER\fP
|
53
|
+
The username to authenticate with for the database\.
|
54
|
+
.LP
|
55
|
+
.TP
|
56
|
+
\fB-P\fR, \fB--password\fR \fIPASSWORD\fP
|
57
|
+
The password to authenticate with for the database\.
|
58
|
+
.LP
|
59
|
+
.TP
|
60
|
+
\fB--read-password\fR
|
61
|
+
Reads the database password from STDIN\.
|
62
|
+
.LP
|
63
|
+
.TP
|
64
|
+
\fB-D\fR, \fB--database\fR \fINAME\fP\[or]\fIPATH\fP
|
65
|
+
The database name to connect to\. If \fB--adapter sqlite3\fR is given then a path
|
66
|
+
may be given instead\.
|
67
|
+
.LP
|
68
|
+
.TP
|
69
|
+
\fB-h\fR, \fB--help\fR
|
70
|
+
Print help information\.
|
71
|
+
.LP
|
72
|
+
.SH FILES
|
73
|
+
.LP
|
74
|
+
.TP
|
75
|
+
\fI\[ti]\[sl]\.config\[sl]ronin\-db\[sl]database\.yml\fP
|
76
|
+
The \fBronin-db\fR database(s) configuration file\.
|
77
|
+
.LP
|
78
|
+
.SH ENVIRONMENT
|
79
|
+
.LP
|
80
|
+
.PP
|
81
|
+
HOME
|
82
|
+
Specifies the home directory of the user\. Ronin will search for the
|
83
|
+
\fI\[ti]\[sl]\.config\[sl]ronin\-db\fP cache directory within the home directory\.
|
84
|
+
.LP
|
85
|
+
.PP
|
86
|
+
XDG\[ru]CONFIG\[ru]HOME
|
87
|
+
Specifies the cache directory to use\. Defaults to \fI\[Do]HOME\[sl]\.config\fP\.
|
88
|
+
.LP
|
89
|
+
.SH AUTHOR
|
90
|
+
.LP
|
91
|
+
.PP
|
92
|
+
Postmodern
|
93
|
+
.MT postmodern\.mod3\[at]gmail\.com
|
94
|
+
.ME
|
95
|
+
.LP
|
96
|
+
.SH SEE ALSO
|
97
|
+
.LP
|
98
|
+
.PP
|
99
|
+
ronin\-db(1) ronin\-db\-list(1) ronin\-db\-edit(1) ronin\-db\-remove(1)
|