inspec 1.26.0 → 1.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -32
- data/Rakefile +2 -2
- data/docs/resources/crontab.md.erb +17 -1
- data/docs/resources/http.md.erb +6 -3
- data/docs/resources/processes.md.erb +42 -2
- data/examples/inheritance/inspec.yml +1 -1
- data/examples/meta-profile/inspec.yml +1 -1
- data/examples/profile-attribute/inspec.yml +1 -1
- data/examples/profile/inspec.yml +1 -1
- data/lib/bundles/inspec-compliance/api.rb +8 -7
- data/lib/bundles/inspec-compliance/cli.rb +1 -1
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +1 -1
- data/lib/fetchers/local.rb +4 -1
- data/lib/fetchers/url.rb +23 -6
- data/lib/inspec/dependencies/cache.rb +0 -1
- data/lib/inspec/dependencies/requirement.rb +0 -1
- data/lib/inspec/metadata.rb +8 -2
- data/lib/inspec/plugins/fetcher.rb +0 -1
- data/lib/inspec/profile.rb +3 -3
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +0 -1
- data/lib/resources/command.rb +1 -1
- data/lib/resources/crontab.rb +24 -9
- data/lib/resources/host.rb +1 -1
- data/lib/resources/interface.rb +2 -1
- data/lib/resources/postgres.rb +45 -39
- data/lib/resources/processes.rb +17 -4
- data/lib/utils/find_files.rb +1 -1
- data/lib/utils/nginx_parser.rb +74 -0
- data/lib/utils/spdx.rb +13 -0
- data/lib/utils/spdx.txt +344 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a97d110626e91da96f74c2ade783985774f985c6
|
4
|
+
data.tar.gz: 9c6f406166b6e6592b1a43b69353c5bcaf8dc0ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d6ec986d6914cd057869cce5ba76c3c13c31a8bd044aefcaed4cf6a01cc4cf91ac0b3c118519e7c58c98b8ddd63bef0e04780c8099e1c68bacbfca218d8ae88
|
7
|
+
data.tar.gz: 6b20ef3baa24b1e3de67373101f6c356189ac990fd7789d889ac50fb6d9272f2889f45d61edbdcbe12d9ae4b75d3b302837b043536e7d1d57c5064b95ffa6312
|
data/CHANGELOG.md
CHANGED
@@ -1,24 +1,48 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [v1.
|
3
|
+
## [v1.27.0](https://github.com/chef/inspec/tree/v1.27.0) (2017-06-06)
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v1.26.0...v1.27.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Support special cases for crontab resource [\#1893](https://github.com/chef/inspec/pull/1893) ([arlimus](https://github.com/arlimus))
|
9
|
+
- add the Nginx parser [\#1888](https://github.com/chef/inspec/pull/1888) ([arlimus](https://github.com/arlimus))
|
10
|
+
- support FIPS 140-2 compliant digest calls [\#1887](https://github.com/chef/inspec/pull/1887) ([arlimus](https://github.com/arlimus))
|
11
|
+
- Add windows support to the `processes` resource [\#1878](https://github.com/chef/inspec/pull/1878) ([username-is-already-taken2](https://github.com/username-is-already-taken2))
|
12
|
+
- add bitbucket repo url handling [\#1866](https://github.com/chef/inspec/pull/1866) ([stubblyhead](https://github.com/stubblyhead))
|
13
|
+
- Commenting the `contain\_duplicates` deprecation until we have a good alternative [\#1860](https://github.com/chef/inspec/pull/1860) ([alexpop](https://github.com/alexpop))
|
14
|
+
- verifies that inspec.yml uses licenses in SPDX format [\#1858](https://github.com/chef/inspec/pull/1858) ([chris-rock](https://github.com/chris-rock))
|
15
|
+
- funtion to get pgsql version, exposed version, cluster and fixed session [\#1758](https://github.com/chef/inspec/pull/1758) ([aaronlippold](https://github.com/aaronlippold))
|
16
|
+
|
17
|
+
**Fixed bugs:**
|
18
|
+
|
19
|
+
- Use RubyGems version for habitat plan [\#1883](https://github.com/chef/inspec/pull/1883) ([smith](https://github.com/smith))
|
20
|
+
- Fix version method call for refresh token [\#1875](https://github.com/chef/inspec/pull/1875) ([ndobson](https://github.com/ndobson))
|
21
|
+
- Add warningaction to test-netconnection [\#1869](https://github.com/chef/inspec/pull/1869) ([seththoenen](https://github.com/seththoenen))
|
22
|
+
- Fix parameters to `find` commands [\#1856](https://github.com/chef/inspec/pull/1856) ([chris-rock](https://github.com/chris-rock))
|
23
|
+
- Fix command exists check on Windows with full paths [\#1850](https://github.com/chef/inspec/pull/1850) ([username-is-already-taken2](https://github.com/username-is-already-taken2))
|
24
|
+
- Fix compliance uploads when version is not present [\#1849](https://github.com/chef/inspec/pull/1849) ([adamleff](https://github.com/adamleff))
|
25
|
+
|
26
|
+
## [v1.26.0](https://github.com/chef/inspec/tree/v1.26.0) (2017-05-31)
|
4
27
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.25.1...v1.26.0)
|
5
28
|
|
6
29
|
**Implemented enhancements:**
|
7
30
|
|
31
|
+
- Bump default timeouts for `http` resource [\#1835](https://github.com/chef/inspec/pull/1835) ([schisamo](https://github.com/schisamo))
|
8
32
|
- Improvements to Habitat plan [\#1820](https://github.com/chef/inspec/pull/1820) ([smith](https://github.com/smith))
|
9
33
|
|
10
34
|
**Fixed bugs:**
|
11
35
|
|
12
|
-
-
|
36
|
+
- adjust localhost+sudo test output to train update [\#1873](https://github.com/chef/inspec/pull/1873) ([arlimus](https://github.com/arlimus))
|
37
|
+
- sudo-detection for target execution [\#1870](https://github.com/chef/inspec/pull/1870) ([arlimus](https://github.com/arlimus))
|
13
38
|
- bugfix: do not send nil to command on unsupported OS [\#1865](https://github.com/chef/inspec/pull/1865) ([arlimus](https://github.com/arlimus))
|
14
39
|
- bugfix: non-url servers with compliance login [\#1861](https://github.com/chef/inspec/pull/1861) ([arlimus](https://github.com/arlimus))
|
40
|
+
- Raise exception if profile target URL cannot be parsed [\#1853](https://github.com/chef/inspec/pull/1853) ([adamleff](https://github.com/adamleff))
|
41
|
+
- postgres relative path includes [\#1852](https://github.com/chef/inspec/pull/1852) ([aaronlippold](https://github.com/aaronlippold))
|
42
|
+
- Amended the processes resource to skip on windows [\#1851](https://github.com/chef/inspec/pull/1851) ([username-is-already-taken2](https://github.com/username-is-already-taken2))
|
43
|
+
- Fix assert that a gem is not installed [\#1844](https://github.com/chef/inspec/pull/1844) ([cattywampus](https://github.com/cattywampus))
|
15
44
|
- Habitat Profiles: redirect stderr to stdout [\#1826](https://github.com/chef/inspec/pull/1826) ([adamleff](https://github.com/adamleff))
|
16
45
|
|
17
|
-
**Closed issues:**
|
18
|
-
|
19
|
-
- Using Automate - `compliance\_profile\_name': undefined method `\[\]' for nil:NilClass \(NoMethodError\) seeing 1.25.1 Inspec [\#1848](https://github.com/chef/inspec/issues/1848)
|
20
|
-
- Missing filesystem size check for InSpec [\#1843](https://github.com/chef/inspec/issues/1843)
|
21
|
-
|
22
46
|
## [v1.25.1](https://github.com/chef/inspec/tree/v1.25.1) (2017-05-20)
|
23
47
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.25.0...v1.25.1)
|
24
48
|
|
@@ -41,7 +65,6 @@
|
|
41
65
|
**Fixed bugs:**
|
42
66
|
|
43
67
|
- read source code if profile is in tgz/zip [\#1816](https://github.com/chef/inspec/pull/1816) ([arlimus](https://github.com/arlimus))
|
44
|
-
- Update postgresql conf resource to accept include\_dir as a string as well as an array [\#1727](https://github.com/chef/inspec/pull/1727) ([elliott-davis](https://github.com/elliott-davis))
|
45
68
|
|
46
69
|
## [v1.24.0](https://github.com/chef/inspec/tree/v1.24.0) (2017-05-11)
|
47
70
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.23.0...v1.24.0)
|
@@ -56,7 +79,6 @@
|
|
56
79
|
- Add support for Windows auth in mssql\_resourcet [\#1786](https://github.com/chef/inspec/pull/1786) ([arlimus](https://github.com/arlimus))
|
57
80
|
- Allow mysql\_session to test databases on different hosts [\#1779](https://github.com/chef/inspec/pull/1779) ([aaronlippold](https://github.com/aaronlippold))
|
58
81
|
- Handle parse errors for attrs/secrets [\#1775](https://github.com/chef/inspec/pull/1775) ([adamleff](https://github.com/adamleff))
|
59
|
-
- Add an oracledb\_session resource [\#1751](https://github.com/chef/inspec/pull/1751) ([nsdavidson](https://github.com/nsdavidson))
|
60
82
|
|
61
83
|
## [v1.23.0](https://github.com/chef/inspec/tree/v1.23.0) (2017-05-04)
|
62
84
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.22.0...v1.23.0)
|
@@ -64,37 +86,14 @@
|
|
64
86
|
**Implemented enhancements:**
|
65
87
|
|
66
88
|
- Add command-line completions for fish shell [\#1760](https://github.com/chef/inspec/pull/1760) ([smith](https://github.com/smith))
|
67
|
-
- Error and exit when using --sudo locally [\#1741](https://github.com/chef/inspec/pull/1741) ([adamleff](https://github.com/adamleff))
|
68
|
-
|
69
|
-
**Fixed bugs:**
|
70
|
-
|
71
|
-
- Make the --no-color flag work for inspec exec [\#1749](https://github.com/chef/inspec/pull/1749) ([adamleff](https://github.com/adamleff))
|
72
|
-
- Fix xinetd resource failing when file cannot be read [\#1746](https://github.com/chef/inspec/pull/1746) ([adamleff](https://github.com/adamleff))
|
73
|
-
- Habitat profile bug fixes and improvements [\#1735](https://github.com/chef/inspec/pull/1735) ([rhass](https://github.com/rhass))
|
74
89
|
|
75
90
|
**Merged pull requests:**
|
76
91
|
|
77
92
|
- rake: lint before test [\#1755](https://github.com/chef/inspec/pull/1755) ([arlimus](https://github.com/arlimus))
|
78
|
-
- rename old deprecations that were meant for 1.0 [\#1737](https://github.com/chef/inspec/pull/1737) ([arlimus](https://github.com/arlimus))
|
79
|
-
- add `inspec.profile.file\(...\)` for profile files [\#1720](https://github.com/chef/inspec/pull/1720) ([arlimus](https://github.com/arlimus))
|
80
93
|
|
81
94
|
## [v1.22.0](https://github.com/chef/inspec/tree/v1.22.0) (2017-04-27)
|
82
95
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.21.0...v1.22.0)
|
83
96
|
|
84
|
-
**Implemented enhancements:**
|
85
|
-
|
86
|
-
- rename `parse\_config` options for clarity [\#1709](https://github.com/chef/inspec/issues/1709)
|
87
|
-
- rename SimpleConfig / parse\_config / parse\_config\_file options [\#1723](https://github.com/chef/inspec/pull/1723) ([arlimus](https://github.com/arlimus))
|
88
|
-
- Add matchers help to shell, clean up help output [\#1722](https://github.com/chef/inspec/pull/1722) ([adamleff](https://github.com/adamleff))
|
89
|
-
- provide `inspec.version` information [\#1719](https://github.com/chef/inspec/pull/1719) ([arlimus](https://github.com/arlimus))
|
90
|
-
- provide the `inspec` keyword [\#1718](https://github.com/chef/inspec/pull/1718) ([arlimus](https://github.com/arlimus))
|
91
|
-
- print and prettyprint the inspec backend class [\#1717](https://github.com/chef/inspec/pull/1717) ([arlimus](https://github.com/arlimus))
|
92
|
-
|
93
|
-
**Fixed bugs:**
|
94
|
-
|
95
|
-
- pretty-print multiline control descriptions [\#1711](https://github.com/chef/inspec/pull/1711) ([arlimus](https://github.com/arlimus))
|
96
|
-
- bugfix: unindent description misbehaviors [\#1707](https://github.com/chef/inspec/pull/1707) ([arlimus](https://github.com/arlimus))
|
97
|
-
|
98
97
|
## [v1.21.0](https://github.com/chef/inspec/tree/v1.21.0) (2017-04-24)
|
99
98
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.20.0...v1.21.0)
|
100
99
|
|
data/Rakefile
CHANGED
@@ -6,6 +6,7 @@ require 'bundler/gem_tasks'
|
|
6
6
|
require 'rake/testtask'
|
7
7
|
require_relative 'tasks/changelog'
|
8
8
|
require_relative 'tasks/maintainers'
|
9
|
+
require_relative 'tasks/spdx'
|
9
10
|
|
10
11
|
# The docs tasks rely on ruby-progressbar. If we can't load it, then don't
|
11
12
|
# load the docs tasks. This is necessary to allow this Rakefile to work
|
@@ -174,7 +175,7 @@ task :release_habitat do
|
|
174
175
|
raise "Please set the HAB_AUTH_TOKEN environment variable"
|
175
176
|
end
|
176
177
|
cmd = "echo #{version} > ./habitat/VERSION && "\
|
177
|
-
"hab
|
178
|
+
"hab pkg build . && " \
|
178
179
|
"hab pkg upload ./results/*.hart"
|
179
180
|
puts "--> #{cmd}"
|
180
181
|
sh('sh', '-c', cmd)
|
@@ -195,4 +196,3 @@ namespace :www do
|
|
195
196
|
exit(1)
|
196
197
|
end
|
197
198
|
end
|
198
|
-
|
@@ -4,7 +4,7 @@ title: About the crontab Resource
|
|
4
4
|
|
5
5
|
# crontab
|
6
6
|
|
7
|
-
Use the `crontab` InSpec audit resource to test the crontab entries for a particular user on the system.
|
7
|
+
Use the `crontab` InSpec audit resource to test the crontab entries for a particular user on the system. It recognizes special time strings (@yearly, @weekly, etc).
|
8
8
|
|
9
9
|
## Syntax
|
10
10
|
|
@@ -66,3 +66,19 @@ The following examples show how to use this InSpec audit resource.
|
|
66
66
|
describe crontab.where { command =~ /a partial command string/ } do
|
67
67
|
its('entries.length') { should cmp 1 }
|
68
68
|
end
|
69
|
+
|
70
|
+
### Test a special time string (i.e., @yearly /root/anual_report.sh)
|
71
|
+
|
72
|
+
describe crontab.commands('/root/anual_report.sh') do
|
73
|
+
its('hours') { should cmp '0' }
|
74
|
+
its('minutes') { should cmp '0' }
|
75
|
+
its('days') { should cmp '1' }
|
76
|
+
its('months') { should cmp '1' }
|
77
|
+
end
|
78
|
+
|
79
|
+
### Test @reboot case
|
80
|
+
|
81
|
+
describe crontab.commands('/root/reboot.sh') do
|
82
|
+
its('hours') { should cmp '-1' }
|
83
|
+
its('minutes') { should cmp '-1' }
|
84
|
+
end
|
data/docs/resources/http.md.erb
CHANGED
@@ -14,7 +14,7 @@ This will be corrected in a future version of InSpec. New InSpec releases are po
|
|
14
14
|
|
15
15
|
An `http` resource block declares the configuration settings to be tested:
|
16
16
|
|
17
|
-
describe http('url', auth: {user: 'user', pass: 'test'}, params: {params}, method: 'method', headers: {headers},
|
17
|
+
describe http('url', auth: {user: 'user', pass: 'test'}, params: {params}, method: 'method', headers: {headers}, data: data, open_timeout: 60, read_timeout: 60, ssl_verify: true) do
|
18
18
|
its('status') { should eq number }
|
19
19
|
its('body') { should eq 'body' }
|
20
20
|
its('headers.name') { should eq 'header' }
|
@@ -23,11 +23,14 @@ An `http` resource block declares the configuration settings to be tested:
|
|
23
23
|
where
|
24
24
|
|
25
25
|
* `('url')` is the url to test
|
26
|
-
* `{user: 'user', pass: 'test'}` may be specified for basic auth request
|
26
|
+
* `auth: { user: 'user', pass: 'test' }` may be specified for basic auth request
|
27
27
|
* `{params}` may be specified for http request parameters
|
28
28
|
* `'method'` may be specified for http request method (default to 'GET')
|
29
29
|
* `{headers}` may be specified for http request headers
|
30
|
-
* `
|
30
|
+
* `data` may be specified for http request body
|
31
|
+
* `open_timeout` may be specified for a timeout for opening connections (default to 60)
|
32
|
+
* `read_timeout` may be specified for a timeout for reading connections (default to 60)
|
33
|
+
* `ssl_verify` may be specified to enable or disable verification of SSL certificates (default to `true`)
|
31
34
|
|
32
35
|
## Matchers
|
33
36
|
|
@@ -60,18 +60,33 @@ The following examples show how to use this InSpec audit resource.
|
|
60
60
|
its('list.length') { should eq 1 }
|
61
61
|
end
|
62
62
|
|
63
|
-
### Test if the
|
63
|
+
### Test if the process is owned by a specifc user
|
64
64
|
|
65
65
|
describe processes('init') do
|
66
66
|
its('users') { should eq ['root'] }
|
67
67
|
end
|
68
68
|
|
69
|
+
describe processes('winlogon') do
|
70
|
+
its('users') { should cmp "NT AUTHORITY\\SYSTEM" }
|
71
|
+
end
|
72
|
+
|
73
|
+
|
69
74
|
### Test if a high-priority process is running
|
70
75
|
|
71
|
-
describe processes('
|
76
|
+
describe processes('linux_process') do
|
72
77
|
its('states') { should eq ['R<'] }
|
73
78
|
end
|
74
79
|
|
80
|
+
describe processes('windows_process') do
|
81
|
+
its('labels') { should cmp "High" }
|
82
|
+
end
|
83
|
+
|
84
|
+
### Test if a process exists on the system
|
85
|
+
|
86
|
+
describe processes('some_process') do
|
87
|
+
it { should exist }
|
88
|
+
end
|
89
|
+
|
75
90
|
### Test for a process using a specific Regexp
|
76
91
|
|
77
92
|
If the process name is too common for a string to uniquely find it,
|
@@ -81,3 +96,28 @@ needed.
|
|
81
96
|
describe processes(Regexp.new("/usr/local/bin/swap -d")) do
|
82
97
|
its('list.length') { should eq 1 }
|
83
98
|
end
|
99
|
+
|
100
|
+
### Notes for auditing Windows systems
|
101
|
+
|
102
|
+
Sometimes with system properties there isn't a direct comparison between different operating systems.
|
103
|
+
Most of the `property_name`'s do align between the different OS's.
|
104
|
+
|
105
|
+
There are however some exception's, for example, within linux `states` offers multiple properties.
|
106
|
+
Windows doesn't have direct comparison that is a single property so instead `states` is mapped to the property of `Responding`, This is a boolean true/false flag to help determine if the process is hung.
|
107
|
+
|
108
|
+
Below is a mapping table to help you understand what property the unix field maps to the windows `Get-Process` Property
|
109
|
+
|
110
|
+
| *unix ps field* | *windows PowerShell Property* |
|
111
|
+
|:---------------:|:-----------------------------:|
|
112
|
+
|labels |PriorityClass|
|
113
|
+
|pids |Id|
|
114
|
+
|cpus |CPU|
|
115
|
+
|mem |PM|
|
116
|
+
|vsz |VirtualMemorySize|
|
117
|
+
|rss |NPM|
|
118
|
+
|tty |SessionId|
|
119
|
+
|states |Responding|
|
120
|
+
|start |StartTime|
|
121
|
+
|time |TotalProcessorTime|
|
122
|
+
|users |UserName|
|
123
|
+
|commands |Path|
|
@@ -3,7 +3,7 @@ title: InSpec example inheritance
|
|
3
3
|
maintainer: Chef Software, Inc.
|
4
4
|
copyright: Chef Software, Inc.
|
5
5
|
copyright_email: support@chef.io
|
6
|
-
license: Apache
|
6
|
+
license: Apache-2.0
|
7
7
|
summary: Demonstrates the use of InSpec profile inheritance
|
8
8
|
version: 1.0.0
|
9
9
|
supports:
|
data/examples/profile/inspec.yml
CHANGED
@@ -3,7 +3,7 @@ title: InSpec Example Profile
|
|
3
3
|
maintainer: Chef Software, Inc.
|
4
4
|
copyright: Chef Software, Inc.
|
5
5
|
copyright_email: support@chef.io
|
6
|
-
license: Apache
|
6
|
+
license: Apache-2.0
|
7
7
|
summary: Demonstrates the use of InSpec Compliance Profile
|
8
8
|
version: 1.0.0
|
9
9
|
supports:
|
@@ -70,13 +70,14 @@ module Compliance
|
|
70
70
|
headers = get_headers(config)
|
71
71
|
response = Compliance::HTTP.get(url+'/version', headers, insecure)
|
72
72
|
return {} if response.code == '404'
|
73
|
+
|
73
74
|
data = response.body
|
75
|
+
return {} if data.nil? || data.empty?
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
77
|
+
parsed = JSON.parse(data)
|
78
|
+
return {} unless parsed.key?('version') && !parsed['version'].empty?
|
79
|
+
|
80
|
+
parsed
|
80
81
|
end
|
81
82
|
|
82
83
|
# verifies that a profile
|
@@ -203,11 +204,11 @@ module Compliance
|
|
203
204
|
end
|
204
205
|
|
205
206
|
def self.is_automate_server_pre_080?(config)
|
206
|
-
config['server_type'] == 'automate' && config['version'].
|
207
|
+
config['server_type'] == 'automate' && config['version'].nil?
|
207
208
|
end
|
208
209
|
|
209
210
|
def self.is_automate_server_080_and_later?(config)
|
210
|
-
config['server_type'] == 'automate' && !config['version'].
|
211
|
+
config['server_type'] == 'automate' && !config['version'].nil?
|
211
212
|
end
|
212
213
|
|
213
214
|
def self.is_automate_server?(config)
|
@@ -355,7 +355,7 @@ module Compliance
|
|
355
355
|
config['user'] = user
|
356
356
|
config['insecure'] = insecure
|
357
357
|
config['server_type'] = 'compliance'
|
358
|
-
config['version'] = Compliance::API.version(
|
358
|
+
config['version'] = Compliance::API.version(config)
|
359
359
|
|
360
360
|
if !verify
|
361
361
|
config.store
|
data/lib/fetchers/local.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
# author: Dominik Richter
|
3
3
|
# author: Christoph Hartmann
|
4
4
|
|
5
|
+
require 'openssl'
|
6
|
+
|
5
7
|
module Fetchers
|
6
8
|
class Local < Inspec.fetcher(1)
|
7
9
|
name 'local'
|
@@ -65,7 +67,8 @@ module Fetchers
|
|
65
67
|
|
66
68
|
def sha256
|
67
69
|
return nil if File.directory?(@target)
|
68
|
-
@archive_shasum ||=
|
70
|
+
@archive_shasum ||=
|
71
|
+
OpenSSL::Digest::SHA256.digest(File.read(@target)).unpack('H*')[0]
|
69
72
|
end
|
70
73
|
|
71
74
|
def resolved_source
|
data/lib/fetchers/url.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# author: Christoph Hartmann
|
4
4
|
|
5
5
|
require 'uri'
|
6
|
-
require '
|
6
|
+
require 'openssl'
|
7
7
|
require 'tempfile'
|
8
8
|
require 'open-uri'
|
9
9
|
|
@@ -37,8 +37,8 @@ module Fetchers
|
|
37
37
|
nil
|
38
38
|
end
|
39
39
|
|
40
|
-
# Transforms a browser github url to github tar url
|
41
|
-
# We distinguish between three different Github URL types:
|
40
|
+
# Transforms a browser github/bitbucket url to github/bitbucket tar url
|
41
|
+
# We distinguish between three different Github/Bitbucket URL types:
|
42
42
|
# - Master URL
|
43
43
|
# - Branch URL
|
44
44
|
# - Commit URL
|
@@ -46,22 +46,39 @@ module Fetchers
|
|
46
46
|
# master url:
|
47
47
|
# https://github.com/nathenharvey/tmp_compliance_profile/ is transformed to
|
48
48
|
# https://github.com/nathenharvey/tmp_compliance_profile/archive/master.tar.gz
|
49
|
+
# https://bitbucket.org/username/repo is transformed to
|
50
|
+
# https://bitbucket.org/username/repo/get/master.tar.gz
|
49
51
|
#
|
50
|
-
#
|
52
|
+
# branch:
|
51
53
|
# https://github.com/hardening-io/tests-os-hardening/tree/2.0 is transformed to
|
52
54
|
# https://github.com/hardening-io/tests-os-hardening/archive/2.0.tar.gz
|
55
|
+
# https://bitbucket.org/username/repo/branch/branchname is transformed to
|
56
|
+
# https://bitbucket.org/username/repo/get/newbranch.tar.gz
|
53
57
|
#
|
54
|
-
#
|
58
|
+
# commit:
|
55
59
|
# https://github.com/hardening-io/tests-os-hardening/tree/48bd4388ddffde68badd83aefa654e7af3231876
|
56
60
|
# is transformed to
|
57
61
|
# https://github.com/hardening-io/tests-os-hardening/archive/48bd4388ddffde68badd83aefa654e7af3231876.tar.gz
|
62
|
+
# https://bitbucket.org/username/repo/commits/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc is transformed to
|
63
|
+
# https://bitbucket.org/username/repo/get/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc.tar.gz
|
64
|
+
|
58
65
|
GITHUB_URL_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}
|
59
66
|
GITHUB_URL_WITH_TREE_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w-]+)/tree/(?<commit>[\w\.]+)(/)?$}
|
67
|
+
BITBUCKET_URL_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}
|
68
|
+
BITBUCKET_URL_BRANCH_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/branch/(?<branch>[\w\.]+)(/)?$}
|
69
|
+
BITBUCKET_URL_COMMIT_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/commits/(?<commit>[\w\.]+)(/)?$}
|
70
|
+
|
60
71
|
def self.transform(target)
|
61
72
|
transformed_target = if m = GITHUB_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
62
73
|
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/master.tar.gz"
|
63
74
|
elsif m = GITHUB_URL_WITH_TREE_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
64
75
|
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/#{m[:commit]}.tar.gz"
|
76
|
+
elsif m = BITBUCKET_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
77
|
+
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/master.tar.gz"
|
78
|
+
elsif m = BITBUCKET_URL_BRANCH_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
79
|
+
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{m[:branch]}.tar.gz"
|
80
|
+
elsif m = BITBUCKET_URL_COMMIT_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
81
|
+
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{m[:commit]}.tar.gz"
|
65
82
|
end
|
66
83
|
|
67
84
|
if transformed_target
|
@@ -101,7 +118,7 @@ module Fetchers
|
|
101
118
|
|
102
119
|
def sha256
|
103
120
|
file = @archive_path || temp_archive_path
|
104
|
-
Digest::SHA256.
|
121
|
+
OpenSSL::Digest::SHA256.digest(File.read(file)).unpack('H*')[0]
|
105
122
|
end
|
106
123
|
|
107
124
|
def file_type_from_remote(remote)
|