PluginProbe
ActivityPub / 7.7.0
ActivityPub v7.7.0
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
activitypub / integration / class-nodeinfo.php

class-nodeinfo.php in ActivityPub 7.7.0, at integration/class-nodeinfo.php

144 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * NodeInfo integration file.
4 *
5 * @package Activitypub
6 */
7
8 namespace Activitypub\Integration;
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
16 /**
17 * Compatibility with the NodeInfo plugin.
18 *
19 * @see https://wordpress.org/plugins/nodeinfo/
20 */
21 class Nodeinfo {
22 /**
23 * Initialize the class, registering WordPress hooks.
24 */
25 public static function init() {
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' ) );
30 }
31
32 /**
33 * Extend NodeInfo data.
34 *
35 * @param array $nodeinfo NodeInfo data.
36 * @param string $version The NodeInfo Version.
37 *
38 * @return array The extended array.
39 */
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';
65 }
66
67 $nodeinfo['protocols'][] = 'activitypub';
68
69 $nodeinfo['usage']['users'] = array(
70 'total' => get_total_users(),
71 'activeMonth' => get_active_users(),
72 'activeHalfyear' => get_active_users( 6 ),
73 );
74
75 $nodeinfo['metadata']['federation'] = array( 'enabled' => true );
76 $nodeinfo['metadata']['staffAccounts'] = self::get_staff();
77
78 $nodeinfo['services']['inbound'][] = 'activitypub';
79 $nodeinfo['services']['outbound'][] = 'activitypub';
80
81 return $nodeinfo;
82 }
83
84 /**
85 * Extend NodeInfo2 data.
86 *
87 * @param array $nodeinfo NodeInfo2 data.
88 *
89 * @return array The extended array.
90 */
91 public static function add_nodeinfo2_data( $nodeinfo ) {
92 $nodeinfo['protocols'][] = 'activitypub';
93
94 $nodeinfo['usage']['users'] = array(
95 'total' => get_total_users(),
96 'activeMonth' => get_active_users(),
97 'activeHalfyear' => get_active_users( 6 ),
98 );
99
100 return $nodeinfo;
101 }
102
103 /**
104 * Extend the well-known nodeinfo data.
105 *
106 * @param array $data The well-known nodeinfo data.
107 *
108 * @return array The extended array.
109 */
110 public static function add_wellknown_nodeinfo_data( $data ) {
111 $data['links'][] = array(
112 'rel' => 'https://www.w3.org/ns/activitystreams#Application',
113 'href' => get_rest_url_by_path( 'application' ),
114 );
115
116 return $data;
117 }
118
119 /**
120 * Get all staff accounts (admin users with the "activitypub" capability) and return them in WebFinger resource format.
121 *
122 * @return array List of staff accounts in WebFinger resource format.
123 */
124 private static function get_staff() {
125 // Get all admin users with the cap activitypub.
126 $admins = get_users(
127 array(
128 'role' => 'administrator',
129 'orderby' => 'ID',
130 'order' => 'ASC',
131 'cap' => 'activitypub',
132 'fields' => array( 'ID' ),
133 )
134 );
135
136 return array_map(
137 function ( $user ) {
138 return Webfinger::get_user_resource( $user->ID );
139 },
140 $admins
141 );
142 }
143 }
144