federails 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +38 -1
- data/app/controllers/federails/client/activities_controller.rb +9 -3
- data/app/controllers/federails/client/actors_controller.rb +5 -2
- data/app/controllers/federails/client/followings_controller.rb +13 -3
- data/app/controllers/federails/client_controller.rb +9 -0
- data/app/controllers/federails/server/activities_controller.rb +11 -6
- data/app/controllers/federails/server/actors_controller.rb +6 -2
- data/app/controllers/federails/server/followings_controller.rb +3 -2
- data/app/controllers/federails/server/nodeinfo_controller.rb +13 -7
- data/app/controllers/federails/server/web_finger_controller.rb +7 -3
- data/app/controllers/federails/{application_controller.rb → server_controller.rb} +10 -3
- data/app/helpers/federails/server_helper.rb +12 -0
- data/app/models/concerns/federails/entity.rb +67 -15
- data/app/models/concerns/federails/has_uuid.rb +35 -0
- data/app/models/federails/activity.rb +8 -13
- data/app/models/federails/actor.rb +41 -2
- data/app/models/federails/following.rb +9 -0
- data/app/policies/federails/client/activity_policy.rb +3 -0
- data/app/policies/federails/client/actor_policy.rb +1 -1
- data/app/policies/federails/client/following_policy.rb +2 -2
- data/app/policies/federails/federails_policy.rb +4 -0
- data/app/policies/federails/server/activity_policy.rb +3 -0
- data/app/views/federails/client/activities/_activity.html.erb +1 -1
- data/app/views/federails/client/activities/feed.html.erb +8 -1
- data/app/views/federails/client/activities/index.html.erb +1 -1
- data/app/views/federails/client/actors/index.html.erb +14 -0
- data/app/views/federails/client/actors/show.html.erb +101 -89
- data/app/views/federails/client/common/_client_links.html.erb +24 -0
- data/app/views/federails/client/followings/_follow_actions.html.erb +32 -0
- data/app/views/federails/client/followings/_form.html.erb +1 -0
- data/app/views/federails/server/activities/{_activity.json.jbuilder → _activity.activitypub.jbuilder} +6 -1
- data/app/views/federails/server/actors/_actor.activitypub.jbuilder +26 -0
- data/app/views/federails/server/nodeinfo/{show.json.jbuilder → show.nodeinfo.jbuilder} +8 -7
- data/app/views/federails/server/web_finger/{find.json.jbuilder → find.jrd.jbuilder} +5 -1
- data/config/initializers/mime_types.rb +21 -0
- data/config/routes.rb +7 -3
- data/db/migrate/20200712133150_create_federails_actors.rb +3 -5
- data/db/migrate/20241002094500_add_uuids.rb +13 -0
- data/db/migrate/20241002094501_add_keypair_to_actors.rb +8 -0
- data/lib/federails/configuration.rb +11 -28
- data/lib/federails/version.rb +1 -1
- data/lib/federails.rb +13 -5
- data/lib/fediverse/inbox.rb +33 -37
- data/lib/fediverse/notifier.rb +44 -5
- data/lib/fediverse/signature.rb +49 -0
- data/lib/fediverse/webfinger.rb +31 -7
- data/lib/generators/federails/copy_client_views/USAGE +8 -0
- data/lib/generators/federails/copy_client_views/copy_client_views_generator.rb +9 -0
- data/lib/generators/federails/install/install_generator.rb +2 -2
- data/lib/generators/federails/install/templates/federails.yml +2 -0
- metadata +28 -20
- data/app/controllers/federails/server/server_controller.rb +0 -17
- data/app/helpers/federails/application_helper.rb +0 -4
- data/app/views/federails/server/actors/_actor.json.jbuilder +0 -11
- data/db/migrate/20240731145400_change_actor_entity_rel_to_polymorphic.rb +0 -11
- /data/app/views/federails/server/activities/{outbox.json.jbuilder → outbox.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/activities/{show.json.jbuilder → show.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/actors/{followers.json.jbuilder → followers.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/actors/{following.json.jbuilder → following.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/actors/{show.json.jbuilder → show.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/followings/{_following.json.jbuilder → _following.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/followings/{show.json.jbuilder → show.activitypub.jbuilder} +0 -0
- /data/app/views/federails/server/nodeinfo/{index.json.jbuilder → index.nodeinfo.jbuilder} +0 -0
- /data/app/views/federails/server/web_finger/{host_meta.xml.erb → host_meta.xrd.erb} +0 -0
data/lib/fediverse/inbox.rb
CHANGED
@@ -2,34 +2,33 @@ require 'fediverse/request'
|
|
2
2
|
|
3
3
|
module Fediverse
|
4
4
|
class Inbox
|
5
|
+
@@handlers = {} # rubocop:todo Style/ClassVars
|
5
6
|
class << self
|
7
|
+
def register_handler(activity_type, object_type, klass, method)
|
8
|
+
@@handlers[activity_type] ||= {}
|
9
|
+
@@handlers[activity_type][object_type] ||= {}
|
10
|
+
@@handlers[activity_type][object_type][klass] = method
|
11
|
+
end
|
12
|
+
|
6
13
|
def dispatch_request(payload)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
when 'Follow'
|
11
|
-
handle_create_follow_request payload
|
12
|
-
when 'Accept'
|
13
|
-
handle_accept_request payload
|
14
|
-
when 'Undo'
|
15
|
-
handle_undo_request payload
|
16
|
-
else
|
17
|
-
# FIXME: Fails silently
|
18
|
-
# raise NotImplementedError
|
19
|
-
Rails.logger.debug { "Unhandled activity type: #{payload['type']}" }
|
14
|
+
handlers = get_handlers(payload['type'], payload['object'].is_a?(Hash) ? payload.dig('object', 'type') : nil)
|
15
|
+
handlers.each_pair do |klass, method|
|
16
|
+
klass.send method, payload
|
20
17
|
end
|
18
|
+
return unless handlers.empty?
|
19
|
+
|
20
|
+
# FIXME: Fails silently
|
21
|
+
# raise NotImplementedError
|
22
|
+
Rails.logger.debug { "Unhandled activity type: #{payload['type']}" }
|
21
23
|
end
|
22
24
|
|
23
25
|
private
|
24
26
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
when 'Note'
|
31
|
-
handle_create_note activity
|
32
|
-
end
|
27
|
+
def get_handlers(activity_type, object_type)
|
28
|
+
{}.merge(@@handlers.dig(activity_type, object_type) || {})
|
29
|
+
.merge(@@handlers.dig(activity_type, '*') || {})
|
30
|
+
.merge(@@handlers.dig('*', '*') || {})
|
31
|
+
.merge(@@handlers.dig('*', object_type) || {})
|
33
32
|
end
|
34
33
|
|
35
34
|
def handle_create_follow_request(activity)
|
@@ -39,33 +38,30 @@ module Fediverse
|
|
39
38
|
Federails::Following.create! actor: actor, target_actor: target_actor, federated_url: activity['id']
|
40
39
|
end
|
41
40
|
|
42
|
-
def
|
43
|
-
|
44
|
-
Note.create! actor: actor, content: activity['content'], federated_url: activity['id']
|
45
|
-
end
|
41
|
+
def handle_accept_request(activity)
|
42
|
+
original_activity = Request.get(activity['object'])
|
46
43
|
|
47
|
-
|
48
|
-
|
49
|
-
raise
|
50
|
-
|
51
|
-
actor = Federails::Actor.find_or_create_by_object activity['actor']
|
52
|
-
target_actor = Federails::Actor.find_or_create_by_object activity['object']
|
53
|
-
raise 'Follow not accepted by target actor but by someone else' if payload['actor'] != target_actor.federated_url
|
44
|
+
actor = Federails::Actor.find_or_create_by_object original_activity['actor']
|
45
|
+
target_actor = Federails::Actor.find_or_create_by_object original_activity['object']
|
46
|
+
raise 'Follow not accepted by target actor but by someone else' if activity['actor'] != target_actor.federated_url
|
54
47
|
|
55
48
|
follow = Federails::Following.find_by actor: actor, target_actor: target_actor
|
56
49
|
follow.accept!
|
57
50
|
end
|
58
51
|
|
59
|
-
def handle_undo_request(
|
60
|
-
|
61
|
-
raise "Can't undo things that are not Follow" unless activity['type'] == 'Follow'
|
52
|
+
def handle_undo_request(activity)
|
53
|
+
original_activity = activity['object']
|
62
54
|
|
63
|
-
actor = Federails::Actor.find_or_create_by_object
|
64
|
-
target_actor = Federails::Actor.find_or_create_by_object
|
55
|
+
actor = Federails::Actor.find_or_create_by_object original_activity['actor']
|
56
|
+
target_actor = Federails::Actor.find_or_create_by_object original_activity['object']
|
65
57
|
|
66
58
|
follow = Federails::Following.find_by actor: actor, target_actor: target_actor
|
67
59
|
follow&.destroy
|
68
60
|
end
|
69
61
|
end
|
62
|
+
|
63
|
+
register_handler 'Follow', '*', self, :handle_create_follow_request
|
64
|
+
register_handler 'Accept', 'Follow', self, :handle_accept_request
|
65
|
+
register_handler 'Undo', 'Follow', self, :handle_undo_request
|
70
66
|
end
|
71
67
|
end
|
data/lib/fediverse/notifier.rb
CHANGED
@@ -1,21 +1,60 @@
|
|
1
|
+
require 'fediverse/signature'
|
2
|
+
|
1
3
|
module Fediverse
|
2
4
|
class Notifier
|
3
5
|
class << self
|
4
6
|
def post_to_inboxes(activity)
|
5
7
|
actors = activity.recipients
|
6
|
-
|
7
8
|
Rails.logger.debug('Nobody to notice') && return if actors.count.zero?
|
8
9
|
|
9
|
-
message =
|
10
|
+
message = payload(activity)
|
11
|
+
actors.each do |recipient|
|
12
|
+
Rails.logger.debug { "Sending activity ##{activity.id} to #{recipient.inbox_url}" }
|
13
|
+
post_to_inbox(to: recipient, message: message, from: activity.actor)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def payload(activity)
|
20
|
+
Federails::ServerController.renderer.new.render(
|
10
21
|
template: 'federails/server/activities/show',
|
11
22
|
assigns: { activity: activity },
|
12
23
|
format: :json
|
13
24
|
)
|
14
|
-
|
15
|
-
|
16
|
-
|
25
|
+
end
|
26
|
+
|
27
|
+
def post_to_inbox(to:, message:, from: nil)
|
28
|
+
conn = Faraday.default_connection
|
29
|
+
conn.builder.build_response(
|
30
|
+
conn,
|
31
|
+
signed_request(to: to, message: message, from: from)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def signed_request(to:, message:, from:)
|
36
|
+
req = request(to: to, message: message)
|
37
|
+
req.headers['Signature'] = Fediverse::Signature.sign(sender: from, request: req) if from
|
38
|
+
req
|
39
|
+
end
|
40
|
+
|
41
|
+
def request(to:, message:) # rubocop:todo Metrics/AbcSize
|
42
|
+
Faraday.default_connection.build_request(:post) do |req|
|
43
|
+
req.url to.inbox_url
|
44
|
+
req.body = message
|
45
|
+
req.headers['Content-Type'] = Mime[:activitypub].to_s
|
46
|
+
req.headers['Accept'] = Mime[:activitypub].to_s
|
47
|
+
req.headers['Host'] = URI.parse(to.inbox_url).host
|
48
|
+
req.headers['Date'] = Time.now.utc.httpdate
|
49
|
+
req.headers['Digest'] = digest(message)
|
17
50
|
end
|
18
51
|
end
|
52
|
+
|
53
|
+
def digest(message)
|
54
|
+
"SHA-256=#{Base64.strict_encode64(
|
55
|
+
OpenSSL::Digest.new('SHA256').digest(message)
|
56
|
+
)}"
|
57
|
+
end
|
19
58
|
end
|
20
59
|
end
|
21
60
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Fediverse
|
2
|
+
class Signature
|
3
|
+
class << self
|
4
|
+
def sign(sender:, request:)
|
5
|
+
private_key = OpenSSL::PKey::RSA.new sender.private_key, Rails.application.credentials.secret_key_base
|
6
|
+
headers = '(request-target) host date digest'
|
7
|
+
sig = Base64.strict_encode64(
|
8
|
+
private_key.sign(
|
9
|
+
OpenSSL::Digest.new('SHA256'), signature_payload(request: request, headers: headers)
|
10
|
+
)
|
11
|
+
)
|
12
|
+
{
|
13
|
+
keyId: sender.key_id,
|
14
|
+
headers: headers,
|
15
|
+
signature: sig,
|
16
|
+
}.map { |k, v| "#{k}=\"#{v}\"" }.join(',')
|
17
|
+
end
|
18
|
+
|
19
|
+
def verify(sender:, request:)
|
20
|
+
raise 'Unsigned headers' unless request.headers['Signature']
|
21
|
+
|
22
|
+
signature_header = request.headers['Signature'].split(',').to_h do |pair|
|
23
|
+
/\A(?<key>[\w]+)="(?<value>.*)"\z/ =~ pair
|
24
|
+
[key, value]
|
25
|
+
end
|
26
|
+
|
27
|
+
headers = signature_header['headers']
|
28
|
+
signature = Base64.decode64(signature_header['signature'])
|
29
|
+
key = OpenSSL::PKey::RSA.new(sender.public_key)
|
30
|
+
|
31
|
+
comparison_string = signature_payload(request: request, headers: headers)
|
32
|
+
|
33
|
+
key.verify(OpenSSL::Digest.new('SHA256'), signature, comparison_string)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def signature_payload(request:, headers:)
|
39
|
+
headers.split.map do |signed_header_name|
|
40
|
+
if signed_header_name == '(request-target)'
|
41
|
+
"(request-target): #{request.http_method} #{URI.parse(request.path).path}"
|
42
|
+
else
|
43
|
+
"#{signed_header_name}: #{request.headers[signed_header_name.capitalize]}"
|
44
|
+
end
|
45
|
+
end.join("\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/fediverse/webfinger.rb
CHANGED
@@ -30,28 +30,52 @@ module Fediverse
|
|
30
30
|
|
31
31
|
# Returns actor id
|
32
32
|
def webfinger(username, domain)
|
33
|
-
|
34
|
-
json = get_json "#{scheme}://#{domain}/.well-known/webfinger", resource: "acct:#{username}@#{domain}"
|
33
|
+
json = webfinger_response(username, domain)
|
35
34
|
link = json['links'].find { |l| l['type'] == 'application/activity+json' }
|
36
35
|
|
37
36
|
link['href'] if link
|
38
37
|
end
|
39
38
|
|
39
|
+
# Returns remote follow link template, or complete link if actor_url is provided
|
40
|
+
def remote_follow_url(username, domain, actor_url: nil)
|
41
|
+
json = webfinger_response(username, domain)
|
42
|
+
link = json['links'].find { |l| l['rel'] == 'http://ostatus.org/schema/1.0/subscribe' }
|
43
|
+
return nil if link&.dig('template').nil?
|
44
|
+
|
45
|
+
if actor_url
|
46
|
+
link['template'].gsub('{uri}', CGI.escape(actor_url))
|
47
|
+
else
|
48
|
+
link['template']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
40
52
|
private
|
41
53
|
|
54
|
+
def webfinger_response(username, domain)
|
55
|
+
scheme = Federails.configuration.force_ssl ? 'https' : 'http'
|
56
|
+
get_json "#{scheme}://#{domain}/.well-known/webfinger", resource: "acct:#{username}@#{domain}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def server_and_port(id)
|
60
|
+
uri = URI.parse id
|
61
|
+
if uri.port && [80, 443].exclude?(uri.port)
|
62
|
+
"#{uri.host}:#{uri.port}"
|
63
|
+
else
|
64
|
+
uri.host
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
42
68
|
def webfinger_to_actor(data)
|
43
|
-
uri = URI.parse data['id']
|
44
|
-
server = uri.host
|
45
|
-
server += ":#{uri.port}" if uri.port && [80, 443].exclude?(uri.port)
|
46
69
|
Federails::Actor.new federated_url: data['id'],
|
47
70
|
username: data['preferredUsername'],
|
48
71
|
name: data['name'],
|
49
|
-
server:
|
72
|
+
server: server_and_port(data['id']),
|
50
73
|
inbox_url: data['inbox'],
|
51
74
|
outbox_url: data['outbox'],
|
52
75
|
followers_url: data['followers'],
|
53
76
|
followings_url: data['following'],
|
54
|
-
profile_url: data['url']
|
77
|
+
profile_url: data['url'],
|
78
|
+
public_key: data.dig('publicKey', 'publicKeyPem')
|
55
79
|
end
|
56
80
|
|
57
81
|
def get_json(url, payload = {})
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Federails
|
2
|
+
class CopyClientViewsGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../../../../app/views', __dir__)
|
4
|
+
|
5
|
+
def copy_views
|
6
|
+
directory 'federails/client', Rails.root.join('app', 'views', 'federails', 'client')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -3,8 +3,8 @@ module Federails
|
|
3
3
|
source_root File.expand_path('templates', __dir__)
|
4
4
|
|
5
5
|
def copy_files
|
6
|
-
copy_file 'federails.yml', 'config
|
7
|
-
copy_file 'federails.rb', 'config
|
6
|
+
copy_file 'federails.yml', Rails.root.join('config', 'federails.yml')
|
7
|
+
copy_file 'federails.rb', Rails.root.join('config', 'initializers', 'federails.rb')
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -6,9 +6,11 @@ defaults: &defaults
|
|
6
6
|
site_host: http://localhost
|
7
7
|
site_port: 3000
|
8
8
|
enable_discovery: true
|
9
|
+
open_registrations: false
|
9
10
|
app_layout: 'layouts/application'
|
10
11
|
server_routes_path: federation
|
11
12
|
client_routes_path: app
|
13
|
+
#base_client_controller: ::ActionController::Base
|
12
14
|
|
13
15
|
development:
|
14
16
|
<<: *defaults
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: federails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Tancoigne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -119,21 +119,22 @@ files:
|
|
119
119
|
- Rakefile
|
120
120
|
- app/assets/config/federails_manifest.js
|
121
121
|
- app/assets/stylesheets/federails/application.css
|
122
|
-
- app/controllers/federails/application_controller.rb
|
123
122
|
- app/controllers/federails/client/activities_controller.rb
|
124
123
|
- app/controllers/federails/client/actors_controller.rb
|
125
124
|
- app/controllers/federails/client/followings_controller.rb
|
125
|
+
- app/controllers/federails/client_controller.rb
|
126
126
|
- app/controllers/federails/server/activities_controller.rb
|
127
127
|
- app/controllers/federails/server/actors_controller.rb
|
128
128
|
- app/controllers/federails/server/followings_controller.rb
|
129
129
|
- app/controllers/federails/server/nodeinfo_controller.rb
|
130
|
-
- app/controllers/federails/server/server_controller.rb
|
131
130
|
- app/controllers/federails/server/web_finger_controller.rb
|
132
|
-
- app/
|
131
|
+
- app/controllers/federails/server_controller.rb
|
132
|
+
- app/helpers/federails/server_helper.rb
|
133
133
|
- app/jobs/federails/application_job.rb
|
134
134
|
- app/jobs/federails/notify_inbox_job.rb
|
135
135
|
- app/mailers/federails/application_mailer.rb
|
136
136
|
- app/models/concerns/federails/entity.rb
|
137
|
+
- app/models/concerns/federails/has_uuid.rb
|
137
138
|
- app/models/federails/activity.rb
|
138
139
|
- app/models/federails/actor.rb
|
139
140
|
- app/models/federails/application_record.rb
|
@@ -158,7 +159,9 @@ files:
|
|
158
159
|
- app/views/federails/client/actors/index.json.jbuilder
|
159
160
|
- app/views/federails/client/actors/show.html.erb
|
160
161
|
- app/views/federails/client/actors/show.json.jbuilder
|
162
|
+
- app/views/federails/client/common/_client_links.html.erb
|
161
163
|
- app/views/federails/client/followings/_follow.html.erb
|
164
|
+
- app/views/federails/client/followings/_follow_actions.html.erb
|
162
165
|
- app/views/federails/client/followings/_follower.html.erb
|
163
166
|
- app/views/federails/client/followings/_following.json.jbuilder
|
164
167
|
- app/views/federails/client/followings/_form.html.erb
|
@@ -166,24 +169,26 @@ files:
|
|
166
169
|
- app/views/federails/client/followings/index.json.jbuilder
|
167
170
|
- app/views/federails/client/followings/show.html.erb
|
168
171
|
- app/views/federails/client/followings/show.json.jbuilder
|
169
|
-
- app/views/federails/server/activities/_activity.
|
170
|
-
- app/views/federails/server/activities/outbox.
|
171
|
-
- app/views/federails/server/activities/show.
|
172
|
-
- app/views/federails/server/actors/_actor.
|
173
|
-
- app/views/federails/server/actors/followers.
|
174
|
-
- app/views/federails/server/actors/following.
|
175
|
-
- app/views/federails/server/actors/show.
|
176
|
-
- app/views/federails/server/followings/_following.
|
177
|
-
- app/views/federails/server/followings/show.
|
178
|
-
- app/views/federails/server/nodeinfo/index.
|
179
|
-
- app/views/federails/server/nodeinfo/show.
|
180
|
-
- app/views/federails/server/web_finger/find.
|
181
|
-
- app/views/federails/server/web_finger/host_meta.
|
172
|
+
- app/views/federails/server/activities/_activity.activitypub.jbuilder
|
173
|
+
- app/views/federails/server/activities/outbox.activitypub.jbuilder
|
174
|
+
- app/views/federails/server/activities/show.activitypub.jbuilder
|
175
|
+
- app/views/federails/server/actors/_actor.activitypub.jbuilder
|
176
|
+
- app/views/federails/server/actors/followers.activitypub.jbuilder
|
177
|
+
- app/views/federails/server/actors/following.activitypub.jbuilder
|
178
|
+
- app/views/federails/server/actors/show.activitypub.jbuilder
|
179
|
+
- app/views/federails/server/followings/_following.activitypub.jbuilder
|
180
|
+
- app/views/federails/server/followings/show.activitypub.jbuilder
|
181
|
+
- app/views/federails/server/nodeinfo/index.nodeinfo.jbuilder
|
182
|
+
- app/views/federails/server/nodeinfo/show.nodeinfo.jbuilder
|
183
|
+
- app/views/federails/server/web_finger/find.jrd.jbuilder
|
184
|
+
- app/views/federails/server/web_finger/host_meta.xrd.erb
|
185
|
+
- config/initializers/mime_types.rb
|
182
186
|
- config/routes.rb
|
183
187
|
- db/migrate/20200712133150_create_federails_actors.rb
|
184
188
|
- db/migrate/20200712143127_create_federails_followings.rb
|
185
189
|
- db/migrate/20200712174938_create_federails_activities.rb
|
186
|
-
- db/migrate/
|
190
|
+
- db/migrate/20241002094500_add_uuids.rb
|
191
|
+
- db/migrate/20241002094501_add_keypair_to_actors.rb
|
187
192
|
- lib/federails.rb
|
188
193
|
- lib/federails/configuration.rb
|
189
194
|
- lib/federails/engine.rb
|
@@ -192,7 +197,10 @@ files:
|
|
192
197
|
- lib/fediverse/inbox.rb
|
193
198
|
- lib/fediverse/notifier.rb
|
194
199
|
- lib/fediverse/request.rb
|
200
|
+
- lib/fediverse/signature.rb
|
195
201
|
- lib/fediverse/webfinger.rb
|
202
|
+
- lib/generators/federails/copy_client_views/USAGE
|
203
|
+
- lib/generators/federails/copy_client_views/copy_client_views_generator.rb
|
196
204
|
- lib/generators/federails/install/USAGE
|
197
205
|
- lib/generators/federails/install/install_generator.rb
|
198
206
|
- lib/generators/federails/install/templates/federails.rb
|
@@ -222,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
230
|
- !ruby/object:Gem::Version
|
223
231
|
version: '0'
|
224
232
|
requirements: []
|
225
|
-
rubygems_version: 3.
|
233
|
+
rubygems_version: 3.3.7
|
226
234
|
signing_key:
|
227
235
|
specification_version: 4
|
228
236
|
summary: An ActivityPub engine for Ruby on Rails
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Federails
|
2
|
-
module Server
|
3
|
-
class ServerController < Federails::ApplicationController
|
4
|
-
protect_from_forgery with: :null_session
|
5
|
-
|
6
|
-
# def policy_scope(scope, policy_scope_class: nil)
|
7
|
-
# scope = [scope, :server] unless policy_scope_class
|
8
|
-
# super(scope, policy_scope_class: policy_scope_class)
|
9
|
-
# end
|
10
|
-
|
11
|
-
# def authorize(record, query = nil, policy_class: nil)
|
12
|
-
# record = [:server, record] unless policy_class
|
13
|
-
# super(record, query, policy_class: policy_class)
|
14
|
-
# end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
json.set! '@context', 'https://www.w3.org/ns/activitystreams'
|
2
|
-
|
3
|
-
json.id actor.federated_url
|
4
|
-
json.name actor.name
|
5
|
-
json.type actor.entity_configuration[:actor_type]
|
6
|
-
json.preferredUsername actor.username
|
7
|
-
json.inbox actor.inbox_url
|
8
|
-
json.outbox actor.outbox_url
|
9
|
-
json.followers actor.followers_url
|
10
|
-
json.following actor.followings_url
|
11
|
-
json.url actor.profile_url
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class ChangeActorEntityRelToPolymorphic < ActiveRecord::Migration[7.0]
|
2
|
-
def change
|
3
|
-
remove_foreign_key :federails_actors, column: :user_id, to_table: Federails::Configuration.user_table
|
4
|
-
remove_index :federails_actors, :user_id, unique: true
|
5
|
-
change_table :federails_actors do |t|
|
6
|
-
t.rename :user_id, :entity_id
|
7
|
-
t.string :entity_type, null: true, default: Federails::Configuration.user_class&.demodulize
|
8
|
-
t.index [:entity_type, :entity_id], name: 'index_federails_actors_on_entity', unique: true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
/data/app/views/federails/server/activities/{outbox.json.jbuilder → outbox.activitypub.jbuilder}
RENAMED
File without changes
|
/data/app/views/federails/server/activities/{show.json.jbuilder → show.activitypub.jbuilder}
RENAMED
File without changes
|
/data/app/views/federails/server/actors/{followers.json.jbuilder → followers.activitypub.jbuilder}
RENAMED
File without changes
|
/data/app/views/federails/server/actors/{following.json.jbuilder → following.activitypub.jbuilder}
RENAMED
File without changes
|
File without changes
|
File without changes
|
/data/app/views/federails/server/followings/{show.json.jbuilder → show.activitypub.jbuilder}
RENAMED
File without changes
|
File without changes
|
File without changes
|