lib/legion/crypt/cipher.rb in legion-crypt-0.2.3 vs lib/legion/crypt/cipher.rb in legion-crypt-0.3.0

- old
+ new

@@ -46,14 +46,14 @@ OpenSSL::PKey::RSA.new 2048 end end def cs - @cs ||= Digest::SHA256.digest fetch_cs + @cs ||= Digest::SHA256.digest(fetch_cs) end - def fetch_cs # rubocop:disable Metrics/AbcSize + def fetch_cs # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity if Legion::Settings[:crypt][:vault][:read_cluster_secret] && Legion::Settings[:crypt][:vault][:connected] && Legion::Crypt.exist?('crypt') # rubocop:disable Layout/LineLength Legion::Crypt.get('crypt')[:cluster_secret] elsif Legion::Settings[:crypt][:cluster_secret].is_a? String Legion::Settings[:crypt][:cluster_secret] elsif Legion::Transport::Queue.new('node.crypt', passive: true).consumer_count.zero? @@ -66,25 +66,34 @@ sleep_time = 0.001 until !Legion::Settings[:crypt][:cluster_secret].nil? || (Time.now - start) > Legion::Settings[:crypt][:cluster_secret_timeout] sleep(sleep_time) sleep_time *= 2 unless sleep_time > 0.5 end - unless Legion::Settings[:crypt][:cluster_secret].nil? + + if Legion::Settings[:crypt][:cluster_secret].nil? + Legion::Logging.warn 'Cluster secret is still nil' + else Legion::Logging.info "Received cluster secret in #{((Time.new - start) * 1000.0).round}ms" end - Legion::Logging.warn 'Cluster secret is still nil' if Legion::Settings[:crypt][:cluster_secret].nil? - else - Legion::Settings[:crypt][:cluster_secret] = generate_secure_random end - Legion::Settings[:crypt][:cs_encrypt_ready] = true - Legion::Settings[:crypt][:cluster_secret] rescue StandardError => e Legion::Logging.error(e.message) Legion::Logging.error(e.backtrace) + ensure + Legion::Settings[:crypt][:cluster_secret] = generate_secure_random unless Legion::Settings[:crypt].key? :cluster_secret + nil if Legion::Settings[:crypt][:cluster_secret].nil? - Legion::Settings[:crypt][:cluster_secret] = generate_secure_random Legion::Settings[:crypt][:cs_encrypt_ready] = true - Legion::Settings[:crypt][:cluster_secret] + push_cs_to_vault if Legion::Settings[:crypt][:vault][:push_cs_to_vault] + + return Legion::Settings[:crypt][:cluster_secret] # rubocop:disable Lint/EnsureReturn + end + + def push_cs_to_vault + return false unless Legion::Settings[:crypt][:vault][:connected] && Legion::Settings[:crypt][:cluster_secret] + + Legion::Logging.info 'Pushing Cluster Secret to Vault' + Legion::Crypt.write('cluster', secret: Legion::Settings[:crypt][:cluster_secret]) end def generate_secure_random SecureRandom.uuid end