From 8ece6e064df396db08b678f42483987e917f63b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 15 Jul 2021 09:19:38 +0200 Subject: Replace any string value with a nullable network for the fallback to match the first social service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Cron/SocialUpdate.php | 2 +- lib/Service/SocialApiService.php | 4 ++-- tests/unit/Service/SocialApiServiceTest.php | 20 +++++++++++++++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/Cron/SocialUpdate.php b/lib/Cron/SocialUpdate.php index fcb41a5c..9f8ee9ba 100644 --- a/lib/Cron/SocialUpdate.php +++ b/lib/Cron/SocialUpdate.php @@ -46,7 +46,7 @@ class SocialUpdate extends \OC\BackgroundJob\QueuedJob { $offsetContact = $arguments['offsetContact'] ?? null; // update contacts with first available social media profile - $result = $this->social->updateAddressbooks('any', $userId, $offsetBook, $offsetContact); + $result = $this->social->updateAddressbooks($userId, $offsetBook, $offsetContact); if ($result->getStatus() === Http::STATUS_PARTIAL_CONTENT) { // not finished; schedule a follow-up diff --git a/lib/Service/SocialApiService.php b/lib/Service/SocialApiService.php index 5184d72c..129068c5 100644 --- a/lib/Service/SocialApiService.php +++ b/lib/Service/SocialApiService.php @@ -342,12 +342,12 @@ class SocialApiService { /** * Updates social profile data for all contacts of an addressbook * - * @param {String} network the social network to use (fallback: take first match) + * @param {String|null} network the social network to use (take first match if unset) * @param {String} userId the address book owner * * @returns {JSONResponse} JSONResponse with the list of changed and failed contacts */ - public function updateAddressbooks(string $network, string $userId, string $offsetBook = null, string $offsetContact = null) : JSONResponse { + public function updateAddressbooks(string $userId, string $offsetBook = null, string $offsetContact = null, string $network = null) : JSONResponse { // double check! $syncAllowedByAdmin = $this->config->getAppValue($this->appName, 'allowSocialSync', 'yes'); diff --git a/tests/unit/Service/SocialApiServiceTest.php b/tests/unit/Service/SocialApiServiceTest.php index 9c2ab925..675f81f6 100644 --- a/tests/unit/Service/SocialApiServiceTest.php +++ b/tests/unit/Service/SocialApiServiceTest.php @@ -237,7 +237,7 @@ class SocialApiServiceTest extends TestCase { 'VERSION' => $contact['VERSION'], 'PHOTO;ENCODING=b;TYPE=' . $imageType . ';VALUE=BINARY' => base64_encode($body) ]; - + $this->socialProvider ->expects($this->once())->method("getSocialConnector")->with($network); $provider->expects($this->once())->method("supportsContact")->with($contact); @@ -306,7 +306,7 @@ class SocialApiServiceTest extends TestCase { 'VERSION' => $contact['VERSION'], 'PHOTO' => "data:".$imageType.";base64," . base64_encode($body) ]; - + $this->socialProvider ->expects($this->once())->method("getSocialConnector")->with($network); $provider->expects($this->once())->method("supportsContact")->with($contact); @@ -442,7 +442,17 @@ class SocialApiServiceTest extends TestCase { $this->setupAddressbooks(); - $result = $this->service->updateAddressbooks('any', 'mrstest'); + if ($syncAllowedByAdmin === 'yes' && $bgSyncEnabledByUser === 'yes') { + $this->socialProvider + ->expects($this->atLeastOnce()) + ->method('getSocialConnectors'); + } + + $this->socialProvider + ->expects($this->never()) + ->method('getSocialConnector'); + + $result = $this->service->updateAddressbooks('mrstest'); $this->assertEquals($expected, $result->getStatus()); @@ -474,7 +484,7 @@ class SocialApiServiceTest extends TestCase { $this->setupAddressbooks(); - $result = $this->service->updateAddressbooks('any', 'msstest'); + $result = $this->service->updateAddressbooks('msstest'); $this->assertEquals(Http::STATUS_PARTIAL_CONTENT, $result->getStatus()); @@ -502,7 +512,7 @@ class SocialApiServiceTest extends TestCase { $this->setupAddressbooks(); - $result = $this->service->updateAddressbooks('any', 'mrstest', 'contacts2', '22222222-2222-2222-2222-222222222222'); + $result = $this->service->updateAddressbooks('mrstest', 'contacts2', '22222222-2222-2222-2222-222222222222'); $this->assertEquals($expected, $result->getStatus()); -- cgit v1.2.3 From 9641980d28fecc0ec82830a2c2523cc7eb50cb52 Mon Sep 17 00:00:00 2001 From: call-me-matt Date: Thu, 15 Jul 2021 22:57:03 +0200 Subject: pre-check for social profile data Signed-off-by: call-me-matt --- lib/Service/Social/DiasporaProvider.php | 3 +++ lib/Service/Social/FacebookProvider.php | 3 +++ lib/Service/Social/GravatarProvider.php | 3 +++ lib/Service/Social/InstagramProvider.php | 3 +++ lib/Service/Social/MastodonProvider.php | 3 +++ lib/Service/Social/TumblrProvider.php | 3 +++ lib/Service/Social/TwitterProvider.php | 3 +++ lib/Service/Social/XingProvider.php | 3 +++ 8 files changed, 24 insertions(+) diff --git a/lib/Service/Social/DiasporaProvider.php b/lib/Service/Social/DiasporaProvider.php index c0af278f..67a194e0 100644 --- a/lib/Service/Social/DiasporaProvider.php +++ b/lib/Service/Social/DiasporaProvider.php @@ -49,6 +49,9 @@ class DiasporaProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfileIds($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } diff --git a/lib/Service/Social/FacebookProvider.php b/lib/Service/Social/FacebookProvider.php index e5d34397..c9035f56 100644 --- a/lib/Service/Social/FacebookProvider.php +++ b/lib/Service/Social/FacebookProvider.php @@ -45,6 +45,9 @@ class FacebookProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfiles($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } diff --git a/lib/Service/Social/GravatarProvider.php b/lib/Service/Social/GravatarProvider.php index 4b9d9a84..1fd81dc3 100644 --- a/lib/Service/Social/GravatarProvider.php +++ b/lib/Service/Social/GravatarProvider.php @@ -38,6 +38,9 @@ class GravatarProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("EMAIL",$contact)) { + return false; + } $emails = $contact['EMAIL']; return isset($emails) && count($emails); } diff --git a/lib/Service/Social/InstagramProvider.php b/lib/Service/Social/InstagramProvider.php index a930aaa7..68ca0cc2 100644 --- a/lib/Service/Social/InstagramProvider.php +++ b/lib/Service/Social/InstagramProvider.php @@ -55,6 +55,9 @@ class InstagramProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfiles($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } diff --git a/lib/Service/Social/MastodonProvider.php b/lib/Service/Social/MastodonProvider.php index a212433c..ed8ff1a1 100644 --- a/lib/Service/Social/MastodonProvider.php +++ b/lib/Service/Social/MastodonProvider.php @@ -45,6 +45,9 @@ class MastodonProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $profiles = $this->getProfileIds($contact); return isset($profiles) && count($profiles) > 0; } diff --git a/lib/Service/Social/TumblrProvider.php b/lib/Service/Social/TumblrProvider.php index cd3d577f..b4bb71e7 100644 --- a/lib/Service/Social/TumblrProvider.php +++ b/lib/Service/Social/TumblrProvider.php @@ -38,6 +38,9 @@ class TumblrProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfileIds($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } diff --git a/lib/Service/Social/TwitterProvider.php b/lib/Service/Social/TwitterProvider.php index fc566aca..ad2402ba 100644 --- a/lib/Service/Social/TwitterProvider.php +++ b/lib/Service/Social/TwitterProvider.php @@ -54,6 +54,9 @@ class TwitterProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfileIds($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } diff --git a/lib/Service/Social/XingProvider.php b/lib/Service/Social/XingProvider.php index a752d3c6..8ebe23a0 100644 --- a/lib/Service/Social/XingProvider.php +++ b/lib/Service/Social/XingProvider.php @@ -45,6 +45,9 @@ class XingProvider implements ISocialProvider { * @return bool */ public function supportsContact(array $contact):bool { + if (!array_key_exists("X-SOCIALPROFILE",$contact)) { + return false; + } $socialprofiles = $this->getProfileIds($contact); return isset($socialprofiles) && count($socialprofiles) > 0; } -- cgit v1.2.3