Skip to content

Commit 0b28b51

Browse files
author
vitalie
committed
Hashicorp Vault - validate underscore paths
1 parent 235ae87 commit 0b28b51

File tree

4 files changed

+33
-6
lines changed

4 files changed

+33
-6
lines changed

lib/travis/build/addons.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require 'active_support/core_ext/string/inflections.rb'
1+
require 'active_support/core_ext/string/inflections'
22
require 'travis/build/addons/apt'
33
require 'travis/build/addons/apt_packages'
44
require 'travis/build/addons/apt_retries'

lib/travis/build/appliances/vault_keys.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require 'active_support/core_ext/object/blank'
12
require 'travis/build/appliances/base'
23
require 'travis/services/vault'
34

lib/travis/services/vault/keys/resolver.rb

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
require 'active_support/core_ext/object/blank'
2+
require 'active_support/core_ext/string/inflections'
3+
14
module Travis
25
module Vault
36
class Keys
47
class Resolver
8+
ENV_NAME_REGEX = /^[a-zA-Z_][a-zA-Z0-9_]*$/.freeze
9+
510
attr_reader :paths, :version, :appliance
611

712
delegate :data, to: :appliance
@@ -27,11 +32,15 @@ def call
2732
env_name = key
2833
env_name = [secret_name, env_name].join('_') if true # To-Do: Make the prepend customizable from .travis.yml
2934
env_name = (path.split('/') << env_name).join('_') if false # To-Do: Make the prepend customizable from .travis.yml
30-
export(env_name.upcase, %("#{value}"), echo: false, secure: true)
31-
vault_secrets << value
35+
if env_name.match?(ENV_NAME_REGEX)
36+
export(env_name.upcase, %("#{value}"), echo: false, secure: true)
37+
vault_secrets << value
38+
else
39+
echo *warn_message("The env name #{env_name} is invalid. Valid chars: a-z, A-Z, 0-9 and _. May NOT begin with a number.")
40+
end
3241
end
3342
else
34-
echo *(warn_message(path))
43+
echo *warn_message("The value fetched for #{path} is blank.")
3544
end
3645
end
3746

@@ -40,8 +49,8 @@ def call
4049

4150
private
4251

43-
def warn_message(path)
44-
["The value fetched for #{path} is blank.", ansi: :yellow]
52+
def warn_message(message)
53+
[message, ansi: :yellow]
4554
end
4655
end
4756
end

spec/build/services/vault/keys/resolver_spec.rb

+17
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,24 @@
3939
call
4040
end
4141
end
42+
end
43+
44+
context 'when paths contain unusual chars' do
45+
let(:paths) { %w[path/to/something/secret-thing] }
46+
47+
before do
48+
Travis::Vault::Keys::KV2.stubs(:resolve).with(paths.first, vault).returns({ my_key: 'MySecretValue' })
49+
end
4250

51+
context 'when path returns value from Vault' do
52+
it do
53+
sh.expects(:export).never
54+
sh.expects(:echo).with('The env name secret-thing_my_key is invalid. Valid chars: a-z, A-Z, 0-9 and _. May NOT begin with a number.', ansi: :yellow)
55+
data.expects(:vault_secrets=).never
56+
57+
call
58+
end
59+
end
4360
end
4461

4562
context 'when path does not returns value from Vault' do

0 commit comments

Comments
 (0)