<?php
/**
* Class handles the NodeInfo API rest endpoints
*/
class Nodeinfo_Endpoint {
/**
* Register the Routes.
*/
public static function register_routes() {
register_rest_route(
'nodeinfo',
'/discovery',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( 'Nodeinfo_Endpoint', 'render_discovery' ),
'permission_callback' => '__return_true',
),
)
);
register_rest_route(
'nodeinfo',
'/(?P<version>[\.\d]+)',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( 'Nodeinfo_Endpoint', 'render_nodeinfo' ),
'permission_callback' => '__return_true',
'args' => array(
'version' => array(
'required' => true,
'type' => 'string',
'description' => __( 'The version of the NodeInfo scheme', 'nodeinfo' ),
'enum' => array(
'1.0',
'1.1',
'2.0',
'2.1',
),
),
),
),
)
);
register_rest_route(
'nodeinfo2',
'/(?P<version>[\.\d]+)',
array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( 'Nodeinfo_Endpoint', 'render_nodeinfo2' ),
'permission_callback' => '__return_true',
'args' => array(
'version' => array(
'required' => true,
'type' => 'string',
'description' => __( 'The version of the NodeInfo2 scheme', 'nodeinfo' ),
'enum' => array(
'1.0',
),
),
),
),
)
);
}
/**
* Render the discovery file.
*
* @param WP_REST_Request $request the request object
* @return WP_REST_Response the response object
*/
public static function render_discovery( WP_REST_Request $request ) {
$discovery = array();
$discovery['links'] = array(
array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.1',
'href' => get_rest_url( null, '/nodeinfo/2.1' ),
),
array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0',
'href' => get_rest_url( null, '/nodeinfo/2.0' ),
),
array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.1',
'href' => get_rest_url( null, '/nodeinfo/1.1' ),
),
array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.0',
'href' => get_rest_url( null, '/nodeinfo/1.0' ),
),
);
$discovery = apply_filters( 'wellknown_nodeinfo_data', $discovery );
// Create the response object
$response = new WP_REST_Response( $discovery );
$response->header( 'Content-Type', 'application/json; profile=http://nodeinfo.diaspora.software' );
return $response;
}
/**
* Render the NodeInfo file.
*
* @param WP_REST_Request $request the request object
* @return WP_REST_Response the response object
*/
public static function render_nodeinfo( WP_REST_Request $request ) {
require_once 'class-nodeinfo.php';
$nodeinfo = new Nodeinfo( $request->get_param( 'version' ) );
// Create the response object
return new WP_REST_Response( $nodeinfo->to_array() );
}
/**
* Render the NodeInfo2 file.
*
* @param WP_REST_Request $request the request object
* @return WP_REST_Response the response object
*/
public static function render_nodeinfo2( WP_REST_Request $request ) {
require_once 'class-nodeinfo2.php';
$nodeinfo2 = new Nodeinfo2( $request->get_param( 'version' ) );
// Create the response object
return new WP_REST_Response( $nodeinfo2->to_array() );
}
/**
* Add Host-Meta and WebFinger discovery links
*
* @param array $jrd the JRD file used by Host-Meta and WebFinger
* @return array the extended JRD file
*/
public static function render_jrd( $jrd ) {
$jrd['links'][] = array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.1',
'href' => get_rest_url( null, '/nodeinfo/2.1' ),
);
$jrd['links'][] = array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0',
'href' => get_rest_url( null, '/nodeinfo/2.0' ),
);
$jrd['links'][] = array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.1',
'href' => get_rest_url( null, '/nodeinfo/1.1' ),
);
$jrd['links'][] = array(
'rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.0',
'href' => get_rest_url( null, '/nodeinfo/1.0' ),
);
return $jrd;
}
}