Class: Protobuf::Nats::Config
- Inherits:
-
Object
- Object
- Protobuf::Nats::Config
- Defined in:
- lib/protobuf/nats/config.rb
Constant Summary collapse
- CONFIG_MUTEX =
::Mutex.new
- DEFAULTS =
{ :connect_timeout => nil, :max_reconnect_attempts => 60_000, :servers => nil, :tls_client_cert => nil, :tls_client_key => nil, :tls_ca_cert => nil, :uses_tls => false, :server_subscription_key_do_not_subscribe_to_when_includes_any_of => [], :server_subscription_key_only_subscribe_to_when_includes_any_of => [], :subscription_key_replacements => [], }.freeze
Instance Attribute Summary collapse
-
#connect_timeout ⇒ Object
Returns the value of attribute connect_timeout.
-
#max_reconnect_attempts ⇒ Object
Returns the value of attribute max_reconnect_attempts.
-
#server_subscription_key_do_not_subscribe_to_when_includes_any_of ⇒ Object
Returns the value of attribute server_subscription_key_do_not_subscribe_to_when_includes_any_of.
-
#server_subscription_key_only_subscribe_to_when_includes_any_of ⇒ Object
Returns the value of attribute server_subscription_key_only_subscribe_to_when_includes_any_of.
-
#servers ⇒ Object
Returns the value of attribute servers.
-
#subscription_key_replacements ⇒ Object
Returns the value of attribute subscription_key_replacements.
-
#tls_ca_cert ⇒ Object
Returns the value of attribute tls_ca_cert.
-
#tls_client_cert ⇒ Object
Returns the value of attribute tls_client_cert.
-
#tls_client_key ⇒ Object
Returns the value of attribute tls_client_key.
-
#uses_tls ⇒ Object
Returns the value of attribute uses_tls.
Instance Method Summary collapse
-
#connection_options(reload = false) ⇒ Object
Only the keys nats-pure’s ‘connect` actually consumes.
-
#initialize ⇒ Config
constructor
A new instance of Config.
- #load_from_yml(reload = false) ⇒ Object
- #make_subscription_key_replacements(subscription_key) ⇒ Object
- #new_tls_context ⇒ Object
Constructor Details
Instance Attribute Details
#connect_timeout ⇒ Object
Returns the value of attribute connect_timeout.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def connect_timeout @connect_timeout end |
#max_reconnect_attempts ⇒ Object
Returns the value of attribute max_reconnect_attempts.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def max_reconnect_attempts @max_reconnect_attempts end |
#server_subscription_key_do_not_subscribe_to_when_includes_any_of ⇒ Object
Returns the value of attribute server_subscription_key_do_not_subscribe_to_when_includes_any_of.
9 10 11 |
# File 'lib/protobuf/nats/config.rb', line 9 def server_subscription_key_do_not_subscribe_to_when_includes_any_of @server_subscription_key_do_not_subscribe_to_when_includes_any_of end |
#server_subscription_key_only_subscribe_to_when_includes_any_of ⇒ Object
Returns the value of attribute server_subscription_key_only_subscribe_to_when_includes_any_of.
9 10 11 |
# File 'lib/protobuf/nats/config.rb', line 9 def server_subscription_key_only_subscribe_to_when_includes_any_of @server_subscription_key_only_subscribe_to_when_includes_any_of end |
#servers ⇒ Object
Returns the value of attribute servers.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def servers @servers end |
#subscription_key_replacements ⇒ Object
Returns the value of attribute subscription_key_replacements.
9 10 11 |
# File 'lib/protobuf/nats/config.rb', line 9 def subscription_key_replacements @subscription_key_replacements end |
#tls_ca_cert ⇒ Object
Returns the value of attribute tls_ca_cert.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def tls_ca_cert @tls_ca_cert end |
#tls_client_cert ⇒ Object
Returns the value of attribute tls_client_cert.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def tls_client_cert @tls_client_cert end |
#tls_client_key ⇒ Object
Returns the value of attribute tls_client_key.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def tls_client_key @tls_client_key end |
#uses_tls ⇒ Object
Returns the value of attribute uses_tls.
8 9 10 |
# File 'lib/protobuf/nats/config.rb', line 8 def uses_tls @uses_tls end |
Instance Method Details
#connection_options(reload = false) ⇒ Object
Only the keys nats-pure’s ‘connect` actually consumes. App-level settings (uses_tls, tls_*, server_subscription_key_*, subscription_key_replacements) are read directly via their accessors elsewhere and must NOT be forwarded to nats-pure (it ignores unknown keys today, but that is brittle).
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/protobuf/nats/config.rb', line 72 def (reload = false) @connection_options = false if reload @connection_options ||= begin = { servers: servers, max_reconnect_attempts: max_reconnect_attempts, connect_timeout: connect_timeout, } [:tls] = {:context => new_tls_context} if uses_tls end end |
#load_from_yml(reload = false) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/protobuf/nats/config.rb', line 34 def load_from_yml(reload = false) CONFIG_MUTEX.synchronize do @load_from_yml = nil if reload @load_from_yml ||= begin env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["APP_ENV"] || "development" yaml_config = {} config_path = ENV["PROTOBUF_NATS_CONFIG_PATH"] || ::File.join("config", "protobuf_nats.yml") absolute_config_path = ::File.(config_path) if ::File.exist?(absolute_config_path) yaml_string = ::ERB.new(::File.read(absolute_config_path)).result # safe_load (no arbitrary object deserialization) with aliases # enabled so the common `&defaults` / `<<: *defaults` pattern works. parsed = ::YAML.safe_load(yaml_string, :aliases => true) # An empty file parses to nil/false, and a file without a section # for the current env yields nil on lookup -- guard both so we # don't blow up with NoMethodError below. yaml_config = (parsed && parsed[env]) || {} end DEFAULTS.each_pair do |key, value| setting = yaml_config[key.to_s] __send__("#{key}=", setting) if setting end # Reload the connection options hash (true) true end end end |
#make_subscription_key_replacements(subscription_key) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/protobuf/nats/config.rb', line 98 def make_subscription_key_replacements(subscription_key) subscription_key_replacements.each do |replacement| match = replacement.keys.first replacement = replacement[match] if subscription_key.include?(match) return subscription_key.gsub(match, replacement) end end subscription_key end |
#new_tls_context ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/protobuf/nats/config.rb', line 85 def new_tls_context tls_context = ::OpenSSL::SSL::SSLContext.new # Floor at TLS 1.2, ceiling at TLS 1.3 (replaces the deprecated # ssl_version=:TLSv1_2 hard pin). The client offers 1.2 and 1.3 and # negotiates the highest the server also supports, so a TLS-1.2-only # transport still connects (verified on JRuby 9.4 and 10.0). tls_context.min_version = ::OpenSSL::SSL::TLS1_2_VERSION tls_context.max_version = ::OpenSSL::SSL::TLS1_3_VERSION tls_context.cert = ::OpenSSL::X509::Certificate.new(::File.read(tls_client_cert)) if tls_client_cert tls_context.key = ::OpenSSL::PKey::RSA.new(::File.read(tls_client_key)) if tls_client_key tls_context end |