PluginProbe
ActivityPub / 8.0.2
ActivityPub v8.0.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
activitypub / integration / class-nodeinfo.php

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

146 lines 3.6 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['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
87 return $nodeinfo;
88 }
89
90 /**
91 * Extend NodeInfo2 data.
92 *
93 * @param array $nodeinfo NodeInfo2 data.
94 *
95 * @return array The extended array.
96 */
97 public static function add_nodeinfo2_data( $nodeinfo ) {
98 $nodeinfo['protocols'][] = 'activitypub';
99
100 $nodeinfo['usage']['users'] = array(
101 'total' => get_total_users(),
102 'activeMonth' => get_active_users(),
103 'activeHalfyear' => get_active_users( 6 ),
104 );
105
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 ) );
144 }
145 }
146