mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-16 15:51:41 +00:00
69 lines
1.7 KiB
Ruby
69 lines
1.7 KiB
Ruby
|
# 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
|
||
|
scope :with_about_to_expire_tokens, -> do
|
||
|
where('expires_at > ? and expires_at < ?', Time.now, Time.now + 1.hour)
|
||
|
end
|
||
|
|
||
|
# Al cambiar el token genera un cliente nuevo
|
||
|
#
|
||
|
# @return [String]
|
||
|
def token=(new_token)
|
||
|
@client = nil
|
||
|
super
|
||
|
end
|
||
|
|
||
|
# Al cambiar la instancia genera un cliente nuevo
|
||
|
#
|
||
|
# @return [String]
|
||
|
def instance=(new_instance)
|
||
|
@client = nil
|
||
|
super
|
||
|
end
|
||
|
|
||
|
# 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
|
||
|
|
||
|
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
|