Class: ApiEngineBase::Secrets::Generate
- Inherits:
-
ApiEngineBase::ServiceBase
- Object
- ApiEngineBase::ServiceBase
- ApiEngineBase::Secrets::Generate
- Defined in:
- app/services/api_engine_base/secrets/generate.rb
Constant Summary collapse
- MAX_RETRY =
10
Constants inherited from ApiEngineBase::ServiceBase
ApiEngineBase::ServiceBase::ON_ARGUMENT_VALIDATION
Instance Method Summary collapse
Methods inherited from ApiEngineBase::ServiceBase
inherited, #internal_validate, #service_base_logging, #validate!
Methods included from ArgumentValidation
Methods included from ApiEngineBase::ServiceLogging
#aletered_message, #class_name, #log, #log_error, #log_info, #log_prefix, #log_warn, #logger, #service_id
Instance Method Details
#call ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/services/api_engine_base/secrets/generate.rb', line 18 def call if cleanse && @attempts.nil? # if this fails ... so be it Cleanse.(user:, reason:) end @attempts ||= 1 record = UserSecret.create!(**db_params) context.record = record context.secret = record.secret rescue ActiveRecord::RecordNotUnique => e if @attempts < MAX_RETRY @attempts += 1 log_warn("Duplicate Secret was generated. Attempting to retry: #{@attempts} of #{MAX_RETRY}") retry else log_error("Duplicate Secret was generated. Exhausted Max attempts of #{MAX_RETRY}.") context.fail!(msg: "Failed to generate Secret. Cannot Continue") end end |
#db_params ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'app/services/api_engine_base/secrets/generate.rb', line 40 def db_params { death_time: death_time&.from_now, use_count_max:, extra:, reason:, secret: generate_secret, user:, }.compact end |
#generate_secret ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'app/services/api_engine_base/secrets/generate.rb', line 51 def generate_secret case type when :numeric secret_length.times.map { SecureRandom.rand(0...10) }.join when :alphanumeric, :hex SecureRandom.public_send(type, secret_length) when :uuid SecureRandom.public_send(type) end end |