2024-02-16 17:54:50 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'distributed_press/v1/social/client'
|
2024-02-16 19:01:17 +00:00
|
|
|
require 'distributed_press/v1/social/hook'
|
2024-02-22 21:08:48 +00:00
|
|
|
require 'distributed_press/v1/social/inbox'
|
2024-02-21 15:30:01 +00:00
|
|
|
require 'distributed_press/v1/social/dereferencer'
|
2024-02-22 20:56:12 +00:00
|
|
|
require 'httparty/cache/store/redis'
|
2024-02-16 17:54:50 +00:00
|
|
|
|
|
|
|
# Gestiona la Social Inbox de un sitio
|
|
|
|
class SocialInbox
|
|
|
|
# @return [Site]
|
|
|
|
attr_reader :site
|
|
|
|
|
|
|
|
# @param :site [Site]
|
|
|
|
def initialize(site:)
|
|
|
|
@site = site
|
|
|
|
end
|
|
|
|
|
|
|
|
# @return [String]
|
|
|
|
def actor
|
|
|
|
@actor ||=
|
|
|
|
begin
|
|
|
|
user = site.config.dig('activity_pub', 'username')
|
|
|
|
user ||= hostname.split('.', 2).first
|
|
|
|
|
|
|
|
"@#{user}@#{hostname}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-02-20 20:15:43 +00:00
|
|
|
def actor_id
|
|
|
|
@actor_id ||= generate_uri do |uri|
|
|
|
|
uri.path = '/about.jsonld'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-02-16 17:54:50 +00:00
|
|
|
# @return [DistributedPress::V1::Social::Client]
|
|
|
|
def client
|
|
|
|
@client ||= DistributedPress::V1::Social::Client.new(
|
|
|
|
url: site.config.dig('activity_pub', 'url'),
|
|
|
|
public_key_url: public_key_url,
|
|
|
|
private_key_pem: site.private_key_pem,
|
|
|
|
logger: Rails.logger,
|
2024-02-22 20:46:58 +00:00
|
|
|
cache_store: HTTParty::Cache::Store::Redis.new(redis_url: ENV['REDIS_SERVER'])
|
2024-02-16 17:54:50 +00:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2024-02-22 21:08:48 +00:00
|
|
|
# @return [DistributedPress::V1::Social::Inbox]
|
|
|
|
def inbox
|
|
|
|
@inbox ||= DistributedPress::V1::Social::Inbox.new(client: client, actor: actor)
|
|
|
|
end
|
|
|
|
|
2024-02-21 15:30:01 +00:00
|
|
|
# @return [DistributedPress::V1::Social::Dereferencer]
|
|
|
|
def dereferencer
|
|
|
|
@dereferencer ||= DistributedPress::V1::Social::Dereferencer.new(client: client)
|
|
|
|
end
|
|
|
|
|
2024-02-16 19:01:17 +00:00
|
|
|
# @return [DistributedPress::V1::Social::Hook]
|
|
|
|
def hook
|
|
|
|
@hook ||= DistributedPress::V1::Social::Hook.new(client: client, actor: actor)
|
|
|
|
end
|
|
|
|
|
2024-02-16 17:54:50 +00:00
|
|
|
# @return [String]
|
|
|
|
def public_key_url
|
2024-02-20 20:15:43 +00:00
|
|
|
@public_key_url ||= generate_uri do |uri|
|
2024-02-16 17:54:50 +00:00
|
|
|
uri.path = '/about.jsonld'
|
|
|
|
uri.fragment = 'main-key'
|
2024-02-20 20:15:43 +00:00
|
|
|
end
|
2024-02-16 17:54:50 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def hostname
|
|
|
|
@hostname ||=
|
2024-02-17 17:11:17 +00:00
|
|
|
site.config.dig('activity_pub', 'hostname') || site.hostname
|
2024-02-16 17:54:50 +00:00
|
|
|
end
|
2024-02-20 20:15:43 +00:00
|
|
|
|
|
|
|
# Genera una URI dentro de este sitio
|
|
|
|
#
|
|
|
|
# @return [String]
|
|
|
|
def generate_uri(&block)
|
2024-02-21 15:46:38 +00:00
|
|
|
@public_key_url ||= URI("https://#{hostname}").tap(&block).to_s
|
2024-02-20 20:15:43 +00:00
|
|
|
end
|
2024-02-16 17:54:50 +00:00
|
|
|
end
|