Module: DopplerRails::Operations
- Defined in:
- lib/doppler_rails.rb
Class Method Summary collapse
- .connection ⇒ Object
- .decrypt(message) ⇒ Object
- .encrypt(secrets) ⇒ Object
- .fetch_enviroment_variables ⇒ Object
- .store_fallback(secrets) ⇒ Object
- .use_fallback_if_present ⇒ Object
Class Method Details
.connection ⇒ Object
46 47 48 49 50 51 |
# File 'lib/doppler_rails.rb', line 46 def connection Faraday.new("https://api.doppler.com/v3/") do |conn| conn.request :basic_auth, TOKEN, "" conn.request :retry, max: 3, interval: 0.3, backoff_factor: 2, exceptions: RETRY_EXCEPTIONS end end |
.decrypt(message) ⇒ Object
53 54 55 56 57 |
# File 'lib/doppler_rails.rb', line 53 def decrypt() encrypted, salt = .split("\n", 2) key = ActiveSupport::KeyGenerator.new(TOKEN).generate_key(Base64.urlsafe_decode64(salt), ActiveSupport::MessageEncryptor.key_len) ActiveSupport::MessageEncryptor.new(key).decrypt_and_verify(encrypted) end |
.encrypt(secrets) ⇒ Object
59 60 61 62 63 |
# File 'lib/doppler_rails.rb', line 59 def encrypt(secrets) salt = SecureRandom.random_bytes(ActiveSupport::MessageEncryptor.key_len) key = ActiveSupport::KeyGenerator.new(TOKEN).generate_key(salt, ActiveSupport::MessageEncryptor.key_len) ActiveSupport::MessageEncryptor.new(key).encrypt_and_sign(secrets) + "\n" + Base64.urlsafe_encode64(salt) end |
.fetch_enviroment_variables ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/doppler_rails.rb', line 21 def fetch_enviroment_variables return if TOKEN.blank? response = connection.get("configs/config/secrets/download?format=json") if response.success? store_fallback(response.body) ENV.update(JSON.parse(response.body)) else use_fallback_if_present end rescue Faraday::Error use_fallback_if_present end |
.store_fallback(secrets) ⇒ Object
34 35 36 37 |
# File 'lib/doppler_rails.rb', line 34 def store_fallback(secrets) return unless FALLBACK_FILE_PATH.present? File.write(FALLBACK_FILE_PATH, encrypt(secrets), encoding: "ascii-8bit") end |
.use_fallback_if_present ⇒ Object
39 40 41 42 43 44 |
# File 'lib/doppler_rails.rb', line 39 def use_fallback_if_present return unless FALLBACK_FILE_PATH.present? return unless File.exist?(FALLBACK_FILE_PATH) secrets = decrypt(File.read(FALLBACK_FILE_PATH, encoding: "ascii-8bit")) ENV.update(JSON.parse(secrets)) end |