dotenv-vault-rails 0.4.1 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fbe2894bb806ed6b3432129b513069b2cc2eccb7d98954c67f4209367a487ff
4
- data.tar.gz: 0ac1f1ae5494c877c93b96253e106c25712d4eb6c3a2a3a5cc1343519f8d44fa
3
+ metadata.gz: 40bf354479d33c010a5f1899482b90f9ee6094702c6c99ae730a115ac53227a8
4
+ data.tar.gz: 5afb9b56bfbceb85e78f1252420569316496f4f229b336d912ba854aa763f6fb
5
5
  SHA512:
6
- metadata.gz: 42a29549edaa5d82d55f6b50abc52357dc65721f8e75d906ad914c550ddf9a0c3d3edd0ab0cd3a5d6cc6fc12ebedfd91ae63eceb911e428d2d99d6355f1791da
7
- data.tar.gz: 49906a5a6be060a454a7e37c8527bfd32c4c7689e0e7a04ad95b06ad7f1237d372cdba74a4417bd64d0654a30ff7e6b412348c7b618ceee30e29494928b18f95
6
+ metadata.gz: 32fb077fb0c97c19522cff72e8d4721b90ab106d6d2606ad3cb684c4290d9f75c3b4b6fd73a839094dbb439518231ae37983254b20c2f8ebc155e07e4abf5fb9
7
+ data.tar.gz: a14615e72623fef08ffccc662dd86d2950e2b34b65f613032382b9e16bff1ee5592b81ec7be8e40f7602f0a89e3cebdff440373f1adb99ab9520f1296bb14787
data/Gemfile.lock CHANGED
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dotenv-vault (0.4.1)
4
+ dotenv-vault (0.6.0)
5
5
  dotenv
6
6
  lockbox
7
- dotenv-vault-rails (0.4.1)
7
+ dotenv-vault-rails (0.6.0)
8
8
  dotenv-rails
9
- dotenv-vault (= 0.4.1)
9
+ dotenv-vault (= 0.6.0)
10
10
 
11
11
  GEM
12
12
  remote: https://rubygems.org/
@@ -1,3 +1,3 @@
1
1
  module DotenvVault
2
- VERSION = "0.4.1"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/dotenv-vault.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "uri"
1
2
  require "dotenv"
2
3
  require "lockbox"
3
4
  require "dotenv-vault/version"
@@ -105,43 +106,54 @@ module DotenvVault
105
106
  end
106
107
 
107
108
  def parse_vault(*filenames)
108
- # Warn the developer unless both are set
109
+ # DOTENV_KEY=development/key_1234
110
+ #
111
+ # Warn the developer unless formatted correctly
109
112
  raise NotFoundDotenvKey, "NOT_FOUND_DOTENV_KEY: Cannot find ENV['DOTENV_KEY']" unless present?(ENV["DOTENV_KEY"])
110
- raise NotFoundDotenvEnvironment, "NOT_FOUND_DOTENV_ENVIRONMENT: Cannot find ENV['DOTENV_ENVIRONMENT']" unless present?(ENV["DOTENV_ENVIRONMENT"])
111
113
 
112
- # Locate .env.vault
113
- vault_path = ".env.vault"
114
- raise NotFoundDotenvVault, "NotFoundDotenvVault: Cannot find .env.vault at ${vaultPath}" unless File.file?(vault_path)
114
+ # Parse DOTENV_KEY. Format is a URI
115
+ uri = URI.parse(ENV["DOTENV_KEY"]) # dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=production
116
+
117
+ # Get decrypt key
118
+ key = uri.password
119
+ raise InvalidDotenvKey, "INVALID_DOTENV_KEY: Missing key part" unless present?(key)
120
+
121
+ # Get environment
122
+ params = Hash[URI::decode_www_form(uri.query.to_s)]
123
+ environment = params["environment"]
124
+ raise InvalidDotenvKey, "INVALID_DOTENV_KEY: Missing environment part" unless present?(environment)
125
+
126
+ # Get vault path
127
+ vault_path = uri.path.gsub("/vault/", "") # /vault/.env.vault => .env.vault
128
+ raise NotFoundDotenvVault, "NotFoundDotenvVault: Cannot find .env.vault at #{vaultPath}" unless File.file?(vault_path)
115
129
 
116
130
  # Parse .env.vault
117
131
  parsed = Dotenv.parse(vault_path)
118
132
 
119
133
  # Get ciphertext
120
- environment_key = "DOTENV_VAULT_#{ENV["DOTENV_ENVIRONMENT"].upcase}"
134
+ environment_key = "DOTENV_VAULT_#{environment.upcase}"
121
135
  ciphertext = parsed[environment_key] # DOTENV_VAULT_PRODUCTION
122
136
  raise NotFoundDotenvEnvironment, "NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate #{environment_key} in .env.vault" unless ciphertext
123
137
 
124
138
  # Decrypt ciphertext
125
- decrypted = decrypt(ciphertext)
139
+ decrypted = decrypt(ciphertext, key)
126
140
 
127
141
  # Parse decrypted .env string
128
142
  Dotenv::Parser.call(decrypted, true)
129
143
  end
130
144
 
131
145
  def using_vault?
132
- present?(ENV["DOTENV_ENVIRONMENT"]) && present?(ENV["DOTENV_KEY"])
146
+ present?(ENV["DOTENV_KEY"])
133
147
  end
134
148
 
135
149
  def present?(str)
136
150
  !(str.nil? || str.empty?)
137
151
  end
138
152
 
139
- def decrypt(ciphertext)
140
- raise NotFoundDotenvKey, "NOT_FOUND_DOTENV_KEY: Cannot find ENV['DOTENV_KEY']" unless present?(ENV["DOTENV_KEY"])
141
-
142
- key = ENV["DOTENV_KEY"][-64..-1] # last 64 characters. allows for passing keys with preface like key_*****
153
+ def decrypt(ciphertext, key)
154
+ key = key[-64..-1] # last 64 characters. allows for passing keys with preface like key_*****
143
155
 
144
- raise InvalidDotenvKey, "INVALID_DOTENV_KEY: It must be 64 characters long (or more)" unless key.to_s.length == 64
156
+ raise InvalidDotenvKey, "INVALID_DOTENV_KEY: Key part must be 64 characters long (or more)" unless key.bytesize == 64
145
157
 
146
158
  lockbox = Lockbox.new(key: key, encode: true)
147
159
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dotenv-vault-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - motdotla
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-16 00:00:00.000000000 Z
11
+ date: 2022-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv-rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.4.1
33
+ version: 0.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.4.1
40
+ version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: spring
43
43
  requirement: !ruby/object:Gem::Requirement