Merge pull request 'Accept all standard actor types' (#751) from Oneric/akkoma:all-actor-types into develop
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/751
This commit is contained in:
commit
764dbeded4
4 changed files with 230 additions and 1 deletions
|
@ -16,11 +16,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.UserValidator do
|
||||||
alias Pleroma.Object.Containment
|
alias Pleroma.Object.Containment
|
||||||
alias Pleroma.Signature
|
alias Pleroma.Signature
|
||||||
|
|
||||||
|
require Pleroma.Constants
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def validate(object, meta)
|
def validate(object, meta)
|
||||||
|
|
||||||
def validate(%{"type" => type, "id" => _id} = data, meta)
|
def validate(%{"type" => type, "id" => _id} = data, meta)
|
||||||
when type in ["Person", "Organization", "Group", "Application"] do
|
when type in Pleroma.Constants.actor_types() do
|
||||||
with :ok <- validate_pubkey(data),
|
with :ok <- validate_pubkey(data),
|
||||||
:ok <- validate_inbox(data),
|
:ok <- validate_inbox(data),
|
||||||
:ok <- contain_collection_origin(data) do
|
:ok <- contain_collection_origin(data) do
|
||||||
|
|
117
test/fixtures/mastodon/service_actor.json
vendored
Normal file
117
test/fixtures/mastodon/service_actor.json
vendored
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
{
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
|
{
|
||||||
|
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
|
||||||
|
"toot": "http://joinmastodon.org/ns#",
|
||||||
|
"featured": {
|
||||||
|
"@id": "toot:featured",
|
||||||
|
"@type": "@id"
|
||||||
|
},
|
||||||
|
"featuredTags": {
|
||||||
|
"@id": "toot:featuredTags",
|
||||||
|
"@type": "@id"
|
||||||
|
},
|
||||||
|
"alsoKnownAs": {
|
||||||
|
"@id": "as:alsoKnownAs",
|
||||||
|
"@type": "@id"
|
||||||
|
},
|
||||||
|
"movedTo": {
|
||||||
|
"@id": "as:movedTo",
|
||||||
|
"@type": "@id"
|
||||||
|
},
|
||||||
|
"schema": "http://schema.org#",
|
||||||
|
"PropertyValue": "schema:PropertyValue",
|
||||||
|
"value": "schema:value",
|
||||||
|
"discoverable": "toot:discoverable",
|
||||||
|
"Device": "toot:Device",
|
||||||
|
"Ed25519Signature": "toot:Ed25519Signature",
|
||||||
|
"Ed25519Key": "toot:Ed25519Key",
|
||||||
|
"Curve25519Key": "toot:Curve25519Key",
|
||||||
|
"EncryptedMessage": "toot:EncryptedMessage",
|
||||||
|
"publicKeyBase64": "toot:publicKeyBase64",
|
||||||
|
"deviceId": "toot:deviceId",
|
||||||
|
"claim": {
|
||||||
|
"@type": "@id",
|
||||||
|
"@id": "toot:claim"
|
||||||
|
},
|
||||||
|
"fingerprintKey": {
|
||||||
|
"@type": "@id",
|
||||||
|
"@id": "toot:fingerprintKey"
|
||||||
|
},
|
||||||
|
"identityKey": {
|
||||||
|
"@type": "@id",
|
||||||
|
"@id": "toot:identityKey"
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"@type": "@id",
|
||||||
|
"@id": "toot:devices"
|
||||||
|
},
|
||||||
|
"messageFranking": "toot:messageFranking",
|
||||||
|
"messageType": "toot:messageType",
|
||||||
|
"cipherText": "toot:cipherText",
|
||||||
|
"suspended": "toot:suspended",
|
||||||
|
"memorial": "toot:memorial",
|
||||||
|
"indexable": "toot:indexable",
|
||||||
|
"focalPoint": {
|
||||||
|
"@container": "@list",
|
||||||
|
"@id": "toot:focalPoint"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "https://mastodont.cat/users/fediverse",
|
||||||
|
"type": "Service",
|
||||||
|
"following": "https://mastodont.cat/users/fediverse/following",
|
||||||
|
"followers": "https://mastodont.cat/users/fediverse/followers",
|
||||||
|
"inbox": "https://mastodont.cat/users/fediverse/inbox",
|
||||||
|
"outbox": "https://mastodont.cat/users/fediverse/outbox",
|
||||||
|
"featured": "https://mastodont.cat/users/fediverse/collections/featured",
|
||||||
|
"featuredTags": "https://mastodont.cat/users/fediverse/collections/tags",
|
||||||
|
"preferredUsername": "fediverse",
|
||||||
|
"name": "fediverse's stats",
|
||||||
|
"summary": "<p>All fediverse alive servers stats. New refactored code!</p><p>Ask server info:</p><p><span class=\"h-card\" translate=\"no\"><a href=\"https://mastodont.cat/@fediverse\" class=\"u-url mention\">@<span>fediverse</span></a></span> server example.server</p><p>Ask software info:</p><p><span class=\"h-card\" translate=\"no\"><a href=\"https://mastodont.cat/@fediverse\" class=\"u-url mention\">@<span>fediverse</span></a></span> soft mastodon</p>",
|
||||||
|
"url": "https://mastodont.cat/@fediverse",
|
||||||
|
"manuallyApprovesFollowers": false,
|
||||||
|
"discoverable": true,
|
||||||
|
"indexable": false,
|
||||||
|
"published": "2020-05-13T00:00:00Z",
|
||||||
|
"memorial": false,
|
||||||
|
"devices": "https://mastodont.cat/users/fediverse/collections/devices",
|
||||||
|
"publicKey": {
|
||||||
|
"id": "https://mastodont.cat/users/fediverse#main-key",
|
||||||
|
"owner": "https://mastodont.cat/users/fediverse",
|
||||||
|
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu2X8LqAR/6j95UUTG02T\nWG+PmNRWnfOl+zjDts3OctyJK7at5AwA+T0be1faHpf+oLREl/dkWXc8VQY2UJzY\n8QTuXXnIkwHAeA7WADB6kPvQhVpfGPgKD0dpAgBz9WHFquMSXcnuyt7q1CDn5wId\nRoUtkCAcg1rOX+lIAoeic5hT0O0sXLJdtaSCTZmGqkF2Cf+/16q8XhRevMRh73vP\nX2PefCr63Iy/Zh5rnVhPluQMyQ6FGxXgd5dEKJRa2kxrhIsrm0TzMX892Ev45AwI\ndppYQOQ+nLOgMYrpFNYdOmizJsn635l18K1r/tyDDAegPp6Kfa8v+BaZdOmNTFKr\n/wIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
|
},
|
||||||
|
"tag": [],
|
||||||
|
"attachment": [
|
||||||
|
{
|
||||||
|
"type": "PropertyValue",
|
||||||
|
"name": "code",
|
||||||
|
"value": "<a href=\"https://codeberg.org/spla/stats\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">codeberg.org/spla/stats</span><span class=\"invisible\"></span></a>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PropertyValue",
|
||||||
|
"name": "my user-agent",
|
||||||
|
"value": ""fediverse's stats (fediverse@mastodont.cat)""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PropertyValue",
|
||||||
|
"name": "coded by",
|
||||||
|
"value": "<span class=\"h-card\" translate=\"no\"><a href=\"https://mastodont.cat/@spla\" class=\"u-url mention\">@<span>spla</span></a></span>"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"endpoints": {
|
||||||
|
"sharedInbox": "https://mastodont.cat/inbox"
|
||||||
|
},
|
||||||
|
"icon": {
|
||||||
|
"type": "Image",
|
||||||
|
"mediaType": "image/png",
|
||||||
|
"url": "https://mastodont.cat/system/accounts/avatars/000/149/323/original/33201dbeb139a24a.png"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "Image",
|
||||||
|
"mediaType": "image/jpeg",
|
||||||
|
"url": "https://mastodont.cat/system/accounts/headers/000/149/323/original/75c861d59e5a8860.jpeg"
|
||||||
|
}
|
||||||
|
}
|
72
test/fixtures/peertube/actor-videochannel.json
vendored
Normal file
72
test/fixtures/peertube/actor-videochannel.json
vendored
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
|
{
|
||||||
|
"RsaSignature2017": "https://w3id.org/security#RsaSignature2017"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pt": "https://joinpeertube.org/ns#",
|
||||||
|
"sc": "http://schema.org/",
|
||||||
|
"playlists": {
|
||||||
|
"@id": "pt:playlists",
|
||||||
|
"@type": "@id"
|
||||||
|
},
|
||||||
|
"support": {
|
||||||
|
"@type": "sc:Text",
|
||||||
|
"@id": "pt:support"
|
||||||
|
},
|
||||||
|
"icons": "as:icon"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "Group",
|
||||||
|
"id": "https://spectra.video/video-channels/fediforum_demos",
|
||||||
|
"following": "https://spectra.video/video-channels/fediforum_demos/following",
|
||||||
|
"followers": "https://spectra.video/video-channels/fediforum_demos/followers",
|
||||||
|
"playlists": "https://spectra.video/video-channels/fediforum_demos/playlists",
|
||||||
|
"inbox": "https://spectra.video/video-channels/fediforum_demos/inbox",
|
||||||
|
"outbox": "https://spectra.video/video-channels/fediforum_demos/outbox",
|
||||||
|
"preferredUsername": "fediforum_demos",
|
||||||
|
"url": "https://spectra.video/video-channels/fediforum_demos",
|
||||||
|
"name": "FediForum Demos",
|
||||||
|
"endpoints": {
|
||||||
|
"sharedInbox": "https://spectra.video/inbox"
|
||||||
|
},
|
||||||
|
"publicKey": {
|
||||||
|
"id": "https://spectra.video/video-channels/fediforum_demos#main-key",
|
||||||
|
"owner": "https://spectra.video/video-channels/fediforum_demos",
|
||||||
|
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFVESAz0Z28zhXVJafzg\nKXVWS6yuZdQ4vOuA+k//ioSpNls53pI9vwQyixNa+QLdnXxm51dy//Py49wZbzAV\n2nC2FEnzcCM/EZvA4gzy7wekcjnGIz3equbdLOj3IAJJTSwCvZpW2f0poAa1CUmQ\nDRV5p3t3bjtUX5B9RnhiuDitN8qCzEeEbD9SHoyMDIACl8wXer8eyi5v98CMTHwh\nJYUJZJmS7/SSlJO2aqThEBaAYCUzVxlcXOecF1N1RWjjtwqi9xXxmlJ+teivYyST\nYfCeLmY/zZPY7OjoBxoVcVa/Yj3Wg6Nt+A5co9NATpsXmud7GWx4CvQ00uH/fa7e\nvQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
|
},
|
||||||
|
"published": "2024-03-26T19:34:06.073Z",
|
||||||
|
"icon": [
|
||||||
|
{
|
||||||
|
"type": "Image",
|
||||||
|
"mediaType": "image/png",
|
||||||
|
"height": 48,
|
||||||
|
"width": 48,
|
||||||
|
"url": "https://spectra.video/lazy-static/avatars/b13e5038-0169-420e-a6bc-4f5e0666fae6.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Image",
|
||||||
|
"mediaType": "image/png",
|
||||||
|
"height": 120,
|
||||||
|
"width": 120,
|
||||||
|
"url": "https://spectra.video/lazy-static/avatars/559b141a-96ec-4161-8889-1111b71abca0.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"image": {
|
||||||
|
"type": "Image",
|
||||||
|
"mediaType": "image/png",
|
||||||
|
"height": 317,
|
||||||
|
"width": 1920,
|
||||||
|
"url": "https://spectra.video/lazy-static/banners/bbe18e2c-79ef-4640-9193-cdd743c964dd.png"
|
||||||
|
},
|
||||||
|
"summary": "Demos from the the FediForum Unconference. For the sake of simplicity, demos are [broken out into playlists](https://spectra.video/c/fediforum_demos/video-playlists) representing each FediForum Event.",
|
||||||
|
"support": "Check out our site: https://fediforum.org/\nFollow us on Mastodon: https://mastodon.social/@fediforum",
|
||||||
|
"attributedTo": [
|
||||||
|
{
|
||||||
|
"type": "Person",
|
||||||
|
"id": "https://spectra.video/accounts/fediforum"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Akkoma: Magically expressive social media
|
||||||
|
# Copyright © 2024 Akkoma Authors <https://akkoma.dev/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.ActivityPub.ObjectValidators.UserValidatorTest do
|
||||||
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.Web.ActivityPub.ObjectValidators.UserValidator
|
||||||
|
|
||||||
|
# all standard actor types are listed here:
|
||||||
|
# https://www.w3.org/TR/activitystreams-vocabulary/#actor-types
|
||||||
|
describe "accepts standard type" do
|
||||||
|
test "Application" do
|
||||||
|
validates_file!("test/fixtures/mastodon/application_actor.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Group" do
|
||||||
|
validates_file!("test/fixtures/peertube/actor-videochannel.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Organization" do
|
||||||
|
validates_file!("test/fixtures/tesla_mock/wedistribute-user.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Person" do
|
||||||
|
validates_file!("test/fixtures/bridgy/actor.json")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "Service" do
|
||||||
|
validates_file!("test/fixtures/mastodon/service_actor.json")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp validates_file!(path) do
|
||||||
|
user_data = Jason.decode!(File.read!(path))
|
||||||
|
{:ok, _validated_data, _meta} = UserValidator.validate(user_data, [])
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue