Skip to content

Commit 6efc553

Browse files
authored
Merge pull request #472 from DannyBen/add/env-var-whitelist
Add `allowed` option to `environment_variable`
2 parents a05f7d0 + e205064 commit 6efc553

File tree

8 files changed

+38
-2
lines changed

8 files changed

+38
-2
lines changed

lib/bashly/config_validator.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,9 @@ def assert_env_var(key, value)
168168
assert_optional_string "#{key}.default", value['default']
169169
assert_boolean "#{key}.required", value['required']
170170
assert_boolean "#{key}.private", value['private']
171+
assert_array "#{key}.allowed", value['allowed'], of: :string
172+
173+
refute value['required'] && value['default'], "#{key} cannot have both nub`required` and nub`default`"
171174
end
172175

173176
def assert_command(key, value)

lib/bashly/libraries/strings/strings.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ missing_required_environment_variable: "missing required environment variable: %
3434
missing_dependency: "missing dependency: %{dependency}"
3535
disallowed_flag: "%{name} must be one of: %{allowed}"
3636
disallowed_argument: "%{name} must be one of: %{allowed}"
37+
disallowed_environment_variable: "%{name} environment variable must be one of: %{allowed}"
3738
unsupported_bash_version: "bash version 4 or higher is required"
3839
validation_error: "validation error in %s:\\n%s"

lib/bashly/script/command.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ def whitelisted_args
327327
args.select(&:allowed)
328328
end
329329

330+
# Returns an array of all the environemnt_variables with a whitelist arg
331+
def whitelisted_environment_variables
332+
environment_variables.select(&:allowed)
333+
end
334+
330335
# Returns an array of all the flags with a whitelist arg
331336
def whitelisted_flags
332337
flags.select(&:allowed)

lib/bashly/script/environment_variable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module Script
33
class EnvironmentVariable < Base
44
class << self
55
def option_keys
6-
@option_keys ||= %i[default help name required private]
6+
@option_keys ||= %i[allowed default help name required private]
77
end
88
end
99

lib/bashly/views/command/environment_variables_filter.gtx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
if default_environment_variables.any? or required_environment_variables.any?
1+
if default_environment_variables.any? || required_environment_variables.any? ||
2+
whitelisted_environment_variables.any?
3+
24
= view_marker
35
= render(:environment_variables_default)
46

@@ -10,4 +12,13 @@ if default_environment_variables.any? or required_environment_variables.any?
1012
> fi
1113
end
1214
end
15+
16+
if whitelisted_environment_variables.any?
17+
whitelisted_environment_variables.each do |env_var|
18+
> if [[ -n "${<%= env_var.name.upcase %>:-}" ]] && [[ ! ${<%= env_var.name.upcase %>:-} =~ ^({{ env_var.allowed.join '|' }})$ ]]; then
19+
> printf "%s\n" "{{ strings[:disallowed_environment_variable] % { name: env_var.name.upcase, allowed: env_var.allowed.join(', ') } }}" >&2
20+
> exit 1
21+
> fi
22+
end
23+
end
1324
end

schemas/strings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@
186186
"minLength": 1,
187187
"default": "%{name} must be one of: %{allowed}"
188188
},
189+
"disallowed_environment_variable": {
190+
"title": "disallowed_environment_variable",
191+
"description": "A forbidden environment variable error of the current script\nhttps://bashly.dannyb.co/advanced/strings/#custom-strings",
192+
"type": "string",
193+
"minLength": 1,
194+
"default": "%{name} environment variable must be one of: %{allowed}"
195+
},
189196
"unsupported_bash_version": {
190197
"title": "unsupported bash version",
191198
"description": "An unsupported Bash version error of the current script\nhttps://bashly.dannyb.co/advanced/strings/#custom-strings",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#<Bashly::ConfigurationError: root.environment_variables[0] cannot have both nub`required` and nub`default`>

spec/fixtures/script/validations.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@
212212
- name: api_key
213213
required: 1
214214

215+
:env_var_required_and_default:
216+
name: invalid
217+
help: env_var cannot have both required and default
218+
environment_variables:
219+
- name: app_env
220+
required: true
221+
default: dev
222+
215223
:env_var_private:
216224
name: invalid
217225
help: env_var.private should be a boolean

0 commit comments

Comments
 (0)