summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Db/FollowsRequest.php25
-rw-r--r--lib/Exceptions/ActivityCantBeVerifiedException.php8
-rw-r--r--lib/Model/ActivityPub/ACore.php26
-rw-r--r--lib/Service/ActivityPub/FollowService.php27
4 files changed, 59 insertions, 27 deletions
diff --git a/lib/Db/FollowsRequest.php b/lib/Db/FollowsRequest.php
index 66058064..c5e2e8f1 100644
--- a/lib/Db/FollowsRequest.php
+++ b/lib/Db/FollowsRequest.php
@@ -33,7 +33,6 @@ namespace OCA\Social\Db;
use OCA\Social\Exceptions\FollowDoesNotExistException;
use OCA\Social\Model\ActivityPub\Follow;
-use OCA\Social\Model\ActivityPub\Person;
/**
@@ -74,22 +73,22 @@ class FollowsRequest extends FollowsRequestBuilder {
/**
- * @param Person $actor
- * @param Person $remote
+ * @param string $actorId
+ * @param string $remoteActorId
*
* @return Follow
* @throws FollowDoesNotExistException
*/
- public function getByPersons(Person $actor, Person $remote) {
+ public function getByPersons(string $actorId, string $remoteActorId) {
$qb = $this->getFollowsSelectSql();
- $this->limitToActorId($qb, $actor->getId());
- $this->limitToObjectId($qb, $remote->getId());
+ $this->limitToActorId($qb, $actorId);
+ $this->limitToObjectId($qb, $remoteActorId);
$cursor = $qb->execute();
$data = $cursor->fetch();
$cursor->closeCursor();
-
if ($data === false) {
+ $this->miscService->log('does not exisst ?');
throw new FollowDoesNotExistException();
}
@@ -108,5 +107,17 @@ class FollowsRequest extends FollowsRequestBuilder {
}
+ /**
+ * @param Follow $follow
+ */
+ public function deleteByPersons(Follow $follow) {
+ $qb = $this->getFollowsDeleteSql();
+ $this->limitToActorId($qb, $follow->getActorId());
+ $this->limitToObjectId($qb, $follow->getObjectId());
+
+ $qb->execute();
+ }
+
+
}
diff --git a/lib/Exceptions/ActivityCantBeVerifiedException.php b/lib/Exceptions/ActivityCantBeVerifiedException.php
new file mode 100644
index 00000000..9fe5f222
--- /dev/null
+++ b/lib/Exceptions/ActivityCantBeVerifiedException.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace OCA\Social\Exceptions;
+
+class ActivityCantBeVerifiedException extends \Exception {
+
+}
+
diff --git a/lib/Model/ActivityPub/ACore.php b/lib/Model/ActivityPub/ACore.php
index 9fc4ee80..64f59360 100644
--- a/lib/Model/ActivityPub/ACore.php
+++ b/lib/Model/ActivityPub/ACore.php
@@ -32,6 +32,7 @@ namespace OCA\Social\Model\ActivityPub;
use daita\MySmallPhpTools\Traits\TArrayTools;
use JsonSerializable;
+use OCA\Social\Exceptions\ActivityCantBeVerifiedException;
use OCA\Social\Model\InstancePath;
use OCA\Social\Service\ICoreService;
@@ -184,20 +185,23 @@ abstract class ACore implements JsonSerializable {
/**
* @param string $url
*
- * @return bool
+ * @throws ActivityCantBeVerifiedException
*/
- public function verify(string $url): bool {
- if (parse_url($this->getId(), PHP_URL_HOST) !==
- parse_url($url, PHP_URL_HOST))
- return false;
+ public function verify(string $url) {
+ $url1 = parse_url($this->getId());
+ $url2 = parse_url($url);
- \OC::$server->getLogger()->log(2, '#### ' . json_encode(parse_url($this->getId(), PHP_URL_PORT)));
-// if (parse_url($this->getId(), PHP_URL_PORT) !==
-// parse_url($url, PHP_URL_HOST))
-// return false;
-//
+ if ($this->get('host', $url1, '1') !== $this->get('host', $url2, '2')) {
+ throw new ActivityCantBeVerifiedException('activity cannot be verified');
+ }
- return true;
+ if ($this->get('scheme', $url1, '1') !== $this->get('scheme', $url2, '2')) {
+ throw new ActivityCantBeVerifiedException('activity cannot be verified');
+ }
+
+ if ($this->getInt('port', $url1, 1) !== $this->getInt('port', $url2, 1)) {
+ throw new ActivityCantBeVerifiedException('activity cannot be verified');
+ }
}
diff --git a/lib/Service/ActivityPub/FollowService.php b/lib/Service/ActivityPub/FollowService.php
index 347e9104..facfef67 100644
--- a/lib/Service/ActivityPub/FollowService.php
+++ b/lib/Service/ActivityPub/FollowService.php
@@ -106,8 +106,9 @@ class FollowService implements ICoreService {
$follow->setObjectId($remoteActor->getId());
try {
- $this->followsRequest->getByPersons($actor, $remoteActor);
+ $this->followsRequest->getByPersons($actor->getId(), $remoteActor->getId());
} catch (FollowDoesNotExistException $e) {
+ $this->miscService->log('CREATE NEW ONE !');
$this->followsRequest->save($follow);
$follow->addInstancePath(new InstancePath($remoteActor->getInbox()));
@@ -126,7 +127,7 @@ class FollowService implements ICoreService {
$remoteActor = $this->personService->getFromAccount($account);
try {
- $follow = $this->followsRequest->getByPersons($actor, $remoteActor);
+ $follow = $this->followsRequest->getByPersons($actor->getId(), $remoteActor->getId());
$this->followsRequest->delete($follow);
} catch (FollowDoesNotExistException $e) {
}
@@ -182,23 +183,31 @@ class FollowService implements ICoreService {
/** @var Follow $follow */
if ($follow->isRoot()) {
- $this->followsRequest->save($follow);
- $this->confirmFollowRequest($follow);
+ $follow->verify($follow->getActorId());
+ try {
+ $this->followsRequest->getByPersons($follow->getActorId(), $follow->getObjectId());
+ } catch (FollowDoesNotExistException $e) {
+ $this->followsRequest->save($follow);
+ $this->confirmFollowRequest($follow);
+ }
} else {
$parent = $follow->getParent();
if ($parent->isRoot() === false) {
return;
}
- if ($parent->getType() === Undo::TYPE && $parent->verify($follow->getActorId())) {
- $this->followsRequest->delete($follow);
+ if ($parent->getType() === Undo::TYPE) {
+ $parent->verify($follow->getActorId());
+ $this->followsRequest->deleteByPersons($follow);
}
- if ($parent->getType() === Reject::TYPE && $parent->verify($follow->getObjectId())) {
- $this->followsRequest->delete($follow);
+ if ($parent->getType() === Reject::TYPE) {
+ $parent->verify($follow->getObjectId());
+ $this->followsRequest->deleteByPersons($follow);
}
- if ($parent->getType() === Accept::TYPE && $parent->verify($follow->getObjectId())) {
+ if ($parent->getType() === Accept::TYPE) {
+ $parent->verify($follow->getObjectId());
$this->followsRequest->accepted($follow);
}
ref='#n613'>613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702