2019-05-04 08:05:21 +00:00
< ? php
2020-02-09 14:45:36 +00:00
/**
* @ copyright Copyright ( C ) 2020 , Friendica
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
*/
2019-05-04 08:05:21 +00:00
namespace Friendica\Module ;
use Friendica\BaseModule ;
use Friendica\Core\Addon ;
use Friendica\Core\Hook ;
use Friendica\Core\Renderer ;
2020-08-22 14:48:09 +00:00
use Friendica\Core\System ;
2020-10-04 20:46:42 +00:00
use Friendica\Database\PostUpdate ;
2019-12-15 21:34:11 +00:00
use Friendica\DI ;
2019-05-04 08:05:21 +00:00
use Friendica\Model\User ;
2020-08-22 14:48:09 +00:00
use Friendica\Protocol\ActivityPub ;
2019-05-04 08:05:21 +00:00
2019-05-04 08:18:41 +00:00
/**
* Prints information about the current node
* Either in human readable form or in JSON
*/
2019-05-04 08:05:21 +00:00
class Friendica extends BaseModule
{
2019-11-05 21:48:54 +00:00
public static function content ( array $parameters = [])
2019-05-04 08:05:21 +00:00
{
2019-12-15 22:44:33 +00:00
$config = DI :: config ();
2019-05-04 08:05:21 +00:00
$visibleAddonList = Addon :: getVisibleList ();
if ( ! empty ( $visibleAddonList )) {
$sorted = $visibleAddonList ;
sort ( $sorted );
$sortedAddonList = '' ;
foreach ( $sorted as $addon ) {
if ( strlen ( $addon )) {
if ( strlen ( $sortedAddonList )) {
$sortedAddonList .= ', ' ;
}
$sortedAddonList .= $addon ;
}
}
$addon = [
2020-01-18 19:52:34 +00:00
'title' => DI :: l10n () -> t ( 'Installed addons/apps:' ),
2019-05-04 08:05:21 +00:00
'list' => $sortedAddonList ,
];
} else {
$addon = [
2020-01-18 19:52:34 +00:00
'title' => DI :: l10n () -> t ( 'No installed addons/apps' ),
2019-05-04 08:05:21 +00:00
];
}
$tos = ( $config -> get ( 'system' , 'tosdisplay' )) ?
2020-01-18 19:52:34 +00:00
DI :: l10n () -> t ( 'Read about the <a href="%1$s/tos">Terms of Service</a> of this node.' , DI :: baseUrl () -> get ()) :
2019-05-04 08:05:21 +00:00
'' ;
$blockList = $config -> get ( 'system' , 'blocklist' );
if ( ! empty ( $blockList )) {
$blocked = [
2020-01-18 19:52:34 +00:00
'title' => DI :: l10n () -> t ( 'On this server the following remote servers are blocked.' ),
2019-05-04 08:05:21 +00:00
'header' => [
2020-01-18 19:52:34 +00:00
DI :: l10n () -> t ( 'Blocked domain' ),
DI :: l10n () -> t ( 'Reason for the block' ),
2019-05-04 08:05:21 +00:00
],
'list' => $blockList ,
];
} else {
$blocked = null ;
}
$hooked = '' ;
Hook :: callAll ( 'about_hook' , $hooked );
$tpl = Renderer :: getMarkupTemplate ( 'friendica.tpl' );
return Renderer :: replaceMacros ( $tpl , [
2020-01-18 19:52:34 +00:00
'about' => DI :: l10n () -> t ( 'This is Friendica, version %s that is running at the web location %s. The database version is %s, the post update version is %s.' ,
2019-05-04 08:05:21 +00:00
'<strong>' . FRIENDICA_VERSION . '</strong>' ,
2019-12-16 00:05:15 +00:00
DI :: baseUrl () -> get (),
2020-09-13 15:57:24 +00:00
'<strong>' . DB_UPDATE_VERSION . '/' . $config -> get ( 'system' , 'build' ) . '</strong>' ,
2020-10-04 20:46:42 +00:00
'<strong>' . PostUpdate :: VERSION . '/' . $config -> get ( 'system' , 'post_update_version' ) . '</strong>' ),
2020-01-18 19:52:34 +00:00
'friendica' => DI :: l10n () -> t ( 'Please visit <a href="https://friendi.ca">Friendi.ca</a> to learn more about the Friendica project.' ),
'bugs' => DI :: l10n () -> t ( 'Bug reports and issues: please visit' ) . ' ' . '<a href="https://github.com/friendica/friendica/issues?state=open">' . DI :: l10n () -> t ( 'the bugtracker at github' ) . '</a>' ,
'info' => DI :: l10n () -> t ( 'Suggestions, praise, etc. - please email "info" at "friendi - dot - ca' ),
2019-05-04 08:05:21 +00:00
'visible_addons' => $addon ,
'tos' => $tos ,
'block_list' => $blocked ,
'hooked' => $hooked ,
]);
}
2019-11-05 21:48:54 +00:00
public static function rawContent ( array $parameters = [])
2019-05-04 08:05:21 +00:00
{
2020-08-22 14:48:09 +00:00
if ( ActivityPub :: isRequest ()) {
$data = ActivityPub\Transmitter :: getProfile ( 0 );
if ( ! empty ( $data )) {
header ( 'Access-Control-Allow-Origin: *' );
header ( 'Cache-Control: max-age=23200, stale-while-revalidate=23200' );
System :: jsonExit ( $data , 'application/activity+json' );
}
}
2019-12-15 21:34:11 +00:00
$app = DI :: app ();
2019-05-04 08:05:21 +00:00
// @TODO: Replace with parameter from router
if ( $app -> argc <= 1 || ( $app -> argv [ 1 ] !== 'json' )) {
return ;
}
2019-12-15 22:44:33 +00:00
$config = DI :: config ();
2019-05-04 08:05:21 +00:00
$register_policies = [
Register :: CLOSED => 'REGISTER_CLOSED' ,
Register :: APPROVE => 'REGISTER_APPROVE' ,
Register :: OPEN => 'REGISTER_OPEN'
];
$register_policy_int = intval ( $config -> get ( 'config' , 'register_policy' ));
if ( $register_policy_int !== Register :: CLOSED && $config -> get ( 'config' , 'invitation_only' )) {
$register_policy = 'REGISTER_INVITATION' ;
} else {
$register_policy = $register_policies [ $register_policy_int ];
}
2020-07-29 05:12:16 +00:00
$admin = [];
$administrator = User :: getFirstAdmin ([ 'username' , 'nickname' ]);
if ( ! empty ( $administrator )) {
$admin = [
'name' => $administrator [ 'username' ],
'profile' => DI :: baseUrl () -> get () . '/profile/' . $administrator [ 'nickname' ],
];
2019-05-04 08:05:21 +00:00
}
$visible_addons = Addon :: getVisibleList ();
$config -> load ( 'feature_lock' );
$locked_features = [];
$featureLocks = $config -> get ( 'config' , 'feature_lock' );
if ( isset ( $featureLocks )) {
foreach ( $featureLocks as $feature => $lock ) {
if ( $feature === 'config_loaded' ) {
continue ;
}
$locked_features [ $feature ] = intval ( $lock );
}
}
$data = [
'version' => FRIENDICA_VERSION ,
2019-12-16 00:05:15 +00:00
'url' => DI :: baseUrl () -> get (),
2019-05-04 08:05:21 +00:00
'addons' => $visible_addons ,
'locked_features' => $locked_features ,
'explicit_content' => intval ( $config -> get ( 'system' , 'explicit_content' , 0 )),
'language' => $config -> get ( 'system' , 'language' ),
'register_policy' => $register_policy ,
'admin' => $admin ,
'site_name' => $config -> get ( 'config' , 'sitename' ),
2020-01-12 21:13:16 +00:00
'platform' => strtolower ( FRIENDICA_PLATFORM ),
2019-05-04 08:05:21 +00:00
'info' => $config -> get ( 'config' , 'info' ),
2019-12-16 00:05:15 +00:00
'no_scrape_url' => DI :: baseUrl () -> get () . '/noscrape' ,
2019-05-04 08:05:21 +00:00
];
header ( 'Content-type: application/json; charset=utf-8' );
echo json_encode ( $data );
exit ();
}
}