PluginProbe
ActivityPub / 7.8.2
ActivityPub v7.8.2
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 +114 -18 1.0.87.8.2 View file →
@@ -1,49 +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;
14 +use function Activitypub\get_total_users;
15 +
4 16 /**
5 - * Compatibility with the NodeInfo plugin
17 + * Compatibility with the NodeInfo plugin.
6 18 *
7 19 * @see https://wordpress.org/plugins/nodeinfo/
8 20 */
9 21 class Nodeinfo {
10 22 /**
11 - * Initialize the class, registering WordPress hooks
23 + * Initialize the class, registering WordPress hooks.
12 24 */
13 25 public static function init() {
14 - \add_filter( 'nodeinfo_data', array( self::class, 'add_nodeinfo_discovery' ), 10, 2 );
15 - \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( 'wellknown_nodeinfo_data', array( self::class, 'add_wellknown_nodeinfo_data' ) );
16 30 }
17 31
18 32 /**
19 - * Extend NodeInfo data
33 + * Extend NodeInfo data.
20 34 *
21 - * @param array $nodeinfo NodeInfo data
22 - * @param string The NodeInfo Version
35 + * @param array $nodeinfo NodeInfo data.
36 + * @param string $version The NodeInfo Version.
23 37 *
24 - * @return array The extended array
38 + * @return array The extended array.
25 39 */
26 - public static function add_nodeinfo_discovery( $nodeinfo, $version ) {
27 - if ( $version >= '2.0' ) {
28 - $nodeinfo['protocols'][] = 'activitypub';
29 - } else {
30 - $nodeinfo['protocols']['inbound'][] = 'activitypub';
31 - $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';
32 65 }
33 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 +
78 + $nodeinfo['usage']['users'] = array(
79 + 'total' => get_total_users(),
80 + 'activeMonth' => get_active_users(),
81 + 'activeHalfyear' => get_active_users( 6 ),
82 + );
83 +
84 + $nodeinfo['metadata']['federation'] = array( 'enabled' => true );
85 + $nodeinfo['metadata']['staffAccounts'] = self::get_staff();
86 +
34 87 return $nodeinfo;
35 88 }
36 89
37 90 /**
38 - * Extend NodeInfo2 data
91 + * Extend NodeInfo2 data.
39 92 *
40 - * @param array $nodeinfo NodeInfo2 data
93 + * @param array $nodeinfo NodeInfo2 data.
41 94 *
42 - * @return array The extended array
95 + * @return array The extended array.
43 96 */
44 - public static function add_nodeinfo2_discovery( $nodeinfo ) {
97 + public static function add_nodeinfo2_data( $nodeinfo ) {
45 98 $nodeinfo['protocols'][] = 'activitypub';
46 99
100 + $nodeinfo['usage']['users'] = array(
101 + 'total' => get_total_users(),
102 + 'activeMonth' => get_active_users(),
103 + 'activeHalfyear' => get_active_users( 6 ),
104 + );
105 +
47 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 ) );
48 144 }
49 145 }