50 lines
1.6 KiB
Ruby
50 lines
1.6 KiB
Ruby
# Be sure to restart your server when you modify this file.
|
|
|
|
require 'securerandom'
|
|
|
|
# Your secret key for verifying the integrity of signed cookies.
|
|
# If you change this key, all old signed cookies will become invalid!
|
|
# Make sure the secret is at least 30 characters and all random,
|
|
# no regular words or you'll be exposed to dictionary attacks.
|
|
|
|
def find_secure_token
|
|
token_file = Rails.root.join('.secret')
|
|
if ENV.key?('SECRET_KEY_BASE')
|
|
ENV['SECRET_KEY_BASE']
|
|
elsif File.exist? token_file
|
|
# Use the existing token.
|
|
File.read(token_file).chomp
|
|
else
|
|
# Generate a new token of 64 random hexadecimal characters and store it in token_file.
|
|
token = SecureRandom.hex(64)
|
|
File.write(token_file, token)
|
|
token
|
|
end
|
|
end
|
|
|
|
Rails.application.config.secret_token = find_secure_token
|
|
Rails.application.config.secret_key_base = find_secure_token
|
|
|
|
# CI
|
|
def generate_new_secure_token
|
|
SecureRandom.hex(64)
|
|
end
|
|
|
|
if Rails.application.secrets.db_key_base.blank?
|
|
warn "Missing `db_key_base` for '#{Rails.env}' environment. The secrets will be generated and stored in `config/secrets.yml`"
|
|
|
|
all_secrets = YAML.load_file('config/secrets.yml') if File.exist?('config/secrets.yml')
|
|
all_secrets ||= {}
|
|
|
|
# generate secrets
|
|
env_secrets = all_secrets[Rails.env.to_s] || {}
|
|
env_secrets['db_key_base'] ||= generate_new_secure_token
|
|
all_secrets[Rails.env.to_s] = env_secrets
|
|
|
|
# save secrets
|
|
File.open('config/secrets.yml', 'w', 0600) do |file|
|
|
file.write(YAML.dump(all_secrets))
|
|
end
|
|
|
|
Rails.application.secrets.db_key_base = env_secrets['db_key_base']
|
|
end
|