Initial commit

This commit is contained in:
Yaser
2026-08-13 19:50:53 +03:30
commit 38084458fe
879 changed files with 95198 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
# encoding: UTF-8
# frozen_string_literal: true
Rails.configuration.x.jwt_public_key =
if ENV['JWT_PUBLIC_KEY'].present?
key = OpenSSL::PKey.read(Base64.urlsafe_decode64(ENV['JWT_PUBLIC_KEY']))
raise ArgumentError, 'JWT_PUBLIC_KEY was set to private key, however it should be public.' if key.private?
key
end
::Rails.configuration.x.jwt_options = {
algorithm: ENV.fetch('JWT_ALGORITHM', 'RS256'),
verify_expiration: true,
verify_not_before: true,
iss: ENV['JWT_ISSUER'],
verify_iss: ENV['JWT_ISSUER'].present?,
verify_iat: true,
verify_jti: true,
aud: ENV['JWT_AUDIENCE'].to_s.split(',').reject(&:blank?),
verify_aud: ENV['JWT_AUDIENCE'].present?,
sub: 'session',
verify_sub: true,
}.compact.tap do |jwt_options|
leeway_options = {
leeway: ENV['JWT_DEFAULT_LEEWAY'],
iat_leeway: ENV['JWT_ISSUED_AT_LEEWAY'],
exp_leeway: ENV['JWT_EXPIRATION_LEEWAY'],
nbf_leeway: ENV['JWT_NOT_BEFORE_LEEWAY'],
}.compact.transform_values!(&:to_i)
jwt_options.merge!(leeway_options)
# Set algorithm to 'none' if public key was not provided.
# Since rack-jwt requires public_key for all algorithms except 'none'
# Also using empty public key doesn't make sense unless you use 'none' algorithm.
jwt_options[:algorithm] = 'none' if ::Rails.configuration.x.jwt_public_key.blank?
end
require 'yaml'
require 'openssl'
(YAML.load_file('config/management_api_v1.yml') || {}).deep_symbolize_keys.tap do |x|
x.fetch(:keychain).each do |id, key|
key = OpenSSL::PKey.read(Base64.urlsafe_decode64(key.fetch(:value)))
if key.private?
raise ArgumentError, 'keychain.' + id.to_s + ' was set to private key, ' \
'however it should be public (in config/management_api_v1.yml).'
end
x[:keychain][id][:value] = key
end
x.fetch(:scopes).values.each do |scope|
%i[permitted_signers mandatory_signers].each do |list|
scope[list] = scope.fetch(list, []).map(&:to_sym)
scope[list] = scope.fetch(list, []).map(&:to_sym)
if list == :mandatory_signers && scope[list].empty?
raise ArgumentError, 'scopes.' + scope.to_s + '.' + list.to_s + ' is empty, ' \
'however it should contain at least one value (in config/management_api_v1.yml).'
end
end
end
Rails.configuration.x.security_configuration = x
end