main
Terence Eden 2024-03-02 21:35:32 +00:00
rodzic a463087ec4
commit edbf35c4d3
1 zmienionych plików z 69 dodań i 2 usunięć

Wyświetl plik

@ -112,6 +112,7 @@
case ".well-known/webfinger":
webfinger(); // Mandatory. Static.
case rawurldecode( $username ):
case "@" . rawurldecode( $username ): // Some software assumes usernames start with an `@`
username(); // Mandatory. Static
case "following":
following(); // Mandatory. Can be static or dynamic.
@ -119,18 +120,22 @@
followers(); // Mandatory. Can be static or dynamic.
case "inbox":
inbox(); // Mandatory.
case "outbox":
outbox(); // Optional. Dynamic.
case "write":
write(); // User interface for writing posts
case "send":
send(); // API for posting content to the Fediverse
case "outbox":
outbox(); // Optional. Dynamic.
case "follow":
follow(); // User interface for following an external user
case "follow_user":
follow_user(); // API for following a user
case "read":
read(); // User interface for reading posts
case ".well-known/nodeinfo":
wk_nodeinfo(); // Optional. Static.
case "nodeinfo/2.1":
nodeinfo(); // Optional. Static.
case "/":
home(); // Optional. Can be dynamic
default:
@ -1258,6 +1263,68 @@ HTML;
die();
}
// The NodeInfo Protocol is used to identify servers.
// It is looked up with `example.com/.well-known/nodeinfo`
// See https://nodeinfo.diaspora.software/
function wk_nodeinfo() {
global $server;
$nodeinfo = array(
"links" => array(
array(
"rel" => "self",
"type" => "http://nodeinfo.diaspora.software/ns/schema/2.1",
"href" => "https://{$server}/nodeinfo/2.1"
)
)
);
header( "Content-Type: application/json" );
echo json_encode( $nodeinfo );
die();
}
// The NodeInfo Protocol is used to identify servers.
// It is looked up with `example.com/.well-known/nodeinfo` which points to this resource
// See http://nodeinfo.diaspora.software/docson/index.html#/ns/schema/2.0#$$expand
function nodeinfo() {
global $server, $directories;
// Get all posts
$posts = glob( $directories["posts"] . "/*.json") ;
// Number of posts
$totalItems = count( $posts );
$nodeinfo = array(
"version" => "2.1", // Version of the schema, not the software
"software" => array(
"name" => "Single File ActivityPub Server in PHP",
"version" => "0.000000001",
"repository" => "https://gitlab.com/edent/activitypub-single-php-file/"
),
"protocols" => array( "activitypub"),
"services" => array(
"inbound" => array(),
"outbound" => array()
),
"openRegistrations" => false,
"usage" => array(
"users" => array(
"total" => 1
),
"localPosts" => $totalItems
),
"metadata"=> array(
"nodeName" => "activitypub-single-php-file",
"nodeDescription" => "This is a single PHP file which acts as an extremely basic ActivityPub server.",
"spdx" => "AGPL-3.0-or-later"
)
);
header( "Content-Type: application/json" );
echo json_encode( $nodeinfo );
die();
}
// "One to stun, two to kill, three to make sure"
die();
die();