diff --git a/app/models/concerns/api_entreprise_token_concern.rb b/app/models/concerns/api_entreprise_token_concern.rb new file mode 100644 index 000000000..e12d00048 --- /dev/null +++ b/app/models/concerns/api_entreprise_token_concern.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module APIEntrepriseTokenConcern + extend ActiveSupport::Concern + + SOON_TO_EXPIRE_DELAY = 1.month + + included do + validates :api_entreprise_token, jwt_token: true, allow_blank: true + before_save :set_api_entreprise_token_expires_at, if: :will_save_change_to_api_entreprise_token? + + def api_entreprise_role?(role) + APIEntrepriseToken.new(api_entreprise_token).role?(role) + end + + def api_entreprise_token + self[:api_entreprise_token].presence || Rails.application.secrets.api_entreprise[:key] + end + + def api_entreprise_token_expired? + APIEntrepriseToken.new(api_entreprise_token).expired? + end + + def api_entreprise_token_expires_soon? + api_entreprise_token_expires_at && api_entreprise_token_expires_at <= SOON_TO_EXPIRE_DELAY.from_now + end + + def set_api_entreprise_token_expires_at + self.api_entreprise_token_expires_at = APIEntrepriseToken.new(api_entreprise_token).expiration + end + end +end diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 792d457c6..9a0c9d42b 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Procedure < ApplicationRecord + include APIEntrepriseTokenConcern include ProcedureStatsConcern include EncryptableConcern include InitiationProcedureConcern @@ -284,11 +285,9 @@ class Procedure < ApplicationRecord size: { less_than: LOGO_MAX_SIZE }, if: -> { new_record? || created_at > Date.new(2020, 11, 13) } - validates :api_entreprise_token, jwt_token: true, allow_blank: true validates :api_particulier_token, format: { with: /\A[A-Za-z0-9\-_=.]{15,}\z/ }, allow_blank: true validate :validate_auto_archive_on_in_the_future, if: :will_save_change_to_auto_archive_on? - before_save :set_api_entreprise_token_expires_at, if: :will_save_change_to_api_entreprise_token? before_save :update_juridique_required after_save :extend_conservation_for_dossiers @@ -756,18 +755,6 @@ class Procedure < ApplicationRecord "Procedure;#{id}" end - def api_entreprise_role?(role) - APIEntrepriseToken.new(api_entreprise_token).role?(role) - end - - def api_entreprise_token - self[:api_entreprise_token].presence || Rails.application.secrets.api_entreprise[:key] - end - - def api_entreprise_token_expired? - APIEntrepriseToken.new(api_entreprise_token).expired? - end - def create_new_revision(revision = nil) transaction do new_revision = (revision || draft_revision) @@ -974,10 +961,6 @@ class Procedure < ApplicationRecord monavis_embed.gsub('nd_source=button', "nd_source=#{source}").gsub('