dradis-html_export 3.18.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 44a40f1bc271b8211123ed58ea69212e1bc4c8837da97d76194ebaa1485f29be
4
+ data.tar.gz: f58b4edfa716c6c77b3a7e264684777705cc46da2cf87f9bb02eb660ee6fa70e
5
+ SHA512:
6
+ metadata.gz: 4e39c16ea0cdd301e70c106bc815372ff53fb8de163f6d6a5278869532988b6cb50ec6c0ad18f63786f5b6fc4655f1cbb008c1d75dd0f87e2d63cf4304c18d3a
7
+ data.tar.gz: 45a5b725f445b9849d2844124bbdc16604e77169e198eaed1c7e2b29cbb82119246c0026796c7e5091a0d129de4f8f6eccdff605ef21662f8676a591a9527b9d
@@ -0,0 +1,16 @@
1
+ ### Steps to reproduce
2
+
3
+ Help us help you, how can we reproduce the problem?
4
+
5
+ ### Expected behavior
6
+ Tell us what should happen
7
+
8
+ ### Actual behavior
9
+ Tell us what happens instead
10
+
11
+ ### System configuration
12
+ **Dradis version**:
13
+
14
+ **Ruby version**:
15
+
16
+ **OS version**:
@@ -0,0 +1,36 @@
1
+ ### Summary
2
+
3
+ Provide a general description of the code changes in your pull
4
+ request... were there any bugs you had fixed? If so, mention them. If
5
+ these bugs have open GitHub issues, be sure to tag them here as well,
6
+ to keep the conversation linked together.
7
+
8
+
9
+ ### Other Information
10
+
11
+ If there's anything else that's important and relevant to your pull
12
+ request, mention that information here. This could include
13
+ benchmarks, or other information.
14
+
15
+ Thanks for contributing to Dradis!
16
+
17
+
18
+ ### Copyright assignment
19
+
20
+ Collaboration is difficult with commercial closed source but we want
21
+ to keep as much of the OSS ethos as possible available to users
22
+ who want to fix it themselves.
23
+
24
+ In order to unambiguously own and sell Dradis Framework commercial
25
+ products, we must have the copyright associated with the entire
26
+ codebase. Any code you create which is merged must be owned by us.
27
+ That's not us trying to be a jerks, that's just the way it works.
28
+
29
+ Please review the [CONTRIBUTING.md](https://github.com/dradis/dradis-ce/blob/master/CONTRIBUTING.md)
30
+ file for the details.
31
+
32
+ You can delete this section, but the following sentence needs to
33
+ remain in the PR's description:
34
+
35
+ > I assign all rights, including copyright, to any future Dradis
36
+ > work by myself to Security Roots.
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ spec/dummy
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ /vendor/
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,11 @@
1
+ rvm:
2
+ - 1.9.3
3
+ notifications:
4
+ irc:
5
+ on_success: change
6
+ on_failure: always
7
+ channels:
8
+ - "irc.freenode.org#dradis"
9
+
10
+ bundler_args: --path vendor/bundle
11
+ script: "bundle exec rake spec"
@@ -0,0 +1,53 @@
1
+ ## Dradis Framework 3.18 (July, 2020) ##
2
+
3
+ * No changes.
4
+
5
+ ## Dradis Framework 3.17 (May, 2020) ##
6
+
7
+ * Render report using main app's ApplicationController#render.
8
+
9
+ ## Dradis Framework 3.16 (February, 2020) ##
10
+
11
+ * No changes.
12
+
13
+ ## Dradis Framework 3.15 (November, 2019) ##
14
+
15
+ * No changes.
16
+
17
+
18
+ ## Dradis Framework 3.14 (August, 2019) ##
19
+
20
+ * No changes.
21
+
22
+ ## Dradis Framework 3.13 (June, 2019) ##
23
+
24
+ * No changes.
25
+
26
+ ## Dradis Framework 3.12 (March, 2019) ##
27
+
28
+ * No changes.
29
+
30
+ ## Dradis Framework 3.11 (November, 2018) ##
31
+
32
+ * No changes.
33
+
34
+ ## Dradis Framework 3.10 (August, 2018) ##
35
+
36
+ * Security fix: update RedCloth to 4.3.2
37
+ * Fix issue sorting
38
+
39
+ ## Dradis Framework 3.9 (January, 2018) ##
40
+
41
+ * Updated rendering html as in Rails 5.1 (`render html:`)
42
+
43
+ ## Dradis Framework 3.8 (September, 2017) ##
44
+
45
+ * No changes.
46
+
47
+ ## Dradis Framework 3.7 (July, 2017) ##
48
+
49
+ * No changes.
50
+
51
+ ## Dradis Framework 3.6 (March, 2017) ##
52
+
53
+ * No changes.
@@ -0,0 +1,3 @@
1
+ # Plugin contribution guidelines
2
+
3
+ See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradisframework/blob/master/CONTRIBUTING.md)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dradis-html_export.gemspec
4
+ gemspec
@@ -0,0 +1,28 @@
1
+ # HTML export plugin for the Dradis Framework
2
+
3
+ [![Build Status](https://secure.travis-ci.org/dradis/dradis-html_export.png?branch=master)](http://travis-ci.org/dradis/dradis-html_export)
4
+
5
+
6
+ This plugin generates an HTML report for the notes in your [Dradis Framework](https://github.com/dradis/dradisframework) repository.
7
+
8
+ The plugin requires Dradis 3.0 or higher.
9
+
10
+
11
+ ## More information
12
+
13
+ See the Dradis Framework's [README.md](https://github.com/dradis/dradisframework/blob/master/README.md)
14
+
15
+
16
+ ## Contributing
17
+
18
+ See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradisframework/blob/master/CONTRIBUTING.md)
19
+
20
+
21
+ ## License
22
+
23
+ Dradis Framework and all its components are released under [GNU General Public License version 2.0](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file.
24
+
25
+
26
+ ## Feature requests and bugs
27
+
28
+ Please use the [Dradis Framework issue tracker](https://github.com/dradis/dradis-ce/issues) for add-on improvements and bug reports.
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,19 @@
1
+ module Dradis
2
+ module Plugins
3
+ module HtmlExport
4
+ class BaseController < Dradis::Plugins::Export::BaseController
5
+ # This method cycles throw the notes in the reporting category and creates
6
+ # a simple HTML report with them.
7
+ #
8
+ # It uses the template at: ./vendor/plugins/html_export/template.html.erb
9
+ def index
10
+ exporter = Dradis::Plugins::HtmlExport::Exporter.new(export_options)
11
+ html = exporter.export
12
+
13
+ render html: html.html_safe
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ Dradis::Plugins::HtmlExport::Engine.routes.draw do
2
+ root to: 'base#index'
3
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/dradis/plugins/html_export/version', __FILE__)
3
+ version = Dradis::Plugins::HtmlExport::version
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.platform = Gem::Platform::RUBY
7
+ spec.name = "dradis-html_export"
8
+ spec.version = version
9
+ spec.required_ruby_version = '>= 1.9.3'
10
+ spec.license = 'GPL-2'
11
+
12
+ spec.authors = ['Daniel Martin']
13
+ spec.email = ["<etd@nomejortu.com>"]
14
+ spec.description = %q{Export to HTML plugin for the Dradis Framework}
15
+ spec.summary = %q{Dradis HTML export plugin}
16
+ spec.homepage = 'http://dradisframework.org'
17
+
18
+ spec.files = `git ls-files`.split($\)
19
+ spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ # gem.add_dependency 'dradis_core', version
24
+ spec.add_dependency 'dradis-plugins', '~> 3.6'
25
+
26
+ # Note markup
27
+ spec.add_dependency 'rails_autolink', '~> 1.1'
28
+ spec.add_dependency 'RedCloth', '~> 4.3.2'
29
+
30
+ # gem.add_development_dependency 'capybara', '~> 1.1.3'
31
+ # gem.add_development_dependency 'database_cleaner'
32
+ # gem.add_development_dependency 'factory_girl_rails'
33
+ # gem.add_development_dependency 'rspec-rails', '~> 2.11.0'
34
+ # gem.add_development_dependency 'sqlite3'
35
+ end
@@ -0,0 +1,9 @@
1
+ # Hook to the framework base clases
2
+ require 'dradis-plugins'
3
+
4
+ # Load supporting classes
5
+ require 'rails_autolink'
6
+ require 'redcloth'
7
+
8
+ # Load this add-on's engine
9
+ require 'dradis/plugins/html_export'
@@ -0,0 +1,10 @@
1
+ require 'dradis/plugins/html_export/engine'
2
+ require 'dradis/plugins/html_export/exporter'
3
+ require 'dradis/plugins/html_export/version'
4
+
5
+ module Dradis
6
+ module Plugins
7
+ module HtmlExport
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,31 @@
1
+ module Dradis
2
+ module Plugins
3
+ module HtmlExport
4
+ class Engine < ::Rails::Engine
5
+
6
+ # Standard Rails Engine stuff
7
+ isolate_namespace Dradis::Plugins::HtmlExport
8
+ engine_name 'dradis_html_export'
9
+
10
+ # use rspec for tests
11
+ config.generators do |g|
12
+ g.test_framework :rspec
13
+ end
14
+
15
+ # Connect to the Framework
16
+ include Dradis::Plugins::Base
17
+
18
+ # plugin_name 'HTML export'
19
+ provides :export
20
+ description 'Generate advanced HTML reports'
21
+
22
+
23
+ initializer 'dradis-html_export.mount_engine' do
24
+ Rails.application.routes.append do
25
+ mount Dradis::Plugins::HtmlExport::Engine => '/export/html'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,98 @@
1
+ module Dradis
2
+ module Plugins
3
+ module HtmlExport
4
+
5
+ class Exporter < Dradis::Plugins::Export::Base
6
+
7
+ def export(args = {})
8
+ log_report
9
+
10
+ # Render template
11
+ ApplicationController.render(
12
+ file: options.fetch(:template),
13
+ layout: false,
14
+ locals: {
15
+ categorized_issues: categorized_issues,
16
+ content_service: content_service,
17
+ issues: issues,
18
+ nodes: nodes,
19
+ notes: notes,
20
+ project: project,
21
+ reporting_cat: content_service.report_category,
22
+ tags: tags,
23
+ title: title,
24
+ user: options[:user]
25
+ }
26
+ )
27
+ end
28
+
29
+ private
30
+ def log_report
31
+ logger.debug { "Report title: #{title}" }
32
+ logger.debug { "Template properties define a sort field: #{sort_field}" }
33
+
34
+ if issues&.any?
35
+ logger.debug { "Found #{issues.count} issues affecting #{nodes.count} nodes" }
36
+ else
37
+ logger.warn { 'No issue library node found in this project' }
38
+ end
39
+
40
+ logger.debug { "Found #{notes.count} notes assigned to the reporting category." }
41
+ end
42
+
43
+ def nodes
44
+ # FIXME: This is an ugly piece of code and the list of nodes should
45
+ # come from the ContentService.
46
+ @nodes ||= issues.map(&:evidence).flatten.map(&:node).uniq
47
+ end
48
+
49
+ def notes
50
+ @notes ||= content_service.all_notes
51
+ end
52
+
53
+ def issues
54
+ @issues ||= sort_issues content_service.all_issues.includes(:tags)
55
+ end
56
+
57
+ def categorized_issues
58
+ @categorized_issues ||= tags
59
+ .each_with_object({}) do |tag, hash|
60
+ hash[tag.id] = issues.select { |issue| issue.tags.include?(tag) }
61
+ end
62
+ .tap do |hash|
63
+ hash[:untagged] = issues.select { |issue| issue.tags.empty? }
64
+ end
65
+ end
66
+
67
+ def sort_field
68
+ @sort_field ||= begin
69
+ template_path = options.fetch(:template)
70
+ properties = ::ReportTemplateProperties.find_by_template_file(File.basename(template_path)) rescue nil
71
+ properties&.sort_field
72
+ end
73
+ end
74
+
75
+ def sort_issues(unsorted_issues)
76
+ return unsorted_issues unless unsorted_issues.any? && sort_field
77
+
78
+ # FIXME: Assume the Field :type is :number, so cast .to_f and sort
79
+ unsorted_issues.sort do |a, b|
80
+ b.fields.fetch(sort_field, '0').to_f <=> a.fields.fetch(sort_field, '0').to_f
81
+ end
82
+ end
83
+
84
+ def tags
85
+ @tags ||= project.tags
86
+ end
87
+
88
+ def title
89
+ @title ||= if Dradis.constants.include?(:Pro)
90
+ "Dradis Professional Edition v#{Dradis::Pro.version}"
91
+ else
92
+ "Dradis Community Edition v#{Dradis::CE.version}"
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,19 @@
1
+ module Dradis
2
+ module Plugins
3
+ module HtmlExport
4
+ # Returns the version of the currently loaded Frontend as a <tt>Gem::Version</tt>
5
+ def self.gem_version
6
+ Gem::Version.new VERSION::STRING
7
+ end
8
+
9
+ module VERSION
10
+ MAJOR = 3
11
+ MINOR = 18
12
+ TINY = 0
13
+ PRE = nil
14
+
15
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'gem_version'
2
+
3
+ module Dradis
4
+ module Plugins
5
+ module HtmlExport
6
+ # Returns the version of the currently loaded HtmlExport as a
7
+ # <tt>Gem::Version</tt>.
8
+ def self.version
9
+ gem_version
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ class HtmlExportTasks < Thor
2
+ include Rails.application.config.dradis.thor_helper_module
3
+
4
+ namespace "dradis:plugins:html"
5
+
6
+ desc 'export', 'export the current repository structure as an HTML document'
7
+ method_option :output, required: false, type: :string, desc: "the report file to create (if ends in .html), or directory to create it in"
8
+ method_option :template, required: true, type: :string, desc: "the template file to use. If not provided the value of the 'advanced_word_export:docx' setting will be used."
9
+
10
+ def export
11
+ require 'config/environment'
12
+
13
+ # The options we'll end up passing to the Processor class
14
+ opts = {}
15
+
16
+ report_path = options.output || Rails.root
17
+ unless report_path.to_s =~ /\.html\z/
18
+ date = DateTime.now.strftime("%Y-%m-%d")
19
+ sequence = Dir.glob(File.join(report_path, "dradis-report_#{date}_*.html")).collect { |a| a.match(/_([0-9]+)\.html\z/)[1].to_i }.max || 0
20
+ report_path = File.join(report_path, "dradis-report_#{date}_#{sequence + 1}.html")
21
+ end
22
+
23
+ if template = options.template
24
+ shell.error("Template file doesn't exist") && exit(1) unless File.exists?(template)
25
+ task_options[:template] = template
26
+ end
27
+
28
+ detect_and_set_project_scope
29
+
30
+ exporter = Dradis::Plugins::HtmlExport::Exporter.new(task_options)
31
+ html = exporter.export
32
+
33
+ File.open(report_path, 'w') do |f|
34
+ f << html
35
+ end
36
+
37
+ logger.info{ "Report file created at:\n\t#{report_path}" }
38
+ end
39
+
40
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "HTML Export" do
4
+ it "presents the note text in the report layout" do
5
+ Dradis::Core::VERSION::STRING.should eq('3.0.0.beta')
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../dummy/config/environment", __FILE__)
4
+
5
+ require 'rspec/rails'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ require 'database_cleaner'
12
+ require 'factory_girl_rails'
13
+
14
+
15
+ RSpec.configure do |config|
16
+
17
+ # Capybara javascript drivers require transactional fixtures set to false,
18
+ # and we just use DatabaseCleaner to cleanup after each test instead.
19
+ # Without transactional fixtures set to false none of the records created to
20
+ # setup a test will be available to the browser, which runs under a seperate
21
+ # server instance.
22
+ config.use_transactional_fixtures = false
23
+
24
+ config.before(:each) do
25
+ if example.metadata[:js]
26
+ DatabaseCleaner.strategy = :truncation
27
+ else
28
+ DatabaseCleaner.strategy = :transaction
29
+ end
30
+ end
31
+
32
+ config.before(:each) do
33
+ DatabaseCleaner.start
34
+ end
35
+
36
+ config.after(:each) do
37
+ DatabaseCleaner.clean
38
+ end
39
+ end
@@ -0,0 +1,46 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <title><%= title %></title>
6
+ <style type="text/css">
7
+ html{color:#000;background:#FFF}
8
+ body,div,ul,ol,li,h1,h2,h3{margin:0;padding:0}
9
+ li{list-style:none;}
10
+ h1,h2,h3{font-size:100%;font-weight:bold;}
11
+
12
+ body{padding:10px; font-family: "trebuchet ms", helvetica, sans-serif;}
13
+ h1{border-bottom: 1px solid #CCC; margin:2ex 0; font-size: 120%; font-weight: bold; }
14
+ h2{text-align:center;}
15
+ li{margin-left: 40px;}
16
+ ul{list-style-type: square;}
17
+ ol{list-style-type: decimal;}
18
+ ul, ol{margin-bottom: 2ex;}
19
+ .note{border-bottom: 1px solid #ddd; margin-bottom: 10px; padding-bottom: 10px;}
20
+ #footer{border-top: 1px solid #ccc;text-align: right;padding-right: 69px;min-height: 64px;height: auto !important;height: 64px;background: url('../images/logo_tiny.png') 100% 50% no-repeat;}
21
+ </style>
22
+ </head>
23
+ <body>
24
+ <h1><%= title %></h1>
25
+
26
+ <section>
27
+ <h2>Issues</h2>
28
+ <% issues.each do |issue| %>
29
+ <div class="note"><%= markup(issue.text) %></div>
30
+ <% end %>
31
+ </section>
32
+
33
+ <section>
34
+ <h2>Notes assigned to the <%= reporting_cat.name %> category</h2>
35
+ <% notes.each do |note| %>
36
+ <div class="note"><%= markup(note.text) %></div>
37
+ <% end %>
38
+ </section>
39
+
40
+ <div id="footer">
41
+ <br/>
42
+ effective collaboration<br/>
43
+ <a href="http://dradisframework.org">http://dradisframework.org</a>
44
+ </div>
45
+ </body>
46
+ </html>
@@ -0,0 +1,146 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+
8
+ <title><%= title %></title>
9
+ <style type="text/css">
10
+ /* Sticky footer styles
11
+ /* See:
12
+ /* http://getbootstrap.com/examples/sticky-footer/
13
+ -------------------------------------------------- */
14
+ html {
15
+ position: relative;
16
+ min-height: 100%;
17
+ }
18
+ body {
19
+ /* Margin bottom by footer height */
20
+ margin-bottom: 60px;
21
+ padding-bottom: 60px;
22
+ }
23
+ #footer {
24
+ position: absolute;
25
+ bottom: 0;
26
+ width: 100%;
27
+ /* Set the fixed height of the footer here */
28
+ height: 60px;
29
+ background-color: #f5f5f5;
30
+ }
31
+
32
+
33
+ /* Custom page CSS
34
+ -------------------------------------------------- */
35
+ /* Not required for template or sticky footer method. */
36
+
37
+ .container {
38
+ padding: 0 15px;
39
+ }
40
+ .container .text-muted {
41
+ margin: 20px 0;
42
+ }
43
+ #footer2{border-top: 1px solid #ccc;text-align: right;padding-right: 69px;min-height: 64px;height: auto !important;height: 64px;background: url('/assets/logopro_tiny.png') 100% 50% no-repeat;}
44
+ </style>
45
+
46
+ <!-- Latest compiled and minified CSS -->
47
+ <!-- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> -->
48
+ <link rel="stylesheet" href="/assets//bootstrap.css">
49
+
50
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
51
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
52
+ <!--[if lt IE 9]>
53
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
54
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
55
+ <![endif]-->
56
+ </head>
57
+ <body>
58
+ <noscript>
59
+ <div class="alert alert-danger">
60
+ <p><strong>Warning</strong>: this report template loads jQuery and Bootstrap JS files from their CDNs, but JavaScript seems to be disabled.</p>
61
+ </div>
62
+ </noscript>
63
+
64
+ <div class="container">
65
+
66
+ <h1><%= title %></h1>
67
+
68
+ <h2>Project notes</h2>
69
+ <p class="lead">In this section you'll find any notes assigned to the <strong>Report category</strong>.</p>
70
+ <% notes.each do |note| %>
71
+ <div class="panel panel-default">
72
+ <div class="panel-body">
73
+ <%= markup(note.text) %>
74
+ </div>
75
+ </div>
76
+ <% end %>
77
+
78
+
79
+ <h2>Project issues</h2>
80
+ <p class="lead">In this section you'll find your project's Issues.</p>
81
+ <% issues.each do |issue| %>
82
+ <div class="panel panel-default">
83
+ <div class="panel-body">
84
+ <%= markup(issue.text) %>
85
+
86
+ <h3>Assets affected by this issue</h3>
87
+ <% if issue.affected.empty? %>
88
+ <p class="well">None so far.</p>
89
+ <% else %>
90
+ <div class="row">
91
+ <div class="col-md-3 evidence-sidebar">
92
+ <ul class="nav nav-list evidence-sidenav">
93
+ <% issue.evidence_by_node.each do |node, instances| %>
94
+ <li><a href="#evidence_for_<%= node.id %>"><i class="glyphicon glyphicon-<%= ['folder-close','hdd'][node.type_id] %>"></i> <%= node.label %> (<%= pluralize instances.count, 'instance' %>)</a></li>
95
+ <% end %>
96
+ </ul>
97
+ </div>
98
+
99
+ <div class="col-md-9">
100
+ <% issue.evidence_by_node.each do |node, instances| %>
101
+ <section id="evidence_for_#{node.id}">
102
+ <% if instances.count == 1 %>
103
+ <div class="content-textile" id="node_<%= node.id %>_instance_0">
104
+ <%= markup(instances.first.content) %>
105
+ </div>
106
+ <% else %>
107
+ <ul class="nav nav-tabs">
108
+ <% instances.each_with_index do |evidence, i| %>
109
+ <li class="<%= 'active' if i==0 %>"><a href="#node_<%= node.id %>_instance_<%= i %>" data-toggle="tab">Instance <%= i %></a></li>
110
+ <% end %>
111
+ </ul>
112
+
113
+ <div class="tab-content">
114
+ <% instances.each_with_index do |evidence, i| %>
115
+ <div class="content-textile tab-pane<%= ' active' if i==0 %>" id="node_<%= node.id %>_instance_<%= i %>">
116
+ <%= markup(evidence.content) %>
117
+ </div>
118
+ <% end %>
119
+ </div>
120
+ <% end %>
121
+
122
+ </section>
123
+ <% end %>
124
+ </div>
125
+ </div>
126
+ <% end %>
127
+ </div>
128
+ </div>
129
+ <% end %>
130
+
131
+ </div>
132
+
133
+ <div id="footer">
134
+ <div class="container">
135
+ <p class="text-muted text-center"><%= title%> - <a href="http://dradisframework.org">http://dradisframework.org</a></p>
136
+ </div>
137
+ </div>
138
+
139
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
140
+ <!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> -->
141
+ <script src="/assets/jquery.js"></script>
142
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
143
+ <!-- <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script> -->
144
+ <script src="/assets/bootstrap.js"></script>
145
+ </body>
146
+ </html>
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dradis-html_export
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.18.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Martin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dradis-plugins
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails_autolink
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: RedCloth
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.3.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.3.2
55
+ description: Export to HTML plugin for the Dradis Framework
56
+ email:
57
+ - "<etd@nomejortu.com>"
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".github/issue_template.md"
63
+ - ".github/pull_request_template.md"
64
+ - ".gitignore"
65
+ - ".rspec"
66
+ - ".travis.yml"
67
+ - CHANGELOG.md
68
+ - CONTRIBUTING.md
69
+ - Gemfile
70
+ - README.md
71
+ - Rakefile
72
+ - app/controllers/dradis/plugins/html_export/base_controller.rb
73
+ - config/routes.rb
74
+ - dradis-html_export.gemspec
75
+ - lib/dradis-html_export.rb
76
+ - lib/dradis/plugins/html_export.rb
77
+ - lib/dradis/plugins/html_export/engine.rb
78
+ - lib/dradis/plugins/html_export/exporter.rb
79
+ - lib/dradis/plugins/html_export/gem_version.rb
80
+ - lib/dradis/plugins/html_export/version.rb
81
+ - lib/tasks/thorfile.rb
82
+ - spec/requests/html_export_spec.rb
83
+ - spec/spec_helper.rb
84
+ - templates/basic.html.erb
85
+ - templates/default_dradis_template_v3.0.html.erb
86
+ homepage: http://dradisframework.org
87
+ licenses:
88
+ - GPL-2
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 1.9.3
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 3.1.2
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Dradis HTML export plugin
109
+ test_files:
110
+ - spec/requests/html_export_spec.rb
111
+ - spec/spec_helper.rb