3 namespace Friendica\Module;
6 use Friendica\BaseModule;
7 use Friendica\Core\Addon;
8 use Friendica\Core\System;
11 * Prints infos about the current node
13 class Nodeinfo extends BaseModule
16 * Prints the Nodeinfo for a well-known request
20 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
22 public static function printWellKnown(App $app)
24 $config = $app->getConfig();
26 if (!$config->get('system', 'nodeinfo')) {
27 System::httpExit(404);
32 'rel' => 'http://nodeinfo.diaspora.software/ns/schema/1.0',
33 'href' => $app->getBaseURL() . '/nodeinfo/1.0']]
36 header('Content-type: application/json; charset=utf-8');
37 echo json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
41 public static function init()
43 $app = self::getApp();
44 $config = $app->getConfig();
46 if (!$config->get('system', 'nodeinfo')) {
47 System::httpExit(404);
50 if (($app->argc != 2) || ($app->argv[1] != '1.0')) {
51 System::httpExit(404);
55 public static function rawContent()
57 $config = self::getApp()->getConfig();
59 $smtp = (function_exists('imap_open') && !$config->get('system', 'imap_disabled') && !$config->get('system', 'dfrn_only'));
64 'name' => 'friendica',
65 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
80 'openRegistrations' => intval($config->get('config', 'register_policy')) !== Register::CLOSED,
82 'nodeName' => $config->get('config', 'sitename'),
86 if (!empty($config->get('system', 'diaspora_enabled'))) {
87 $nodeinfo['protocols']['inbound'][] = 'diaspora';
88 $nodeinfo['protocols']['outbound'][] = 'diaspora';
91 if (empty($config->get('system', 'ostatus_disabled'))) {
92 $nodeinfo['protocols']['inbound'][] = 'gnusocial';
93 $nodeinfo['protocols']['outbound'][] = 'gnusocial';
96 if (!empty($config->get('system', 'nodeinfo'))) {
98 $nodeinfo['usage']['users'] = [
99 'total' => intval($config->get('nodeinfo', 'total_users')),
100 'activeHalfyear' => intval($config->get('nodeinfo', 'active_users_halfyear')),
101 'activeMonth' => intval($config->get('nodeinfo', 'active_users_monthly'))
103 $nodeinfo['usage']['localPosts'] = intval($config->get('nodeinfo', 'local_posts'));
104 $nodeinfo['usage']['localComments'] = intval($config->get('nodeinfo', 'local_comments'));
106 if (Addon::isEnabled('blogger')) {
107 $nodeinfo['services']['outbound'][] = 'blogger';
109 if (Addon::isEnabled('dwpost')) {
110 $nodeinfo['services']['outbound'][] = 'dreamwidth';
112 if (Addon::isEnabled('statusnet')) {
113 $nodeinfo['services']['inbound'][] = 'gnusocial';
114 $nodeinfo['services']['outbound'][] = 'gnusocial';
116 if (Addon::isEnabled('ijpost')) {
117 $nodeinfo['services']['outbound'][] = 'insanejournal';
119 if (Addon::isEnabled('libertree')) {
120 $nodeinfo['services']['outbound'][] = 'libertree';
122 if (Addon::isEnabled('buffer')) {
123 $nodeinfo['services']['outbound'][] = 'linkedin';
125 if (Addon::isEnabled('ljpost')) {
126 $nodeinfo['services']['outbound'][] = 'livejournal';
128 if (Addon::isEnabled('buffer')) {
129 $nodeinfo['services']['outbound'][] = 'pinterest';
131 if (Addon::isEnabled('posterous')) {
132 $nodeinfo['services']['outbound'][] = 'posterous';
134 if (Addon::isEnabled('pumpio')) {
135 $nodeinfo['services']['inbound'][] = 'pumpio';
136 $nodeinfo['services']['outbound'][] = 'pumpio';
140 $nodeinfo['services']['outbound'][] = 'smtp';
142 if (Addon::isEnabled('tumblr')) {
143 $nodeinfo['services']['outbound'][] = 'tumblr';
145 if (Addon::isEnabled('twitter') || Addon::isEnabled('buffer')) {
146 $nodeinfo['services']['outbound'][] = 'twitter';
148 if (Addon::isEnabled('wppost')) {
149 $nodeinfo['services']['outbound'][] = 'wordpress';
151 $nodeinfo['metadata']['protocols'] = $nodeinfo['protocols'];
152 $nodeinfo['metadata']['protocols']['outbound'][] = 'atom1.0';
153 $nodeinfo['metadata']['protocols']['inbound'][] = 'atom1.0';
154 $nodeinfo['metadata']['protocols']['inbound'][] = 'rss2.0';
156 $nodeinfo['metadata']['services'] = $nodeinfo['services'];
158 if (Addon::isEnabled('twitter')) {
159 $nodeinfo['metadata']['services']['inbound'][] = 'twitter';
162 $nodeinfo['metadata']['explicitContent'] = $config->get('system', 'explicit_content', false) == true;
165 header('Content-type: application/json; charset=utf-8');
166 echo json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);