2023-01-20 21:22:08 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'distributed_press/v1'
|
|
|
|
|
|
|
|
# Almacena el token de autenticación y la URL, por ahora solo vamos
|
|
|
|
# a tener uno, pero queda abierta la posibilidad de agregar más.
|
|
|
|
class DistributedPressPublisher < ApplicationRecord
|
|
|
|
# Cifrar la información del token en la base de datos
|
|
|
|
has_encrypted :token
|
|
|
|
|
|
|
|
# La instancia es única
|
|
|
|
validates_uniqueness_of :instance
|
|
|
|
|
|
|
|
# El token es necesario
|
|
|
|
validates_presence_of :token
|
|
|
|
|
|
|
|
# Mantener la fecha de vencimiento actualizada
|
|
|
|
before_save :update_expires_at_from_token!, :update_token_from_client!
|
|
|
|
|
|
|
|
# Devuelve todos los tokens que vencen en una hora
|
2023-01-20 21:28:29 +00:00
|
|
|
scope :with_about_to_expire_tokens, lambda {
|
2023-01-20 21:22:08 +00:00
|
|
|
where('expires_at > ? and expires_at < ?', Time.now, Time.now + 1.hour)
|
2023-01-20 21:28:29 +00:00
|
|
|
}
|
2023-01-20 21:22:08 +00:00
|
|
|
|
|
|
|
# Instancia un cliente de Distributed Press a partir del token. Al
|
|
|
|
# cargar un token a punto de vencer se renueva automáticamente.
|
|
|
|
#
|
|
|
|
# @return [DistributedPress::V1::Client]
|
|
|
|
def client
|
|
|
|
@client ||= DistributedPress::V1::Client.new(url: instance, token: token)
|
|
|
|
end
|
|
|
|
|
2023-01-20 23:34:27 +00:00
|
|
|
# @return [String]
|
|
|
|
def to_s
|
|
|
|
"Distributed Press <#{instance}>"
|
|
|
|
end
|
|
|
|
|
2023-01-20 21:22:08 +00:00
|
|
|
private
|
|
|
|
|
|
|
|
# Actualiza o desactiva la fecha de vencimiento a partir de la
|
|
|
|
# información del token.
|
|
|
|
#
|
|
|
|
# @return [nil]
|
|
|
|
def update_expires_at_from_token!
|
|
|
|
self.expires_at = client.token.forever? ? nil : client.token.expires_at
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
|
|
|
# Actualiza el token a partir del cliente, que ya actualiza el token
|
|
|
|
# automáticamente.
|
|
|
|
#
|
|
|
|
# @return [nil]
|
|
|
|
def update_token_from_client!
|
|
|
|
self.token = client.token.to_s
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|