secvault 3.2.0 → 3.3.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: ff511b4da4c277844438956507222da90bd15416fd8e4adec1e973a4e5b73993
4
- data.tar.gz: 45219a2e917ac366af2c94c8a848cc5557219b4856daab6fcd870d19898d1685
3
+ metadata.gz: 710d3e06fdda8db93c2e7ca401e8eaa9aa973b5c350dba8773a15a41458c71df
4
+ data.tar.gz: 123cf43f089b2880f4c80035253510c97aaff711193c41e40b768605702a06db
5
5
  SHA512:
6
- metadata.gz: 45e5d96b9eaa32ea9396921451dfb2ed148e485992236ae45bf58acf9a380869cde8df8b3e93e621cdfe1bcd9710f4eccbeaee3880fa5436c73e336d063d866f
7
- data.tar.gz: db91a660ae62430a0c27f311bd512d964efc485f4a224e42f958b9215d31c9c553db765b638b622413b18c9b236ab6865d14328594f8d6ab726452484eddc767
6
+ metadata.gz: 257a70771cad2fe8581071a9aad9a3abc18fabf176d1ed902fd9962657a8a15a1e8a8d966b9a00912e4aa58eb129f4e1d3ba754d6e319aab4c2f0d05ffcd5a31
7
+ data.tar.gz: 5783d0e4fa433d1beb8984e7d8a7d5946502249b4449e5e6ba97f2eedadf1063ec1982e11327757ee593aa9198a3203461ee1a59f3cb01356b1a800ba0aadbd7
@@ -6,9 +6,37 @@ require "active_support/ordered_options"
6
6
  require "pathname"
7
7
  require "erb"
8
8
  require "yaml"
9
+ require "bigdecimal"
10
+ require "date"
9
11
 
10
12
  module Secvault
11
13
  class Secrets
14
+ # Define permitted classes for YAML.safe_load - commonly used in Rails secrets
15
+ PERMITTED_YAML_CLASSES = [
16
+ Symbol,
17
+ Date,
18
+ Time,
19
+ DateTime,
20
+ BigDecimal,
21
+ Range,
22
+ Regexp
23
+ ].tap do |classes|
24
+ # Add ActiveSupport classes if available
25
+ begin
26
+ require "active_support/time_with_zone"
27
+ classes << ActiveSupport::TimeWithZone
28
+ rescue LoadError
29
+ # ActiveSupport not available, skip
30
+ end
31
+
32
+ begin
33
+ require "active_support/duration"
34
+ classes << ActiveSupport::Duration
35
+ rescue LoadError
36
+ # ActiveSupport not available, skip
37
+ end
38
+ end.freeze
39
+
12
40
  class << self
13
41
  def setup(app)
14
42
  # Auto-setup for all Rails versions with consistent behavior
@@ -68,7 +96,7 @@ module Secvault
68
96
 
69
97
  # Process ERB and parse YAML - using same method as Rails
70
98
  erb_result = ERB.new(source).result
71
- secrets = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(erb_result) : YAML.load(erb_result)
99
+ secrets = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(erb_result) : YAML.safe_load(erb_result, aliases: true, permitted_classes: PERMITTED_YAML_CLASSES)
72
100
 
73
101
  secrets ||= {}
74
102
 
@@ -81,7 +109,7 @@ module Secvault
81
109
  if secrets_path.exist?
82
110
  # Handle plain YAML secrets.yml only - using same method as Rails
83
111
  erb_result = ERB.new(secrets_path.read).result
84
- all_secrets = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(erb_result) : YAML.load(erb_result)
112
+ all_secrets = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(erb_result) : YAML.safe_load(erb_result, aliases: true, permitted_classes: PERMITTED_YAML_CLASSES)
85
113
 
86
114
  env_secrets = all_secrets[env.to_s]
87
115
  return env_secrets.deep_symbolize_keys if env_secrets
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Secvault
4
- VERSION = "3.2.0"
4
+ VERSION = "3.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: secvault
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Unnikrishnan KP