]> git.mxchange.org Git - friendica.git/blob - src/Module/Nodeinfo.php
Merge pull request #7063 from nupplaphil/task/mod_amcd
[friendica.git] / src / Module / Nodeinfo.php
1 <?php
2
3 namespace Friendica\Module;
4
5 use Friendica\App;
6 use Friendica\BaseModule;
7 use Friendica\Core\Addon;
8 use Friendica\Core\System;
9
10 /**
11  * Prints infos about the current node
12  */
13 class Nodeinfo extends BaseModule
14 {
15         /**
16          * Prints the Nodeinfo for a well-known request
17          *
18          * @param App $app
19          *
20          * @throws \Friendica\Network\HTTPException\InternalServerErrorException
21          */
22         public static function printWellKnown(App $app)
23         {
24                 $config = $app->getConfig();
25
26                 if (!$config->get('system', 'nodeinfo')) {
27                         System::httpExit(404);
28                 }
29
30                 $nodeinfo = [
31                         'links' => [[
32                                 'rel'  => 'http://nodeinfo.diaspora.software/ns/schema/1.0',
33                                 'href' => $app->getBaseURL() . '/nodeinfo/1.0']]
34                 ];
35
36                 header('Content-type: application/json; charset=utf-8');
37                 echo json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
38                 exit;
39         }
40
41         public static function init()
42         {
43                 $app = self::getApp();
44                 $config = $app->getConfig();
45
46                 if (!$config->get('system', 'nodeinfo')) {
47                         System::httpExit(404);
48                 }
49
50                 if (($app->argc != 2) || ($app->argv[1] != '1.0')) {
51                         System::httpExit(404);
52                 }
53         }
54
55         public static function rawContent()
56         {
57                 $config = self::getApp()->getConfig();
58
59                 $smtp = (function_exists('imap_open') && !$config->get('system', 'imap_disabled') && !$config->get('system', 'dfrn_only'));
60
61                 $nodeinfo = [
62                         'version'           => 1.0,
63                         'software'          => [
64                                 'name'    => 'friendica',
65                                 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION,
66                         ],
67                         'protocols'         => [
68                                 'inbound'  => [
69                                         'friendica',
70                                 ],
71                                 'outbound' => [
72                                         'friendica',
73                                 ],
74                         ],
75                         'services'          => [
76                                 'inbound'  => [],
77                                 'outbound' => [],
78                         ],
79                         'usage'             => [],
80                         'openRegistrations' => intval($config->get('config', 'register_policy')) !== Register::CLOSED,
81                         'metadata'          => [
82                                 'nodeName' => $config->get('config', 'sitename'),
83                         ],
84                 ];
85
86                 if (!empty($config->get('system', 'diaspora_enabled'))) {
87                         $nodeinfo['protocols']['inbound'][] = 'diaspora';
88                         $nodeinfo['protocols']['outbound'][] = 'diaspora';
89                 }
90
91                 if (empty($config->get('system', 'ostatus_disabled'))) {
92                         $nodeinfo['protocols']['inbound'][] = 'gnusocial';
93                         $nodeinfo['protocols']['outbound'][] = 'gnusocial';
94                 }
95
96                 if (!empty($config->get('system', 'nodeinfo'))) {
97
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'))
102                         ];
103                         $nodeinfo['usage']['localPosts'] = intval($config->get('nodeinfo', 'local_posts'));
104                         $nodeinfo['usage']['localComments'] = intval($config->get('nodeinfo', 'local_comments'));
105
106                         if (Addon::isEnabled('blogger')) {
107                                 $nodeinfo['services']['outbound'][] = 'blogger';
108                         }
109                         if (Addon::isEnabled('dwpost')) {
110                                 $nodeinfo['services']['outbound'][] = 'dreamwidth';
111                         }
112                         if (Addon::isEnabled('statusnet')) {
113                                 $nodeinfo['services']['inbound'][] = 'gnusocial';
114                                 $nodeinfo['services']['outbound'][] = 'gnusocial';
115                         }
116                         if (Addon::isEnabled('ijpost')) {
117                                 $nodeinfo['services']['outbound'][] = 'insanejournal';
118                         }
119                         if (Addon::isEnabled('libertree')) {
120                                 $nodeinfo['services']['outbound'][] = 'libertree';
121                         }
122                         if (Addon::isEnabled('buffer')) {
123                                 $nodeinfo['services']['outbound'][] = 'linkedin';
124                         }
125                         if (Addon::isEnabled('ljpost')) {
126                                 $nodeinfo['services']['outbound'][] = 'livejournal';
127                         }
128                         if (Addon::isEnabled('buffer')) {
129                                 $nodeinfo['services']['outbound'][] = 'pinterest';
130                         }
131                         if (Addon::isEnabled('posterous')) {
132                                 $nodeinfo['services']['outbound'][] = 'posterous';
133                         }
134                         if (Addon::isEnabled('pumpio')) {
135                                 $nodeinfo['services']['inbound'][] = 'pumpio';
136                                 $nodeinfo['services']['outbound'][] = 'pumpio';
137                         }
138
139                         if ($smtp) {
140                                 $nodeinfo['services']['outbound'][] = 'smtp';
141                         }
142                         if (Addon::isEnabled('tumblr')) {
143                                 $nodeinfo['services']['outbound'][] = 'tumblr';
144                         }
145                         if (Addon::isEnabled('twitter') || Addon::isEnabled('buffer')) {
146                                 $nodeinfo['services']['outbound'][] = 'twitter';
147                         }
148                         if (Addon::isEnabled('wppost')) {
149                                 $nodeinfo['services']['outbound'][] = 'wordpress';
150                         }
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';
155
156                         $nodeinfo['metadata']['services'] = $nodeinfo['services'];
157
158                         if (Addon::isEnabled('twitter')) {
159                                 $nodeinfo['metadata']['services']['inbound'][] = 'twitter';
160                         }
161
162                         $nodeinfo['metadata']['explicitContent'] = $config->get('system', 'explicit_content', false) == true;
163                 }
164
165                 header('Content-type: application/json; charset=utf-8');
166                 echo json_encode($nodeinfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
167                 exit;
168         }
169 }