dradis-plugins 4.8.0 → 4.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cba7a2e144b2d99cb1cb3ed6433424e6e46c0c9b2ac4b92ba44d2d8c18e22a5
4
- data.tar.gz: 63fb037763ed258a8286c01a2430b4c61b8c70a3e79f5bf372f468a679c2dcb6
3
+ metadata.gz: a58f55546e5cdc567817057c51b984d0b7696168b23d558e14672cc96ee47c47
4
+ data.tar.gz: 5ec9b6f9447ba38c3683f6b1b043b4b335050e85c65cabf0f7a90d3e9795dbfc
5
5
  SHA512:
6
- metadata.gz: aae6bd486e5d39e78c7cef4731476ec3350a3dd73bd4dfac18061fd3dabd2a9d51a7045fd9c64a967c453000794d1d990a67f4d2ecc3bd77dc3b8646cfdd2039
7
- data.tar.gz: 861a9ef7afdcc8450f13abde042710e25770c6edd9ed25d860703180a3b280bdcdf0aca4a7a8e780c3e259c529c1c96a21359ecd6c7c7286974365fadad61a5e
6
+ metadata.gz: f10bf1639f13a54120880e99510e148c9c02b98371768209a00ee2e50547d7e2a5a256b76b11f5e8d74671cccdf12770daa12eb740532c9d6149f38f7fa6cdab
7
+ data.tar.gz: 78ba3a3f1e9ab31bde738e63832de8b3cc34bd1390976d5be45d71d11dd4659f23c5d878c7790231b4819b26e28f16e47142b3ea0a1da23a6c264241a9896547
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ v4.10.0 (September 2023)
2
+ - Add validations to the Export::BaseController
3
+ - Update gemspec links
4
+
5
+ v4.9.0 (June 2023)
6
+ - Fix deduplication of findings
7
+ - Store engine settings encrypted
8
+
1
9
  v4.8.0 (April 2023)
2
10
  - Add support for issue and content block states
3
11
 
@@ -2,7 +2,12 @@ module Dradis
2
2
  module Plugins
3
3
  module Export
4
4
  class BaseController < Rails.application.config.dradis.base_export_controller_class_name.to_s.constantize
5
+ include ProjectScoped
6
+ include UsageTracking if defined?(Dradis::Pro)
7
+
5
8
  before_action :validate_scope
9
+ before_action :validate_template
10
+ after_action :track_export, if: -> { defined?(Dradis::Pro) }
6
11
 
7
12
  protected
8
13
 
@@ -10,11 +15,40 @@ module Dradis
10
15
  params.permit(:project_id, :scope, :template)
11
16
  end
12
17
 
18
+ def validate_template
19
+ @template_file =
20
+ File.expand_path(File.join(templates_dir, export_params[:template]))
21
+
22
+ unless @template_file.starts_with?(templates_dir) && File.exists?(@template_file)
23
+ raise 'Something fishy is going on...'
24
+ end
25
+ end
26
+
13
27
  def validate_scope
14
- unless Dradis::Plugins::ContentService::Base::VALID_SCOPES.include?(params[:scope])
28
+ unless Dradis::Plugins::ContentService::Base::VALID_SCOPES.include?(export_params[:scope])
15
29
  raise 'Something fishy is going on...'
16
30
  end
17
31
  end
32
+
33
+ private
34
+
35
+ def engine_name
36
+ "#{self.class.to_s.deconstantize}::Engine".constantize.plugin_name.to_s
37
+ end
38
+
39
+ def templates_dir
40
+ @templates_dir ||= File.join(::Configuration::paths_templates_reports, engine_name)
41
+ end
42
+
43
+ def track_export
44
+ project = Project.includes(:evidence, :nodes).find(current_project.id)
45
+ track_usage('report.exported', {
46
+ exporter: engine_name,
47
+ issue_count: project.issues.size,
48
+ evidence_count: project.evidence.size,
49
+ node_count: project.nodes.in_tree.size
50
+ })
51
+ end
18
52
  end
19
53
  end
20
54
  end
@@ -4,7 +4,7 @@ require 'dradis/plugins/version'
4
4
 
5
5
  # Describe your gem and declare its dependencies:
6
6
  Gem::Specification.new do |spec|
7
- spec.platform = Gem::Platform::RUBY
7
+ spec.platform = Gem::Platform::RUBY
8
8
  spec.name = 'dradis-plugins'
9
9
  spec.version = Dradis::Plugins::VERSION::STRING
10
10
  spec.summary = 'Plugin manager for the Dradis Framework project.'
@@ -13,19 +13,13 @@ Gem::Specification.new do |spec|
13
13
  spec.license = 'GPL-2'
14
14
 
15
15
  spec.authors = ['Daniel Martin']
16
- spec.email = ['etd@nomejortu.com']
17
- spec.homepage = 'http://dradisframework.org'
16
+ spec.homepage = 'http://dradis.com'
18
17
 
19
18
  spec.files = `git ls-files`.split($\)
20
19
  spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
21
 
23
- spec.add_development_dependency 'bundler', '>= 2.2.33'
24
- spec.add_development_dependency 'rake', '>= 12.3.3'
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'rake'
25
24
  spec.add_development_dependency 'rspec-rails'
26
-
27
- # By not including Rails as a dependency, we can use the gem with different
28
- # versions of Rails (a sure recipe for disaster, I'm sure), which is needed
29
- # until we bump Dradis Pro to 4.1.
30
- # s.add_dependency 'rails', '~> 4.1.1'
31
25
  end
@@ -3,14 +3,19 @@ module Dradis::Plugins
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- delegate :settings, to: :instance
6
+ delegate :encrypted_settings, :settings, to: :instance
7
7
 
8
8
  def settings_namespace
9
- @settings_namespace || plugin_name
9
+ @settings_namespace ||= plugin_name
10
+ end
11
+
12
+ def addon_encrypted_settings(namespace = nil, &block)
13
+ @settings_namespace = namespace
14
+ yield self if block_given?
10
15
  end
11
16
 
12
17
  def addon_settings(namespace = nil, &block)
13
- @settings_namespace = namespace if namespace
18
+ @settings_namespace = namespace
14
19
  yield self if block_given?
15
20
  end
16
21
 
@@ -19,8 +24,12 @@ module Dradis::Plugins
19
24
  end
20
25
  end
21
26
 
27
+ def encrypted_settings
28
+ @encrypted_settings ||= Dradis::Plugins::Settings.new(self.class.settings_namespace, adapter: :encrypted_configuration)
29
+ end
30
+
22
31
  def settings
23
- @settings ||= Dradis::Plugins::Settings.new(self.class.settings_namespace)
32
+ @settings ||= Dradis::Plugins::Settings.new(self.class.settings_namespace, adapter: :db)
24
33
  end
25
34
  end
26
35
  end
@@ -76,7 +76,7 @@ module Dradis::Plugins::ContentService
76
76
  # the issue library cache has been initialized.
77
77
  def issue_cache
78
78
  @issue_cache ||= begin
79
- issues_map = all_issues.map do |issue|
79
+ issues_map = project.issues.map do |issue|
80
80
  cache_key = [
81
81
  issue.fields['plugin'],
82
82
  issue.fields['plugin_id']
@@ -7,7 +7,7 @@ module Dradis
7
7
 
8
8
  module VERSION
9
9
  MAJOR = 4
10
- MINOR = 8
10
+ MINOR = 10
11
11
  TINY = 0
12
12
  PRE = nil
13
13
 
@@ -0,0 +1,30 @@
1
+ module Dradis::Plugins::Settings::Adapters
2
+ class Db
3
+ def initialize(namespace)
4
+ @namespace = namespace.to_s
5
+ end
6
+
7
+ def delete(key)
8
+ Configuration.find_by(name: namespaced_key(key)).destroy
9
+ end
10
+
11
+ def exists?(key)
12
+ Configuration.exists?(name: namespaced_key(key))
13
+ end
14
+
15
+ def read(key)
16
+ Configuration.find_by(name: namespaced_key(key))&.value
17
+ end
18
+
19
+ def write(key, value)
20
+ db_setting = Configuration.find_or_create_by(name: namespaced_key(key))
21
+ db_setting.update_attribute(:value, value)
22
+ end
23
+
24
+ private
25
+
26
+ def namespaced_key(key)
27
+ [@namespace, key.to_s.underscore].join(':')
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,58 @@
1
+ module Dradis::Plugins::Settings::Adapters
2
+ class EncryptedConfiguration
3
+ attr_writer :config_path
4
+
5
+ def initialize(namespace)
6
+ @namespace = namespace
7
+ end
8
+
9
+ def delete(key)
10
+ if exists?(key)
11
+ configuration.config[@namespace].delete(key)
12
+ configuration.write(configuration.config.to_yaml)
13
+ end
14
+ end
15
+
16
+ def exists?(key)
17
+ !!configuration.config[@namespace]&.key?(key)
18
+ end
19
+
20
+ def read(key)
21
+ configuration.config.fetch(@namespace, {}).fetch(key, nil)
22
+ end
23
+
24
+ def write(key, value)
25
+ configuration.config[@namespace] ||= {}
26
+ configuration.config[@namespace][key] = value
27
+ configuration.write(configuration.config.to_yaml)
28
+ end
29
+
30
+ def key_path=(string_or_pathname)
31
+ @key_path = Pathname.new(string_or_pathname)
32
+ end
33
+
34
+ private
35
+ def config_path
36
+ @config_path ||= Rails.root.join('config', 'shared', 'dradis-plugins.yml.enc')
37
+ end
38
+
39
+ def configuration
40
+ @configuration ||= begin
41
+ create_key unless key_path.exist?
42
+
43
+ ActiveSupport::EncryptedConfiguration.new(
44
+ config_path: config_path, key_path: key_path,
45
+ env_key: 'RAILS_MASTER_KEY', raise_if_missing_key: true
46
+ )
47
+ end
48
+ end
49
+
50
+ def create_key
51
+ File.write(key_path, ActiveSupport::EncryptedConfiguration.generate_key)
52
+ end
53
+
54
+ def key_path
55
+ @key_path ||= Rails.root.join('config', 'shared', 'dradis-plugins.key')
56
+ end
57
+ end
58
+ end
@@ -2,10 +2,11 @@ module Dradis::Plugins
2
2
  class Settings
3
3
  attr_reader :namespace
4
4
 
5
- def initialize(namespace)
5
+ def initialize(namespace, adapter: :db)
6
6
  @namespace = namespace
7
7
  @dirty_options ||= {}
8
8
  @default_options ||= { enabled: true }.with_indifferent_access
9
+ assign_adapter(adapter)
9
10
  end
10
11
 
11
12
  def respond_to?(name)
@@ -16,14 +17,18 @@ module Dradis::Plugins
16
17
  @default_options.except(:enabled).map do |key, value|
17
18
  {
18
19
  name: key.to_sym,
19
- value: value = dirty_or_db_setting_or_default(key.to_sym),
20
+ value: value = dirty_or_stored_or_default(key.to_sym),
20
21
  default: is_default?(key, value)
21
22
  }
22
23
  end.sort_by{ |o| o[:name] }
23
24
  end
24
25
 
25
26
  def save
26
- @dirty_options.reject{ |k, v| v.present? && v == db_setting(k) }.each{ |k, v| write_to_db(k, v) }
27
+ @dirty_options.reject do |k, v|
28
+ v.present? && v == read(k)
29
+ end.each do |k, v|
30
+ write(k, v)
31
+ end
27
32
  end
28
33
 
29
34
  def update_settings(opts = {})
@@ -36,7 +41,7 @@ module Dradis::Plugins
36
41
  def reset_defaults!
37
42
  @dirty_options = {}
38
43
  @default_options.each do |key, value|
39
- Configuration.where(name: namespaced_key(key)).each(&:destroy)
44
+ delete(key) if exists?(key)
40
45
  end
41
46
  end
42
47
 
@@ -45,6 +50,8 @@ module Dradis::Plugins
45
50
  end
46
51
 
47
52
  private
53
+ attr_reader :adapter
54
+ delegate :delete, :exists?, :read, :write, to: :adapter
48
55
 
49
56
  # ---------------------------------------------------- Method missing magic
50
57
  def method_missing(name, *args, &blk)
@@ -53,39 +60,33 @@ module Dradis::Plugins
53
60
  elsif name.to_s =~ /=$/
54
61
  @dirty_options[$`.to_sym] = args.first
55
62
  elsif @default_options.key?(name)
56
- dirty_or_db_setting_or_default(name)
63
+ dirty_or_stored_or_default(name)
57
64
  else
58
65
  super
59
66
  end
60
67
  end
61
68
  # --------------------------------------------------- /Method missing magic
62
69
 
63
- def write_to_db(key, value)
64
- db_setting = Configuration.find_or_create_by(name: namespaced_key(key))
65
- db_setting.update_attribute(:value, value)
66
- end
67
-
68
-
69
- def db_setting(key)
70
- Configuration.where(name: namespaced_key(key)).first.value rescue nil
70
+ def assign_adapter(name)
71
+ adapters = { db: Adapters::Db, encrypted_configuration: Adapters::EncryptedConfiguration }
72
+ if adapters.key?(name)
73
+ @adapter = adapters[name].new(namespace)
74
+ else
75
+ raise ArgumentError
76
+ end
71
77
  end
72
78
 
73
79
  # This method looks up in the configuration repository DB to see if the
74
80
  # user has provided a value for the given setting. If not, the default
75
81
  # value is returned.
76
- def dirty_or_db_setting_or_default(key)
82
+ def dirty_or_stored_or_default(key)
77
83
  if @dirty_options.key?(key)
78
84
  @dirty_options[key]
79
- elsif Configuration.exists?(name: namespaced_key(key))
80
- db_setting(key)
85
+ elsif exists?(key)
86
+ read(key)
81
87
  else
82
88
  @default_options[key]
83
89
  end
84
90
  end
85
-
86
- # Builds namespaced key
87
- def namespaced_key(key)
88
- [self.namespace.to_s, key.to_s.underscore].join(":")
89
- end
90
91
  end
91
92
  end
@@ -3,21 +3,20 @@ module Dradis
3
3
  class TemplateService
4
4
  attr_accessor :logger, :template, :templates_dir
5
5
 
6
- def initialize(args={})
6
+ def initialize(args = {})
7
7
  @plugin = args.fetch(:plugin)
8
8
  @templates_dir = args[:templates_dir] || default_templates_dir
9
9
  end
10
10
 
11
-
12
11
  # For a given entry, return a text blob resulting from applying the
13
12
  # chosen template to the supplied entry.
14
- def process_template(args={})
13
+ def process_template(args = {})
15
14
  self.template = args[:template]
16
15
  data = args[:data]
17
16
 
18
17
  processor = @plugin::FieldProcessor.new(data: data)
19
18
 
20
- template_source.gsub( /%(.*?)%/ ) do |field|
19
+ template_source.gsub(/%(\S*?)%/) do |field|
21
20
  name = field[1..-2]
22
21
  if fields.include?(name)
23
22
  processor.value(field: name)
@@ -27,7 +26,6 @@ module Dradis
27
26
  end
28
27
  end
29
28
 
30
-
31
29
  # ---------------------------------------------- Plugin Manager interface
32
30
 
33
31
  # This lists the fields defined by this plugin that can be used in the
@@ -51,7 +49,7 @@ module Dradis
51
49
 
52
50
  # Set the plugin's item template. This is used by the Plugins Manager
53
51
  # to force the plugin to use the new_template (provided by the user)
54
- def set_template(args={})
52
+ def set_template(args = {})
55
53
  template = args[:template]
56
54
  content = args[:content]
57
55
 
@@ -77,7 +75,7 @@ module Dradis
77
75
  # refresh cached version if modified since last read
78
76
  if template_mtime > @sources[template][:mtime]
79
77
  @template[template][:mtime] = template_mtime
80
- @template[template][:content] = File.read( template_file )
78
+ @template[template][:content] = File.read(template_file)
81
79
  end
82
80
  else
83
81
  @sources[template] = {
@@ -84,6 +84,8 @@ require 'dradis/plugins/upload'
84
84
  # Common functionality
85
85
  require 'dradis/plugins/configurable'
86
86
  require 'dradis/plugins/settings'
87
+ require 'dradis/plugins/settings/adapters/db'
88
+ require 'dradis/plugins/settings/adapters/encrypted_configuration'
87
89
  require 'dradis/plugins/templates'
88
90
  require 'dradis/plugins/thor'
89
91
  require 'dradis/plugins/thor_helper'
data/spec/engine_spec.rb CHANGED
@@ -13,11 +13,14 @@ describe Dradis::Plugins::Base do
13
13
 
14
14
  describe '#enabled?' do
15
15
  it 'returns default value' do
16
- expect(TestEngine.enabled?).to eq(false)
16
+ expect(TestEngine.enabled?).to eq(true)
17
17
  end
18
18
  end
19
19
  describe '#enable!' do
20
20
  it 'sets enabled to true' do
21
+ TestEngine.settings.enabled = false
22
+ TestEngine.settings.save
23
+
21
24
  expect { TestEngine.enable! }.to change {
22
25
  TestEngine.enabled?
23
26
  }.from(false).to(true)
@@ -25,7 +28,9 @@ describe Dradis::Plugins::Base do
25
28
  end
26
29
  describe '#disable!' do
27
30
  it 'sets enabled to false' do
28
- TestEngine.enable!
31
+ TestEngine.settings.enabled = true
32
+ TestEngine.settings.save
33
+
29
34
  expect { TestEngine.disable! }.to change {
30
35
  TestEngine.enabled?
31
36
  }.from(true).to(false)
@@ -20,7 +20,7 @@ describe Dradis::Plugins::ContentService::Boards do
20
20
  node = create(:node, project: project)
21
21
  node_board = create(:board, node: node, project: project)
22
22
 
23
- boards = service.all_boards
23
+ boards = service.project_boards
24
24
 
25
25
  expect(boards).to include(board)
26
26
  expect(boards).to_not include(node_board)
@@ -0,0 +1,112 @@
1
+ #
2
+ # This spec must be run from Dradis root dir.
3
+ #
4
+ # Configuration init from:
5
+ # https://github.com/rails/rails/blob/main/activesupport/test/encrypted_configuration_test.rb
6
+ #
7
+ require 'rails_helper'
8
+
9
+ describe Dradis::Plugins::Settings::Adapters::EncryptedConfiguration do
10
+
11
+ subject do
12
+ ec = Dradis::Plugins::Settings::Adapters::EncryptedConfiguration.new(:rspec)
13
+ ec.config_path = @credentials_config_path
14
+ ec.key_path = @credentials_key_path
15
+ ec
16
+ end
17
+
18
+ context 'With an empty config file' do
19
+ before(:all) do
20
+ @tmpdir = Dir.mktmpdir('config-')
21
+ @credentials_config_path = File.join(@tmpdir, 'empty.yml.enc')
22
+ @credentials_key_path = File.join(@tmpdir, 'empty.key')
23
+ end
24
+
25
+ describe '#delete' do
26
+ it 'becomes a no-op' do
27
+ expect { subject.delete(:key) }.to_not raise_error
28
+ end
29
+ end
30
+
31
+ describe '#exists' do
32
+ it 'is always false' do
33
+ expect(subject.exists?(:key)).to be(false)
34
+ expect(subject.exists?(:key2)).to be(false)
35
+ end
36
+ end
37
+
38
+ describe '#read' do
39
+ it 'always returns nil' do
40
+ expect(subject.read(:key)).to eq(nil)
41
+ expect(subject.read(:key2)).to eq(nil)
42
+ end
43
+ end
44
+
45
+ describe '#write' do
46
+ it 'inits the namespace and stores the setting' do
47
+ expect { subject.write(:key, :value) }.to_not raise_error
48
+ expect(File.size(@credentials_config_path)).to_not be(0)
49
+
50
+ File.unlink @credentials_config_path
51
+ end
52
+ end
53
+ end
54
+
55
+ context 'With a working config file' do
56
+ DEFAULT_CONFIG = { rspec: { key: :lorem_ipsum, key2: :dolor_sit } }.to_yaml.freeze
57
+
58
+ before(:all) do
59
+ @tmpdir = Dir.mktmpdir('config-')
60
+ @credentials_config_path = File.join(@tmpdir, 'credentials.yml.enc')
61
+ @credentials_key_path = File.join(@tmpdir, 'master.key')
62
+
63
+ File.write(@credentials_key_path, ActiveSupport::EncryptedConfiguration.generate_key)
64
+
65
+ @credentials = ActiveSupport::EncryptedConfiguration.new(
66
+ config_path: @credentials_config_path, key_path: @credentials_key_path,
67
+ env_key: 'RAILS_MASTER_KEY', raise_if_missing_key: true
68
+ )
69
+
70
+ @credentials.write(DEFAULT_CONFIG)
71
+ end
72
+
73
+ after(:all) do
74
+ FileUtils.rm_rf @tmpdir
75
+ end
76
+
77
+ describe '#delete' do
78
+ it 'removes a value from disk' do
79
+ subject.delete(:key2)
80
+
81
+ @credentials.instance_variable_set('@config', nil)
82
+ expect(@credentials.config[:rspec].key?(:key)).to be(true)
83
+ expect(@credentials.config[:rspec].key?(:key2)).to be(false)
84
+ @credentials.write(DEFAULT_CONFIG)
85
+ end
86
+ end
87
+
88
+ describe '#exists' do
89
+ it 'finds an existing value' do
90
+ expect(subject.exists?(:key)).to be(true)
91
+ end
92
+ it 'detects an inexisting value' do
93
+ expect(subject.exists?(:key3)).to be(false)
94
+ end
95
+ end
96
+
97
+ describe '#read' do
98
+ it 'loads an already existing value' do
99
+ expect(subject.read(:key)).to eq(:lorem_ipsum)
100
+ end
101
+ end
102
+
103
+ describe '#write' do
104
+ it 'stores a value on disk' do
105
+ subject.write(:new_key, :new_value)
106
+ @credentials.instance_variable_set('@config', nil)
107
+ expect(@credentials.config[:rspec][:new_key]).to eq(:new_value)
108
+ @credentials.write(DEFAULT_CONFIG)
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,28 @@
1
+ require 'rails_helper'
2
+
3
+ # To run, execute from Dradis main app folder:
4
+ # bin/rspec [dradis-plugins path]/spec/lib/dradis/plugins/template_service_spec.rb
5
+ describe Dradis::Plugins::TemplateService do
6
+ describe '#process_template' do
7
+ let(:data) { double }
8
+ let(:plugin) { Dradis::Plugins::Nessus }
9
+ let(:template_service) do
10
+ Dradis::Plugins::TemplateService.new(plugin: plugin)
11
+ end
12
+
13
+ context 'liquid' do
14
+ before do
15
+ allow(data).to receive(:name).and_return('ReportHost')
16
+ allow(template_service).to receive(:template_source).and_return(
17
+ "{% if issue.evidence %}\n{% end if %}"
18
+ )
19
+ end
20
+
21
+ it 'does not parse the liquid data as fields' do
22
+ expect(template_service).to_not receive(:fields)
23
+
24
+ template_service.process_template(data: data)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -19,7 +19,6 @@ describe Dradis::Plugins::Settings do
19
19
  end
20
20
 
21
21
  it "sets and return default values" do
22
- expect(TestEngine::settings.enabled).to eq(false)
23
22
  expect(TestEngine::settings.host).to eq('localhost')
24
23
  expect(TestEngine::settings.port).to eq(80)
25
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dradis-plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.0
4
+ version: 4.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Martin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-12 00:00:00.000000000 Z
11
+ date: 2023-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.2.33
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.2.33
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 12.3.3
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 12.3.3
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec-rails
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,8 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Required dependency for Dradis Framework.
56
- email:
57
- - etd@nomejortu.com
56
+ email:
58
57
  executables: []
59
58
  extensions: []
60
59
  extra_rdoc_files: []
@@ -94,6 +93,8 @@ files:
94
93
  - lib/dradis/plugins/import/filters/base.rb
95
94
  - lib/dradis/plugins/import/result.rb
96
95
  - lib/dradis/plugins/settings.rb
96
+ - lib/dradis/plugins/settings/adapters/db.rb
97
+ - lib/dradis/plugins/settings/adapters/encrypted_configuration.rb
97
98
  - lib/dradis/plugins/template_service.rb
98
99
  - lib/dradis/plugins/templates.rb
99
100
  - lib/dradis/plugins/thor.rb
@@ -108,13 +109,15 @@ files:
108
109
  - spec/lib/dradis/plugins/content_service/boards_spec.rb
109
110
  - spec/lib/dradis/plugins/content_service/content_blocks_spec.rb
110
111
  - spec/lib/dradis/plugins/content_service/issues_spec.rb
112
+ - spec/lib/dradis/plugins/settings/adapters/encrypted_configuration_spec.rb
113
+ - spec/lib/dradis/plugins/template_service_spec.rb
111
114
  - spec/settings_spec.rb
112
115
  - spec/spec_helper.rb
113
- homepage: http://dradisframework.org
116
+ homepage: http://dradis.com
114
117
  licenses:
115
118
  - GPL-2
116
119
  metadata: {}
117
- post_install_message:
120
+ post_install_message:
118
121
  rdoc_options: []
119
122
  require_paths:
120
123
  - lib
@@ -129,8 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
132
  - !ruby/object:Gem::Version
130
133
  version: '0'
131
134
  requirements: []
132
- rubygems_version: 3.3.7
133
- signing_key:
135
+ rubygems_version: 3.1.4
136
+ signing_key:
134
137
  specification_version: 4
135
138
  summary: Plugin manager for the Dradis Framework project.
136
139
  test_files:
@@ -139,5 +142,7 @@ test_files:
139
142
  - spec/lib/dradis/plugins/content_service/boards_spec.rb
140
143
  - spec/lib/dradis/plugins/content_service/content_blocks_spec.rb
141
144
  - spec/lib/dradis/plugins/content_service/issues_spec.rb
145
+ - spec/lib/dradis/plugins/settings/adapters/encrypted_configuration_spec.rb
146
+ - spec/lib/dradis/plugins/template_service_spec.rb
142
147
  - spec/settings_spec.rb
143
148
  - spec/spec_helper.rb