Merge pull request #10450 from annando/discoverable
AP: Support "discoverable"
This commit is contained in:
commit
dfd711d111
|
@ -1,6 +1,6 @@
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
-- Friendica 2021.06-rc (Siberian Iris)
|
-- Friendica 2021.06-rc (Siberian Iris)
|
||||||
-- DB_UPDATE_VERSION 1423
|
-- DB_UPDATE_VERSION 1424
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -340,6 +340,7 @@ CREATE TABLE IF NOT EXISTS `apcontact` (
|
||||||
`outbox` varchar(255) COMMENT '',
|
`outbox` varchar(255) COMMENT '',
|
||||||
`sharedinbox` varchar(255) COMMENT '',
|
`sharedinbox` varchar(255) COMMENT '',
|
||||||
`manually-approve` boolean COMMENT '',
|
`manually-approve` boolean COMMENT '',
|
||||||
|
`discoverable` boolean COMMENT 'Mastodon extension: true if profile is published in their directory',
|
||||||
`nick` varchar(255) NOT NULL DEFAULT '' COMMENT '',
|
`nick` varchar(255) NOT NULL DEFAULT '' COMMENT '',
|
||||||
`name` varchar(255) COMMENT '',
|
`name` varchar(255) COMMENT '',
|
||||||
`about` text COMMENT '',
|
`about` text COMMENT '',
|
||||||
|
|
|
@ -6,33 +6,34 @@ ActivityPub compatible contacts - used in the ActivityPub implementation
|
||||||
Fields
|
Fields
|
||||||
------
|
------
|
||||||
|
|
||||||
| Field | Description | Type | Null | Key | Default | Extra |
|
| Field | Description | Type | Null | Key | Default | Extra |
|
||||||
| ---------------- | ---------------------------- | -------------- | ---- | --- | ------------------- | ----- |
|
| ---------------- | ------------------------------------------------------------------- | -------------- | ---- | --- | ------------------- | ----- |
|
||||||
| url | URL of the contact | varbinary(255) | NO | PRI | NULL | |
|
| url | URL of the contact | varbinary(255) | NO | PRI | NULL | |
|
||||||
| uuid | | varchar(255) | YES | | NULL | |
|
| uuid | | varchar(255) | YES | | NULL | |
|
||||||
| type | | varchar(20) | NO | | NULL | |
|
| type | | varchar(20) | NO | | NULL | |
|
||||||
| following | | varchar(255) | YES | | NULL | |
|
| following | | varchar(255) | YES | | NULL | |
|
||||||
| followers | | varchar(255) | YES | | NULL | |
|
| followers | | varchar(255) | YES | | NULL | |
|
||||||
| inbox | | varchar(255) | NO | | NULL | |
|
| inbox | | varchar(255) | NO | | NULL | |
|
||||||
| outbox | | varchar(255) | YES | | NULL | |
|
| outbox | | varchar(255) | YES | | NULL | |
|
||||||
| sharedinbox | | varchar(255) | YES | | NULL | |
|
| sharedinbox | | varchar(255) | YES | | NULL | |
|
||||||
| manually-approve | | boolean | YES | | NULL | |
|
| manually-approve | | boolean | YES | | NULL | |
|
||||||
| nick | | varchar(255) | NO | | | |
|
| discoverable | Mastodon extension: true if profile is published in their directory | boolean | YES | | NULL | |
|
||||||
| name | | varchar(255) | YES | | NULL | |
|
| nick | | varchar(255) | NO | | | |
|
||||||
| about | | text | YES | | NULL | |
|
| name | | varchar(255) | YES | | NULL | |
|
||||||
| photo | | varchar(255) | YES | | NULL | |
|
| about | | text | YES | | NULL | |
|
||||||
| header | Header picture | varchar(255) | YES | | NULL | |
|
| photo | | varchar(255) | YES | | NULL | |
|
||||||
| addr | | varchar(255) | YES | | NULL | |
|
| header | Header picture | varchar(255) | YES | | NULL | |
|
||||||
| alias | | varchar(255) | YES | | NULL | |
|
| addr | | varchar(255) | YES | | NULL | |
|
||||||
| pubkey | | text | YES | | NULL | |
|
| alias | | varchar(255) | YES | | NULL | |
|
||||||
| subscribe | | varchar(255) | YES | | NULL | |
|
| pubkey | | text | YES | | NULL | |
|
||||||
| baseurl | baseurl of the ap contact | varchar(255) | YES | | NULL | |
|
| subscribe | | varchar(255) | YES | | NULL | |
|
||||||
| gsid | Global Server ID | int unsigned | YES | | NULL | |
|
| baseurl | baseurl of the ap contact | varchar(255) | YES | | NULL | |
|
||||||
| generator | Name of the contact's system | varchar(255) | YES | | NULL | |
|
| gsid | Global Server ID | int unsigned | YES | | NULL | |
|
||||||
| following_count | Number of following contacts | int unsigned | YES | | 0 | |
|
| generator | Name of the contact's system | varchar(255) | YES | | NULL | |
|
||||||
| followers_count | Number of followers | int unsigned | YES | | 0 | |
|
| following_count | Number of following contacts | int unsigned | YES | | 0 | |
|
||||||
| statuses_count | Number of posts | int unsigned | YES | | 0 | |
|
| followers_count | Number of followers | int unsigned | YES | | 0 | |
|
||||||
| updated | | datetime | NO | | 0001-01-01 00:00:00 | |
|
| statuses_count | Number of posts | int unsigned | YES | | 0 | |
|
||||||
|
| updated | | datetime | NO | | 0001-01-01 00:00:00 | |
|
||||||
|
|
||||||
Indexes
|
Indexes
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -284,6 +284,8 @@ class APContact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$apcontact['discoverable'] = JsonLD::fetchElement($compacted, 'toot:discoverable', '@value');
|
||||||
|
|
||||||
// To-Do
|
// To-Do
|
||||||
|
|
||||||
// Unhandled
|
// Unhandled
|
||||||
|
|
|
@ -65,9 +65,11 @@ class ActivityPub
|
||||||
'dfrn' => 'http://purl.org/macgirvin/dfrn/1.0/',
|
'dfrn' => 'http://purl.org/macgirvin/dfrn/1.0/',
|
||||||
'diaspora' => 'https://diasporafoundation.org/ns/',
|
'diaspora' => 'https://diasporafoundation.org/ns/',
|
||||||
'litepub' => 'http://litepub.social/ns#',
|
'litepub' => 'http://litepub.social/ns#',
|
||||||
|
'toot' => 'http://joinmastodon.org/ns#',
|
||||||
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
|
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
|
||||||
'sensitive' => 'as:sensitive', 'Hashtag' => 'as:Hashtag',
|
'sensitive' => 'as:sensitive', 'Hashtag' => 'as:Hashtag',
|
||||||
'directMessage' => 'litepub:directMessage']];
|
'directMessage' => 'litepub:directMessage',
|
||||||
|
'discoverable' => 'toot:discoverable']];
|
||||||
const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application', 'Tombstone'];
|
const ACCOUNT_TYPES = ['Person', 'Organization', 'Service', 'Group', 'Application', 'Tombstone'];
|
||||||
/**
|
/**
|
||||||
* Checks if the web request is done for the AP protocol
|
* Checks if the web request is done for the AP protocol
|
||||||
|
@ -166,6 +168,10 @@ class ActivityPub
|
||||||
$profile['baseurl'] = $apcontact['baseurl'];
|
$profile['baseurl'] = $apcontact['baseurl'];
|
||||||
$profile['gsid'] = $apcontact['gsid'];
|
$profile['gsid'] = $apcontact['gsid'];
|
||||||
|
|
||||||
|
if (!is_null($apcontact['discoverable'])) {
|
||||||
|
$profile['hide'] = !$apcontact['discoverable'];
|
||||||
|
}
|
||||||
|
|
||||||
// Remove all "null" fields
|
// Remove all "null" fields
|
||||||
foreach ($profile as $field => $content) {
|
foreach ($profile as $field => $content) {
|
||||||
if (is_null($content)) {
|
if (is_null($content)) {
|
||||||
|
|
|
@ -325,7 +325,7 @@ class Transmitter
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields = ['locality', 'region', 'country-name'];
|
$fields = ['locality', 'region', 'country-name', 'net-publish'];
|
||||||
$profile = DBA::selectFirst('profile', $fields, ['uid' => $uid]);
|
$profile = DBA::selectFirst('profile', $fields, ['uid' => $uid]);
|
||||||
if (!DBA::isResult($profile)) {
|
if (!DBA::isResult($profile)) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -340,7 +340,7 @@ class Transmitter
|
||||||
$contact = User::getSystemAccount();
|
$contact = User::getSystemAccount();
|
||||||
$user = ['guid' => '', 'nickname' => $contact['nick'], 'pubkey' => $contact['pubkey'],
|
$user = ['guid' => '', 'nickname' => $contact['nick'], 'pubkey' => $contact['pubkey'],
|
||||||
'account-type' => $contact['contact-type'], 'page-flags' => User::PAGE_FLAGS_NORMAL];
|
'account-type' => $contact['contact-type'], 'page-flags' => User::PAGE_FLAGS_NORMAL];
|
||||||
$profile = ['locality' => '', 'region' => '', 'country-name' => ''];
|
$profile = ['locality' => '', 'region' => '', 'country-name' => '', 'net-publish' => false];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = ['@context' => ActivityPub::CONTEXT];
|
$data = ['@context' => ActivityPub::CONTEXT];
|
||||||
|
@ -375,6 +375,7 @@ class Transmitter
|
||||||
|
|
||||||
$data['url'] = $contact['url'];
|
$data['url'] = $contact['url'];
|
||||||
$data['manuallyApprovesFollowers'] = in_array($user['page-flags'], [User::PAGE_FLAGS_NORMAL, User::PAGE_FLAGS_PRVGROUP]);
|
$data['manuallyApprovesFollowers'] = in_array($user['page-flags'], [User::PAGE_FLAGS_NORMAL, User::PAGE_FLAGS_PRVGROUP]);
|
||||||
|
$data['discoverable'] = $profile['net-publish'];
|
||||||
$data['publicKey'] = ['id' => $contact['url'] . '#main-key',
|
$data['publicKey'] = ['id' => $contact['url'] . '#main-key',
|
||||||
'owner' => $contact['url'],
|
'owner' => $contact['url'],
|
||||||
'publicKeyPem' => $user['pubkey']];
|
'publicKeyPem' => $user['pubkey']];
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
if (!defined('DB_UPDATE_VERSION')) {
|
if (!defined('DB_UPDATE_VERSION')) {
|
||||||
define('DB_UPDATE_VERSION', 1423);
|
define('DB_UPDATE_VERSION', 1424);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -401,6 +401,7 @@ return [
|
||||||
"outbox" => ["type" => "varchar(255)", "comment" => ""],
|
"outbox" => ["type" => "varchar(255)", "comment" => ""],
|
||||||
"sharedinbox" => ["type" => "varchar(255)", "comment" => ""],
|
"sharedinbox" => ["type" => "varchar(255)", "comment" => ""],
|
||||||
"manually-approve" => ["type" => "boolean", "comment" => ""],
|
"manually-approve" => ["type" => "boolean", "comment" => ""],
|
||||||
|
"discoverable" => ["type" => "boolean", "comment" => "Mastodon extension: true if profile is published in their directory"],
|
||||||
"nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
|
"nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
|
||||||
"name" => ["type" => "varchar(255)", "comment" => ""],
|
"name" => ["type" => "varchar(255)", "comment" => ""],
|
||||||
"about" => ["type" => "text", "comment" => ""],
|
"about" => ["type" => "text", "comment" => ""],
|
||||||
|
|
Loading…
Reference in a new issue