2 namespace Friendica\Module;
5 use Friendica\BaseModule;
6 use Friendica\Core\L10n;
7 use Friendica\Core\Logger;
8 use Friendica\Core\Protocol;
9 use Friendica\Database\DBA;
10 use Friendica\Model\Contact;
11 use Friendica\Model\User;
12 use Friendica\Protocol\Diaspora;
13 use Friendica\Protocol\ActivityPub;
14 use Friendica\Util\DateTimeFormat;
17 * Process follow request confirmations
19 class FollowConfirm extends BaseModule
21 public static function post()
27 notice(L10n::t('Permission denied.') . EOL);
31 $intro_id = intval($_POST['intro_id'] ?? 0);
32 $duplex = intval($_POST['duplex'] ?? 0);
33 $cid = intval($_POST['contact_id'] ?? 0);
34 $hidden = intval($_POST['hidden'] ?? 0);
37 notice(L10n::t('No given contact.') . EOL);
41 Logger::info('Confirming follower', ['cid' => $cid]);
43 $contact = DBA::selectFirst('contact', [], ['id' => $cid, 'uid' => $uid]);
44 if (!DBA::isResult($contact)) {
45 Logger::warning('Contact not found in DB.', ['cid' => $cid]);
46 notice(L10n::t('Contact not found.') . EOL);
50 $relation = $contact['rel'];
51 $new_relation = $contact['rel'];
52 $writable = $contact['writable'];
54 if (!empty($contact['protocol'])) {
55 $protocol = $contact['protocol'];
57 $protocol = $contact['network'];
60 if ($protocol == Protocol::ACTIVITYPUB) {
61 ActivityPub\Transmitter::sendContactAccept($contact['url'], $contact['hub-verify'], $uid);
64 if (in_array($protocol, [Protocol::DIASPORA, Protocol::ACTIVITYPUB])) {
66 $new_relation = Contact::FRIEND;
68 $new_relation = Contact::FOLLOWER;
71 if ($new_relation != Contact::FOLLOWER) {
76 $fields = ['name-date' => DateTimeFormat::utcNow(),
77 'uri-date' => DateTimeFormat::utcNow(),
78 'blocked' => false, 'pending' => false, 'protocol' => $protocol,
79 'writable' => $writable, 'hidden' => $hidden, 'rel' => $new_relation];
80 DBA::update('contact', $fields, ['id' => $cid]);
82 if ($new_relation == Contact::FRIEND) {
83 if ($protocol == Protocol::DIASPORA) {
84 $user = User::getById($uid);
85 $contact = Contact::getById($cid);
86 $ret = Diaspora::sendShare($user, $contact);
87 Logger::info('share returns', ['return' => $ret]);
88 } elseif ($protocol == Protocol::ACTIVITYPUB) {
89 ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid);
93 DBA::delete('intro', ['id' => $intro_id]);
95 $a->internalRedirect('contact/' . intval($cid));