license-acceptance 0.2.10 → 2.1.13
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 +4 -4
- data/Gemfile +17 -1
- data/config/product_info.toml +41 -10
- data/lib/license_acceptance/acceptor.rb +107 -50
- data/lib/license_acceptance/cli_flags/mixlib_cli.rb +2 -2
- data/lib/license_acceptance/cli_flags/thor.rb +3 -3
- data/lib/license_acceptance/config.rb +6 -4
- data/lib/license_acceptance/logger.rb +1 -1
- data/lib/license_acceptance/product.rb +15 -8
- data/lib/license_acceptance/product_reader.rb +32 -17
- data/lib/license_acceptance/strategy/argument.rb +45 -0
- data/lib/license_acceptance/strategy/base.rb +7 -0
- data/lib/license_acceptance/strategy/environment.rb +39 -0
- data/lib/license_acceptance/strategy/file.rb +101 -0
- data/lib/license_acceptance/strategy/prompt.rb +111 -0
- data/lib/license_acceptance/strategy/provided_value.rb +31 -0
- data/lib/license_acceptance/version.rb +1 -1
- metadata +20 -137
- data/Gemfile.lock +0 -94
- data/Rakefile +0 -6
- data/lib/license_acceptance/arg_acceptance.rb +0 -32
- data/lib/license_acceptance/env_acceptance.rb +0 -26
- data/lib/license_acceptance/file_acceptance.rb +0 -97
- data/lib/license_acceptance/prompt_acceptance.rb +0 -106
- data/spec/license_acceptance/acceptor_spec.rb +0 -272
- data/spec/license_acceptance/arg_acceptance_spec.rb +0 -57
- data/spec/license_acceptance/cli_flags/mixlib_cli_spec.rb +0 -14
- data/spec/license_acceptance/cli_flags/thor_spec.rb +0 -14
- data/spec/license_acceptance/config_spec.rb +0 -111
- data/spec/license_acceptance/env_acceptance_spec.rb +0 -65
- data/spec/license_acceptance/file_acceptance_spec.rb +0 -121
- data/spec/license_acceptance/product_reader_spec.rb +0 -139
- data/spec/license_acceptance/product_spec.rb +0 -13
- data/spec/license_acceptance/prompt_acceptance_spec.rb +0 -100
- data/spec/spec_helper.rb +0 -25
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
require "date"
|
|
2
|
+
autoload :YAML, "yaml"
|
|
3
|
+
require "fileutils" unless defined?(FileUtils)
|
|
4
|
+
require "etc" unless defined?(Etc)
|
|
5
|
+
require_relative "../logger"
|
|
6
|
+
require_relative "base"
|
|
7
|
+
|
|
8
|
+
module LicenseAcceptance
|
|
9
|
+
module Strategy
|
|
10
|
+
|
|
11
|
+
# Read and write marker files that show acceptance.
|
|
12
|
+
class File < Base
|
|
13
|
+
include Logger
|
|
14
|
+
|
|
15
|
+
attr_reader :config
|
|
16
|
+
|
|
17
|
+
def initialize(config)
|
|
18
|
+
@config = config
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
INVOCATION_TIME = DateTime.now.freeze
|
|
22
|
+
|
|
23
|
+
# For all the given products in the product set, search all possible locations for the
|
|
24
|
+
# license acceptance files.
|
|
25
|
+
def accepted?(product_relationship)
|
|
26
|
+
searching = [product_relationship.parent] + product_relationship.children
|
|
27
|
+
missing_licenses = searching.clone
|
|
28
|
+
logger.debug("Searching for the following licenses: #{missing_licenses.map(&:id)}")
|
|
29
|
+
|
|
30
|
+
searching.each do |product|
|
|
31
|
+
config.license_locations.each do |loc|
|
|
32
|
+
f = ::File.join(loc, product.filename)
|
|
33
|
+
if ::File.exist?(f)
|
|
34
|
+
logger.debug("Found license #{product.filename} at #{f}")
|
|
35
|
+
missing_licenses.delete(product)
|
|
36
|
+
break
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
break if missing_licenses.empty?
|
|
40
|
+
end
|
|
41
|
+
logger.debug("Missing licenses remaining: #{missing_licenses.map(&:id)}")
|
|
42
|
+
missing_licenses
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def persist(product_relationship, missing_licenses)
|
|
46
|
+
parent = product_relationship.parent
|
|
47
|
+
parent_version = product_relationship.parent_version
|
|
48
|
+
root_dir = config.persist_location
|
|
49
|
+
|
|
50
|
+
unless Dir.exist?(root_dir)
|
|
51
|
+
begin
|
|
52
|
+
FileUtils.mkdir_p(root_dir)
|
|
53
|
+
rescue StandardError => e
|
|
54
|
+
msg = "Could not create license directory #{root_dir}"
|
|
55
|
+
logger.info "#{msg}\n\t#{e.message}\n\t#{e.backtrace.join("\n\t")}"
|
|
56
|
+
return [e]
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
errs = []
|
|
61
|
+
if missing_licenses.include?(parent)
|
|
62
|
+
err = persist_license(root_dir, parent, parent, parent_version)
|
|
63
|
+
errs << err unless err.nil?
|
|
64
|
+
end
|
|
65
|
+
product_relationship.children.each do |child|
|
|
66
|
+
if missing_licenses.include?(child)
|
|
67
|
+
err = persist_license(root_dir, child, parent, parent_version)
|
|
68
|
+
errs << err unless err.nil?
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
errs
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def persist_license(folder_path, product, parent, parent_version)
|
|
77
|
+
path = ::File.join(folder_path, product.filename)
|
|
78
|
+
logger.info("Persisting a license for #{product.pretty_name} at path #{path}")
|
|
79
|
+
::File.open(path, ::File::WRONLY | ::File::CREAT | ::File::EXCL) do |license_file|
|
|
80
|
+
contents = {
|
|
81
|
+
id: product.id,
|
|
82
|
+
name: product.pretty_name,
|
|
83
|
+
date_accepted: INVOCATION_TIME.iso8601,
|
|
84
|
+
accepting_product: parent.id,
|
|
85
|
+
accepting_product_version: parent_version,
|
|
86
|
+
user: Etc.getlogin,
|
|
87
|
+
file_format: 1,
|
|
88
|
+
}
|
|
89
|
+
contents = Hash[contents.map { |k, v| [k.to_s, v] }]
|
|
90
|
+
license_file << YAML.dump(contents)
|
|
91
|
+
end
|
|
92
|
+
nil
|
|
93
|
+
rescue StandardError => e
|
|
94
|
+
msg = "Could not persist license to #{path}"
|
|
95
|
+
logger.info "#{msg}\n\t#{e.message}\n\t#{e.backtrace.join("\n\t")}"
|
|
96
|
+
e
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
autoload :TTY, "tty-prompt"
|
|
2
|
+
require "pastel" unless defined?(Pastel)
|
|
3
|
+
require_relative "../logger"
|
|
4
|
+
require_relative "base"
|
|
5
|
+
require "timeout" unless defined?(Timeout)
|
|
6
|
+
|
|
7
|
+
module LicenseAcceptance
|
|
8
|
+
module Strategy
|
|
9
|
+
|
|
10
|
+
# Interactive prompt for accepting and persistence license acceptance, or failing with custom exit code
|
|
11
|
+
class Prompt < Base
|
|
12
|
+
include Logger
|
|
13
|
+
|
|
14
|
+
attr_reader :output
|
|
15
|
+
|
|
16
|
+
def initialize(config)
|
|
17
|
+
@output = config.output
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
WIDTH = 50
|
|
21
|
+
PASTEL = Pastel.new
|
|
22
|
+
BORDER = "+---------------------------------------------+".freeze
|
|
23
|
+
YES = PASTEL.green.bold("yes")
|
|
24
|
+
CHECK = PASTEL.green("✔")
|
|
25
|
+
|
|
26
|
+
def request(missing_licenses, &persist_callback)
|
|
27
|
+
logger.debug("Requesting a license for #{missing_licenses.map(&:id)}")
|
|
28
|
+
c = missing_licenses.size
|
|
29
|
+
s = c > 1 ? "s" : ""
|
|
30
|
+
|
|
31
|
+
acceptance_question = "Do you accept the #{c} product license#{s} (#{YES}/no)?"
|
|
32
|
+
output.puts <<~EOM
|
|
33
|
+
#{BORDER}
|
|
34
|
+
Chef License Acceptance
|
|
35
|
+
|
|
36
|
+
Before you can continue, #{c} product license#{s}
|
|
37
|
+
must be accepted. View the license at
|
|
38
|
+
https://www.chef.io/end-user-license-agreement/
|
|
39
|
+
|
|
40
|
+
License#{s} that need accepting:
|
|
41
|
+
* #{missing_licenses.map(&:pretty_name).join("\n * ")}
|
|
42
|
+
|
|
43
|
+
#{acceptance_question}
|
|
44
|
+
|
|
45
|
+
EOM
|
|
46
|
+
|
|
47
|
+
if ask(output, c, s, persist_callback)
|
|
48
|
+
output.puts BORDER
|
|
49
|
+
return true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
output.puts <<~EOM
|
|
53
|
+
|
|
54
|
+
If you do not accept this license you will
|
|
55
|
+
not be able to use Chef products.
|
|
56
|
+
|
|
57
|
+
#{acceptance_question}
|
|
58
|
+
|
|
59
|
+
EOM
|
|
60
|
+
|
|
61
|
+
answer = ask(output, c, s, persist_callback)
|
|
62
|
+
if answer != "yes"
|
|
63
|
+
output.puts BORDER
|
|
64
|
+
end
|
|
65
|
+
answer
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def ask(output, c, s, persist_callback)
|
|
71
|
+
logger.debug("Attempting to request interactive prompt on TTY")
|
|
72
|
+
prompt = TTY::Prompt.new(track_history: false, active_color: :bold, interrupt: :exit, output: output)
|
|
73
|
+
|
|
74
|
+
answer = "no"
|
|
75
|
+
begin
|
|
76
|
+
Timeout.timeout(60, PromptTimeout) do
|
|
77
|
+
answer = prompt.ask(">") do |q|
|
|
78
|
+
q.modify :down, :trim
|
|
79
|
+
q.required true
|
|
80
|
+
q.messages[:required?] = "You must enter 'yes' or 'no'"
|
|
81
|
+
q.validate(/^\s*(yes|no)\s*$/i)
|
|
82
|
+
q.messages[:valid?] = "You must enter 'yes' or 'no'"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
rescue PromptTimeout
|
|
86
|
+
prompt.unsubscribe(prompt.reader)
|
|
87
|
+
output.puts "Prompt timed out. Use non-interactive flags or enter an answer within 60 seconds."
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
if answer == "yes"
|
|
91
|
+
output.puts
|
|
92
|
+
output.puts "Persisting #{c} product license#{s}..."
|
|
93
|
+
errs = persist_callback.call
|
|
94
|
+
if errs.empty?
|
|
95
|
+
output.puts "#{CHECK} #{c} product license#{s} persisted.\n\n"
|
|
96
|
+
else
|
|
97
|
+
output.puts <<~EOM
|
|
98
|
+
#{CHECK} #{c} product license#{s} accepted.
|
|
99
|
+
Could not persist acceptance:\n\t* #{errs.map(&:message).join("\n\t* ")}
|
|
100
|
+
EOM
|
|
101
|
+
end
|
|
102
|
+
return true
|
|
103
|
+
end
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
class PromptTimeout < StandardError; end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative "base"
|
|
2
|
+
|
|
3
|
+
module LicenseAcceptance
|
|
4
|
+
module Strategy
|
|
5
|
+
|
|
6
|
+
# Used for library consumers to parse their own form of acceptance (knife config, omnibus config, etc.) and pass it in
|
|
7
|
+
class ProvidedValue < Base
|
|
8
|
+
attr_reader :value
|
|
9
|
+
|
|
10
|
+
def initialize(value)
|
|
11
|
+
@value = value
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def accepted?
|
|
15
|
+
String(value).downcase == ACCEPT
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def silent?
|
|
19
|
+
String(value).downcase == ACCEPT_SILENT
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def no_persist?
|
|
23
|
+
String(value).downcase == ACCEPT_NO_PERSIST
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def value?
|
|
27
|
+
!!value
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: license-acceptance
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.1.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- tyler-ball
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-12-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: pastel
|
|
@@ -28,156 +28,50 @@ dependencies:
|
|
|
28
28
|
name: tomlrb
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '1.2'
|
|
34
|
+
- - "<"
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '3.0'
|
|
34
37
|
type: :runtime
|
|
35
38
|
prerelease: false
|
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
40
|
requirements:
|
|
38
|
-
- - "
|
|
41
|
+
- - ">="
|
|
39
42
|
- !ruby/object:Gem::Version
|
|
40
43
|
version: '1.2'
|
|
44
|
+
- - "<"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '3.0'
|
|
41
47
|
- !ruby/object:Gem::Dependency
|
|
42
48
|
name: tty-box
|
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
|
44
50
|
requirements:
|
|
45
51
|
- - "~>"
|
|
46
52
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0.
|
|
53
|
+
version: '0.6'
|
|
48
54
|
type: :runtime
|
|
49
55
|
prerelease: false
|
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
57
|
requirements:
|
|
52
58
|
- - "~>"
|
|
53
59
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0.
|
|
60
|
+
version: '0.6'
|
|
55
61
|
- !ruby/object:Gem::Dependency
|
|
56
62
|
name: tty-prompt
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0.18'
|
|
62
|
-
type: :runtime
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0.18'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '10.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '10.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rspec
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '3.0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '3.0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: pry
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0.12'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0.12'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: pry-byebug
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '3.6'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '3.6'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: pry-stack_explorer
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0.4'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0.4'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: mixlib-cli
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '1.7'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '1.7'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: thor
|
|
155
63
|
requirement: !ruby/object:Gem::Requirement
|
|
156
64
|
requirements:
|
|
157
65
|
- - "~>"
|
|
158
66
|
- !ruby/object:Gem::Version
|
|
159
67
|
version: '0.20'
|
|
160
|
-
type: :
|
|
68
|
+
type: :runtime
|
|
161
69
|
prerelease: false
|
|
162
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
71
|
requirements:
|
|
164
72
|
- - "~>"
|
|
165
73
|
- !ruby/object:Gem::Version
|
|
166
74
|
version: '0.20'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: climate_control
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - "~>"
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0.2'
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - "~>"
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '0.2'
|
|
181
75
|
description: Chef End User License Agreement Acceptance for Ruby products
|
|
182
76
|
email:
|
|
183
77
|
- tball@chef.io
|
|
@@ -186,34 +80,23 @@ extensions: []
|
|
|
186
80
|
extra_rdoc_files: []
|
|
187
81
|
files:
|
|
188
82
|
- Gemfile
|
|
189
|
-
- Gemfile.lock
|
|
190
83
|
- LICENSE
|
|
191
|
-
- Rakefile
|
|
192
84
|
- config/product_info.toml
|
|
193
85
|
- lib/license_acceptance/acceptor.rb
|
|
194
|
-
- lib/license_acceptance/arg_acceptance.rb
|
|
195
86
|
- lib/license_acceptance/cli_flags/mixlib_cli.rb
|
|
196
87
|
- lib/license_acceptance/cli_flags/thor.rb
|
|
197
88
|
- lib/license_acceptance/config.rb
|
|
198
|
-
- lib/license_acceptance/env_acceptance.rb
|
|
199
|
-
- lib/license_acceptance/file_acceptance.rb
|
|
200
89
|
- lib/license_acceptance/logger.rb
|
|
201
90
|
- lib/license_acceptance/product.rb
|
|
202
91
|
- lib/license_acceptance/product_reader.rb
|
|
203
92
|
- lib/license_acceptance/product_relationship.rb
|
|
204
|
-
- lib/license_acceptance/
|
|
93
|
+
- lib/license_acceptance/strategy/argument.rb
|
|
94
|
+
- lib/license_acceptance/strategy/base.rb
|
|
95
|
+
- lib/license_acceptance/strategy/environment.rb
|
|
96
|
+
- lib/license_acceptance/strategy/file.rb
|
|
97
|
+
- lib/license_acceptance/strategy/prompt.rb
|
|
98
|
+
- lib/license_acceptance/strategy/provided_value.rb
|
|
205
99
|
- lib/license_acceptance/version.rb
|
|
206
|
-
- spec/license_acceptance/acceptor_spec.rb
|
|
207
|
-
- spec/license_acceptance/arg_acceptance_spec.rb
|
|
208
|
-
- spec/license_acceptance/cli_flags/mixlib_cli_spec.rb
|
|
209
|
-
- spec/license_acceptance/cli_flags/thor_spec.rb
|
|
210
|
-
- spec/license_acceptance/config_spec.rb
|
|
211
|
-
- spec/license_acceptance/env_acceptance_spec.rb
|
|
212
|
-
- spec/license_acceptance/file_acceptance_spec.rb
|
|
213
|
-
- spec/license_acceptance/product_reader_spec.rb
|
|
214
|
-
- spec/license_acceptance/product_spec.rb
|
|
215
|
-
- spec/license_acceptance/prompt_acceptance_spec.rb
|
|
216
|
-
- spec/spec_helper.rb
|
|
217
100
|
homepage: https://github.com/chef/license-acceptance/
|
|
218
101
|
licenses:
|
|
219
102
|
- Apache-2.0
|
|
@@ -226,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
226
109
|
requirements:
|
|
227
110
|
- - ">="
|
|
228
111
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: '
|
|
112
|
+
version: '2.4'
|
|
230
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
114
|
requirements:
|
|
232
115
|
- - ">="
|
data/Gemfile.lock
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: .
|
|
3
|
-
specs:
|
|
4
|
-
license-acceptance (0.2.10)
|
|
5
|
-
pastel (~> 0.7)
|
|
6
|
-
tomlrb (~> 1.2)
|
|
7
|
-
tty-box (~> 0.3)
|
|
8
|
-
tty-prompt (~> 0.18)
|
|
9
|
-
|
|
10
|
-
GEM
|
|
11
|
-
remote: https://rubygems.org/
|
|
12
|
-
specs:
|
|
13
|
-
binding_of_caller (0.8.0)
|
|
14
|
-
debug_inspector (>= 0.0.1)
|
|
15
|
-
byebug (11.0.1)
|
|
16
|
-
climate_control (0.2.0)
|
|
17
|
-
coderay (1.1.2)
|
|
18
|
-
debug_inspector (0.0.3)
|
|
19
|
-
diff-lcs (1.3)
|
|
20
|
-
equatable (0.5.0)
|
|
21
|
-
method_source (0.9.2)
|
|
22
|
-
mixlib-cli (1.7.0)
|
|
23
|
-
necromancer (0.4.0)
|
|
24
|
-
pastel (0.7.2)
|
|
25
|
-
equatable (~> 0.5.0)
|
|
26
|
-
tty-color (~> 0.4.0)
|
|
27
|
-
pry (0.12.2)
|
|
28
|
-
coderay (~> 1.1.0)
|
|
29
|
-
method_source (~> 0.9.0)
|
|
30
|
-
pry-byebug (3.7.0)
|
|
31
|
-
byebug (~> 11.0)
|
|
32
|
-
pry (~> 0.10)
|
|
33
|
-
pry-stack_explorer (0.4.9.3)
|
|
34
|
-
binding_of_caller (>= 0.7)
|
|
35
|
-
pry (>= 0.9.11)
|
|
36
|
-
rake (10.5.0)
|
|
37
|
-
rspec (3.8.0)
|
|
38
|
-
rspec-core (~> 3.8.0)
|
|
39
|
-
rspec-expectations (~> 3.8.0)
|
|
40
|
-
rspec-mocks (~> 3.8.0)
|
|
41
|
-
rspec-core (3.8.0)
|
|
42
|
-
rspec-support (~> 3.8.0)
|
|
43
|
-
rspec-expectations (3.8.2)
|
|
44
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
45
|
-
rspec-support (~> 3.8.0)
|
|
46
|
-
rspec-mocks (3.8.0)
|
|
47
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
48
|
-
rspec-support (~> 3.8.0)
|
|
49
|
-
rspec-support (3.8.0)
|
|
50
|
-
strings (0.1.5)
|
|
51
|
-
strings-ansi (~> 0.1)
|
|
52
|
-
unicode-display_width (~> 1.5)
|
|
53
|
-
unicode_utils (~> 1.4)
|
|
54
|
-
strings-ansi (0.1.0)
|
|
55
|
-
thor (0.20.3)
|
|
56
|
-
timers (4.3.0)
|
|
57
|
-
tomlrb (1.2.8)
|
|
58
|
-
tty-box (0.3.0)
|
|
59
|
-
pastel (~> 0.7.2)
|
|
60
|
-
strings (~> 0.1.4)
|
|
61
|
-
tty-cursor (~> 0.6.0)
|
|
62
|
-
tty-color (0.4.3)
|
|
63
|
-
tty-cursor (0.6.1)
|
|
64
|
-
tty-prompt (0.18.1)
|
|
65
|
-
necromancer (~> 0.4.0)
|
|
66
|
-
pastel (~> 0.7.0)
|
|
67
|
-
timers (~> 4.0)
|
|
68
|
-
tty-cursor (~> 0.6.0)
|
|
69
|
-
tty-reader (~> 0.5.0)
|
|
70
|
-
tty-reader (0.5.0)
|
|
71
|
-
tty-cursor (~> 0.6.0)
|
|
72
|
-
tty-screen (~> 0.6.4)
|
|
73
|
-
wisper (~> 2.0.0)
|
|
74
|
-
tty-screen (0.6.5)
|
|
75
|
-
unicode-display_width (1.5.0)
|
|
76
|
-
unicode_utils (1.4.0)
|
|
77
|
-
wisper (2.0.0)
|
|
78
|
-
|
|
79
|
-
PLATFORMS
|
|
80
|
-
ruby
|
|
81
|
-
|
|
82
|
-
DEPENDENCIES
|
|
83
|
-
climate_control (~> 0.2)
|
|
84
|
-
license-acceptance!
|
|
85
|
-
mixlib-cli (~> 1.7)
|
|
86
|
-
pry (~> 0.12)
|
|
87
|
-
pry-byebug (~> 3.6)
|
|
88
|
-
pry-stack_explorer (~> 0.4)
|
|
89
|
-
rake (~> 10.0)
|
|
90
|
-
rspec (~> 3.0)
|
|
91
|
-
thor (~> 0.20)
|
|
92
|
-
|
|
93
|
-
BUNDLED WITH
|
|
94
|
-
1.17.3
|
data/Rakefile
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module LicenseAcceptance
|
|
2
|
-
class ArgAcceptance
|
|
3
|
-
|
|
4
|
-
def accepted?(argv)
|
|
5
|
-
look_for_value(argv, "accept")
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def silent?(argv)
|
|
9
|
-
look_for_value(argv, "accept-silent")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def no_persist?(argv)
|
|
13
|
-
look_for_value(argv, "accept-no-persist")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def look_for_value(argv, sought)
|
|
19
|
-
if argv.include?("--chef-license=#{sought}")
|
|
20
|
-
return true
|
|
21
|
-
end
|
|
22
|
-
i = argv.index("--chef-license")
|
|
23
|
-
unless i.nil?
|
|
24
|
-
val = argv[i+1]
|
|
25
|
-
if val != nil && val.downcase == sought
|
|
26
|
-
return true
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
return false
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module LicenseAcceptance
|
|
2
|
-
class EnvAcceptance
|
|
3
|
-
|
|
4
|
-
def accepted?(env)
|
|
5
|
-
look_for_value(env, "accept")
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def silent?(env)
|
|
9
|
-
look_for_value(env, "accept-silent")
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def no_persist?(env)
|
|
13
|
-
look_for_value(env, "accept-no-persist")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def look_for_value(env, sought)
|
|
19
|
-
if env['CHEF_LICENSE'] && env['CHEF_LICENSE'].downcase == sought
|
|
20
|
-
return true
|
|
21
|
-
end
|
|
22
|
-
return false
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
end
|