PluginProbe
ActivityPub / 9.2.1
ActivityPub v9.2.1
9.3.1 9.3.0 9.2.2 9.2.1 9.2.0 9.1.0 9.0.2 9.0.1 9.0.0 8.3.0 8.2.1 8.2.0 8.1.1 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.2.0 1.3.0 2.0.0 2.0.1 2.1.0 2.1.1 All 160 releases
← All changes | integration/class-nodeinfo.php +104 -23 1.3.09.2.1 View file →
@@ -1,64 +1,145 @@
1 1 <?php
2 +/**
3 + * NodeInfo integration file.
4 + *
5 + * @package Activitypub
6 + */
7 +
2 8 namespace Activitypub\Integration;
3 9
10 +use Activitypub\Webfinger;
11 +
12 +use function Activitypub\get_active_users;
13 +use function Activitypub\get_rest_url_by_path;
4 14 use function Activitypub\get_total_users;
5 -use function Activitypub\get_active_users;
6 15
7 16 /**
8 - * Compatibility with the NodeInfo plugin
17 + * Compatibility with the NodeInfo plugin.
9 18 *
10 19 * @see https://wordpress.org/plugins/nodeinfo/
11 20 */
12 21 class Nodeinfo {
13 22 /**
14 - * Initialize the class, registering WordPress hooks
23 + * Initialize the class, registering WordPress hooks.
15 24 */
16 25 public static function init() {
17 - \add_filter( 'nodeinfo_data', array( self::class, 'add_nodeinfo_discovery' ), 10, 2 );
18 - \add_filter( 'nodeinfo2_data', array( self::class, 'add_nodeinfo2_discovery' ), 10 );
26 + \add_filter( 'nodeinfo_data', array( self::class, 'add_nodeinfo_data' ), 10, 2 );
27 + \add_filter( 'nodeinfo2_data', array( self::class, 'add_nodeinfo2_data' ) );
28 +
29 + \add_filter( 'nodeinfo_discovery', array( self::class, 'add_wellknown_nodeinfo_data' ) );
19 30 }
20 31
21 32 /**
22 - * Extend NodeInfo data
33 + * Extend NodeInfo data.
23 34 *
24 - * @param array $nodeinfo NodeInfo data
25 - * @param string The NodeInfo Version
35 + * @param array $nodeinfo NodeInfo data.
36 + * @param string $version The NodeInfo Version.
26 37 *
27 - * @return array The extended array
38 + * @return array The extended array.
28 39 */
29 - public static function add_nodeinfo_discovery( $nodeinfo, $version ) {
30 - if ( $version >= '2.0' ) {
31 - $nodeinfo['protocols'][] = 'activitypub';
32 - } else {
33 - $nodeinfo['protocols']['inbound'][] = 'activitypub';
34 - $nodeinfo['protocols']['outbound'][] = 'activitypub';
40 + public static function add_nodeinfo_data( $nodeinfo, $version ) {
41 + $nodeinfo = \wp_parse_args(
42 + $nodeinfo,
43 + array(
44 + 'version' => $version,
45 + 'software' => array(),
46 + 'usage' => array(
47 + 'users' => array(
48 + 'total' => 0,
49 + 'activeMonth' => 0,
50 + 'activeHalfyear' => 0,
51 + ),
52 + ),
53 + 'protocols' => array(),
54 + 'services' => array(
55 + 'inbound' => array(),
56 + 'outbound' => array(),
57 + ),
58 + 'metadata' => array(),
59 + )
60 + );
61 +
62 + if ( \version_compare( $version, '2.1', '>=' ) ) {
63 + $nodeinfo['software']['homepage'] = 'https://wordpress.org/plugins/activitypub/';
64 + $nodeinfo['software']['repository'] = 'https://github.com/Automattic/wordpress-activitypub';
35 65 }
36 66
67 + $nodeinfo['protocols'][] = 'activitypub';
68 +
69 + $nodeinfo['services']['inbound'] = \array_merge(
70 + $nodeinfo['services']['inbound'],
71 + array( 'gnusocial' )
72 + );
73 + $nodeinfo['services']['outbound'] = \array_merge(
74 + $nodeinfo['services']['outbound'],
75 + array( 'friendica', 'gnusocial', 'mediagoblin', 'wordpress' )
76 + );
77 +
37 78 $nodeinfo['usage']['users'] = array(
38 79 'total' => get_total_users(),
39 - 'activeMonth' => get_active_users( '1 month ago' ),
40 - 'activeHalfyear' => get_active_users( '6 month ago' ),
80 + 'activeMonth' => get_active_users(),
81 + 'activeHalfyear' => get_active_users( 6 ),
41 82 );
42 83
84 + $nodeinfo['metadata']['federation'] = array( 'enabled' => true );
85 + $nodeinfo['metadata']['staffAccounts'] = self::get_staff();
86 +
43 87 return $nodeinfo;
44 88 }
45 89
46 90 /**
47 - * Extend NodeInfo2 data
91 + * Extend NodeInfo2 data.
48 92 *
49 - * @param array $nodeinfo NodeInfo2 data
93 + * @param array $nodeinfo NodeInfo2 data.
50 94 *
51 - * @return array The extended array
95 + * @return array The extended array.
52 96 */
53 - public static function add_nodeinfo2_discovery( $nodeinfo ) {
97 + public static function add_nodeinfo2_data( $nodeinfo ) {
54 98 $nodeinfo['protocols'][] = 'activitypub';
55 99
56 100 $nodeinfo['usage']['users'] = array(
57 101 'total' => get_total_users(),
58 - 'activeMonth' => get_active_users( '1 month ago' ),
59 - 'activeHalfyear' => get_active_users( '6 month ago' ),
102 + 'activeMonth' => get_active_users(),
103 + 'activeHalfyear' => get_active_users( 6 ),
60 104 );
61 105
62 106 return $nodeinfo;
107 + }
108 +
109 + /**
110 + * Extend the well-known nodeinfo data.
111 + *
112 + * @param array $data The well-known nodeinfo data.
113 + *
114 + * @return array The extended array.
115 + */
116 + public static function add_wellknown_nodeinfo_data( $data ) {
117 + $data['links'][] = array(
118 + 'rel' => 'https://www.w3.org/ns/activitystreams#Application',
119 + 'href' => get_rest_url_by_path( 'application' ),
120 + );
121 +
122 + return $data;
123 + }
124 +
125 + /**
126 + * Get all staff accounts (admin users with the "activitypub" capability) and return them in WebFinger resource format.
127 + *
128 + * @return array List of staff accounts in WebFinger resource format.
129 + */
130 + private static function get_staff() {
131 + // Get all admin users with the cap activitypub.
132 + $admins = \get_users(
133 + array(
134 + 'role' => 'administrator',
135 + 'orderby' => 'ID',
136 + 'order' => 'ASC',
137 + 'cap' => 'activitypub',
138 + 'fields' => 'ID',
139 + )
140 + );
141 + $admins = \array_map( array( Webfinger::class, 'get_user_resource' ), $admins );
142 +
143 + return \array_values( \array_filter( $admins ) );
63 144 }
64 145 }