Update TokenAuthenticatable so methods can be overridden
This commit is contained in:
parent
6b0d493350
commit
364791c9f0
2 changed files with 19 additions and 8 deletions
|
@ -7,11 +7,15 @@ class ApplicationSetting < ActiveRecord::Base
|
||||||
include IgnorableColumn
|
include IgnorableColumn
|
||||||
include ChronicDurationAttribute
|
include ChronicDurationAttribute
|
||||||
|
|
||||||
include ApplicationSettingImplementation
|
|
||||||
|
|
||||||
add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption) ? :optional : :required }
|
add_authentication_token_field :runners_registration_token, encrypted: -> { Feature.enabled?(:application_settings_tokens_optional_encryption) ? :optional : :required }
|
||||||
add_authentication_token_field :health_check_access_token
|
add_authentication_token_field :health_check_access_token
|
||||||
|
|
||||||
|
# Include here so it can override methods from
|
||||||
|
# `add_authentication_token_field`
|
||||||
|
# We don't prepend for now because otherwise we'll need to
|
||||||
|
# fix a lot of tests using allow_any_instance_of
|
||||||
|
include ApplicationSettingImplementation
|
||||||
|
|
||||||
serialize :restricted_visibility_levels # rubocop:disable Cop/ActiveRecordSerialize
|
serialize :restricted_visibility_levels # rubocop:disable Cop/ActiveRecordSerialize
|
||||||
serialize :import_sources # rubocop:disable Cop/ActiveRecordSerialize
|
serialize :import_sources # rubocop:disable Cop/ActiveRecordSerialize
|
||||||
serialize :disabled_oauth_sign_in_sources, Array # rubocop:disable Cop/ActiveRecordSerialize
|
serialize :disabled_oauth_sign_in_sources, Array # rubocop:disable Cop/ActiveRecordSerialize
|
||||||
|
|
|
@ -26,34 +26,41 @@ module TokenAuthenticatable
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method(token_field) do
|
mod = token_authenticatable_module
|
||||||
|
|
||||||
|
mod.define_method(token_field) do
|
||||||
strategy.get_token(self)
|
strategy.get_token(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method("set_#{token_field}") do |token|
|
mod.define_method("set_#{token_field}") do |token|
|
||||||
strategy.set_token(self, token)
|
strategy.set_token(self, token)
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method("ensure_#{token_field}") do
|
mod.define_method("ensure_#{token_field}") do
|
||||||
strategy.ensure_token(self)
|
strategy.ensure_token(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a token, but only saves when the database is in read & write mode
|
# Returns a token, but only saves when the database is in read & write mode
|
||||||
define_method("ensure_#{token_field}!") do
|
mod.define_method("ensure_#{token_field}!") do
|
||||||
strategy.ensure_token!(self)
|
strategy.ensure_token!(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Resets the token, but only saves when the database is in read & write mode
|
# Resets the token, but only saves when the database is in read & write mode
|
||||||
define_method("reset_#{token_field}!") do
|
mod.define_method("reset_#{token_field}!") do
|
||||||
strategy.reset_token!(self)
|
strategy.reset_token!(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
define_method("#{token_field}_matches?") do |other_token|
|
mod.define_method("#{token_field}_matches?") do |other_token|
|
||||||
token = read_attribute(token_field)
|
token = read_attribute(token_field)
|
||||||
token.present? && ActiveSupport::SecurityUtils.variable_size_secure_compare(other_token, token)
|
token.present? && ActiveSupport::SecurityUtils.variable_size_secure_compare(other_token, token)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def token_authenticatable_module
|
||||||
|
@token_authenticatable_module ||=
|
||||||
|
const_set(:TokenAuthenticatable, Module.new).tap(&method(:include))
|
||||||
|
end
|
||||||
|
|
||||||
def token_authenticatable_fields
|
def token_authenticatable_fields
|
||||||
@token_authenticatable_fields ||= []
|
@token_authenticatable_fields ||= []
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue