mirror of
https://github.com/friendica/friendica
synced 2025-04-24 07:10:11 +00:00
We now fetch data with an automatically generated system user
This commit is contained in:
parent
2475058cc4
commit
7dbf72e454
9 changed files with 244 additions and 72 deletions
|
@ -29,6 +29,7 @@ use Friendica\Core\Worker;
|
|||
use Friendica\Database\DBA;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model\Contact;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Module\BaseAdmin;
|
||||
use Friendica\Module\Register;
|
||||
use Friendica\Util\BasePath;
|
||||
|
@ -148,6 +149,7 @@ class Site extends BaseAdmin
|
|||
$allowed_sites = (!empty($_POST['allowed_sites']) ? Strings::escapeTags(trim($_POST['allowed_sites'])) : '');
|
||||
$allowed_email = (!empty($_POST['allowed_email']) ? Strings::escapeTags(trim($_POST['allowed_email'])) : '');
|
||||
$forbidden_nicknames = (!empty($_POST['forbidden_nicknames']) ? strtolower(Strings::escapeTags(trim($_POST['forbidden_nicknames']))) : '');
|
||||
$system_actor_name = (!empty($_POST['system_actor_name']) ? Strings::escapeTags(trim($_POST['system_actor_name'])) : '');
|
||||
$no_oembed_rich_content = !empty($_POST['no_oembed_rich_content']);
|
||||
$allowed_oembed = (!empty($_POST['allowed_oembed']) ? Strings::escapeTags(trim($_POST['allowed_oembed'])) : '');
|
||||
$block_public = !empty($_POST['block_public']);
|
||||
|
@ -355,6 +357,7 @@ class Site extends BaseAdmin
|
|||
DI::config()->set('system', 'allowed_sites' , $allowed_sites);
|
||||
DI::config()->set('system', 'allowed_email' , $allowed_email);
|
||||
DI::config()->set('system', 'forbidden_nicknames' , $forbidden_nicknames);
|
||||
DI::config()->set('system', 'system_actor_name' , $system_actor_name);
|
||||
DI::config()->set('system', 'no_oembed_rich_content' , $no_oembed_rich_content);
|
||||
DI::config()->set('system', 'allowed_oembed' , $allowed_oembed);
|
||||
DI::config()->set('system', 'block_public' , $block_public);
|
||||
|
@ -510,6 +513,11 @@ class Site extends BaseAdmin
|
|||
get_temppath();
|
||||
get_itemcachepath();
|
||||
|
||||
$system_actor_name = DI::config()->get('system', 'actor_name');
|
||||
if (empty($system_actor_name)) {
|
||||
$system_actor_name = User::getActorName();
|
||||
}
|
||||
|
||||
/* Register policy */
|
||||
$register_choices = [
|
||||
Register::CLOSED => DI::l10n()->t('Closed'),
|
||||
|
@ -600,6 +608,7 @@ class Site extends BaseAdmin
|
|||
// name, label, value, help string, extra data...
|
||||
'$sitename' => ['sitename', DI::l10n()->t('Site name'), DI::config()->get('config', 'sitename'), ''],
|
||||
'$sender_email' => ['sender_email', DI::l10n()->t('Sender Email'), DI::config()->get('config', 'sender_email'), DI::l10n()->t('The email address your server shall use to send notification emails from.'), '', '', 'email'],
|
||||
'$system_actor_name' => ['system_actor_name', DI::l10n()->t('Name of the system actor'), $system_actor_name, DI::l10n()->t("Name of the internal system account that is used to perform ActivityPub requests. This must be an unused username. If set, this shouldn't be changed again.")],
|
||||
'$banner' => ['banner', DI::l10n()->t('Banner/Logo'), $banner, ''],
|
||||
'$email_banner' => ['email_banner', DI::l10n()->t('Email Banner/Logo'), $email_banner, ''],
|
||||
'$shortcut_icon' => ['shortcut_icon', DI::l10n()->t('Shortcut icon'), DI::config()->get('system', 'shortcut_icon'), DI::l10n()->t('Link to an icon that will be used for browsers.')],
|
||||
|
|
|
@ -25,8 +25,10 @@ use Friendica\BaseModule;
|
|||
use Friendica\Core\Addon;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Protocol\ActivityPub;
|
||||
|
||||
/**
|
||||
* Prints information about the current node
|
||||
|
@ -108,6 +110,15 @@ class Friendica extends BaseModule
|
|||
|
||||
public static function rawContent(array $parameters = [])
|
||||
{
|
||||
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');
|
||||
}
|
||||
}
|
||||
|
||||
$app = DI::app();
|
||||
|
||||
// @TODO: Replace with parameter from router
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace Friendica\Module;
|
|||
use Friendica\BaseModule;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model\Photo;
|
||||
|
@ -77,24 +78,30 @@ class Xrd extends BaseModule
|
|||
$name = substr($local, 0, strpos($local, '@'));
|
||||
}
|
||||
|
||||
$user = User::getByNickname($name);
|
||||
if ($name == DI::config()->get('system', 'actor_name')) {
|
||||
$owner = User::getSystemAccount();
|
||||
if (empty($owner)) {
|
||||
throw new \Friendica\Network\HTTPException\NotFoundException();
|
||||
}
|
||||
self::printSystemJSON($owner);
|
||||
} else {
|
||||
$user = User::getByNickname($name);
|
||||
if (empty($user)) {
|
||||
throw new \Friendica\Network\HTTPException\NotFoundException();
|
||||
}
|
||||
|
||||
if (empty($user)) {
|
||||
throw new \Friendica\Network\HTTPException\NotFoundException();
|
||||
$owner = User::getOwnerDataById($user['uid']);
|
||||
if (empty($owner)) {
|
||||
DI::logger()->warning('No owner data for user id', ['uri' => $uri, 'name' => $name, 'user' => $user]);
|
||||
throw new \Friendica\Network\HTTPException\NotFoundException();
|
||||
}
|
||||
|
||||
$alias = str_replace('/profile/', '/~', $owner['url']);
|
||||
|
||||
$avatar = Photo::selectFirst(['type'], ['uid' => $owner['uid'], 'profile' => true]);
|
||||
}
|
||||
|
||||
$owner = User::getOwnerDataById($user['uid']);
|
||||
|
||||
if (empty($owner)) {
|
||||
DI::logger()->warning('No owner data for user id', ['uri' => $uri, 'name' => $name, 'user' => $user]);
|
||||
throw new \Friendica\Network\HTTPException\NotFoundException();
|
||||
}
|
||||
|
||||
$alias = str_replace('/profile/', '/~', $owner['url']);
|
||||
|
||||
$avatar = Photo::selectFirst(['type'], ['uid' => $owner['uid'], 'profile' => true]);
|
||||
|
||||
if (!DBA::isResult($avatar)) {
|
||||
if (empty($avatar)) {
|
||||
$avatar = ['type' => 'image/jpeg'];
|
||||
}
|
||||
|
||||
|
@ -105,6 +112,32 @@ class Xrd extends BaseModule
|
|||
}
|
||||
}
|
||||
|
||||
private static function printSystemJSON(array $owner)
|
||||
{
|
||||
$json = [
|
||||
'subject' => 'acct:' . $owner['addr'],
|
||||
'aliases' => [$owner['url']],
|
||||
'links' => [
|
||||
[
|
||||
'rel' => 'http://webfinger.net/rel/profile-page',
|
||||
'type' => 'text/html',
|
||||
'href' => $owner['url'],
|
||||
],
|
||||
[
|
||||
'rel' => 'self',
|
||||
'type' => 'application/activity+json',
|
||||
'href' => $owner['url'],
|
||||
],
|
||||
[
|
||||
'rel' => 'http://ostatus.org/schema/1.0/subscribe',
|
||||
'template' => DI::baseUrl()->get() . '/follow?url={uri}',
|
||||
],
|
||||
]
|
||||
];
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
System::jsonExit($json, 'application/jrd+json; charset=utf-8');
|
||||
}
|
||||
|
||||
private static function printJSON($alias, $baseURL, $owner, $avatar)
|
||||
{
|
||||
$salmon_key = Salmon::salmonKey($owner['spubkey']);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue