From 6b127fc269f92d220d7a318295c7e8368657f598 Mon Sep 17 00:00:00 2001 From: call-me-matt Date: Tue, 20 Oct 2020 23:13:44 +0200 Subject: [PATCH] add xing to social sync Signed-off-by: call-me-matt --- css/icons.scss | 1 + img/license.txt | 1 + img/xing.svg | 1 + .../Social/CompositeSocialProvider.php | 4 +- lib/Service/Social/XingProvider.php | 82 +++++++++++++++++++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 img/xing.svg create mode 100644 lib/Service/Social/XingProvider.php diff --git a/css/icons.scss b/css/icons.scss index 1516587f9..084df4e7b 100644 --- a/css/icons.scss +++ b/css/icons.scss @@ -40,6 +40,7 @@ @include icon-black-white('tumblr', 'contacts', 2); // “tumblr (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/tumblr?style=brands) @include icon-black-white('twitter', 'contacts', 2); // “twitter (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/twitter?style=brands) @include icon-black-white('diaspora', 'contacts', 2); // “diaspora (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/diaspora?style=brands) +@include icon-black-white('xing', 'contacts', 2); // “xing (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/xing?style=brands) .icon-up-force-white { // using #fffffe to trick the accessibility dark theme icon invert diff --git a/img/license.txt b/img/license.txt index 8ce24f736..1022843e4 100644 --- a/img/license.txt +++ b/img/license.txt @@ -5,3 +5,4 @@ * “tumblr (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/tumblr?style=brands) * “twitter (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/twitter?style=brands) * “diaspora (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/diaspora?style=brands) +* “xing (fab)” by fontawesome.com is licensed under CC BY 4.0. (https://fontawesome.com/icons/xing?style=brands) diff --git a/img/xing.svg b/img/xing.svg new file mode 100644 index 000000000..4befbee29 --- /dev/null +++ b/img/xing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/Service/Social/CompositeSocialProvider.php b/lib/Service/Social/CompositeSocialProvider.php index bca9939da..40d937e6e 100644 --- a/lib/Service/Social/CompositeSocialProvider.php +++ b/lib/Service/Social/CompositeSocialProvider.php @@ -36,7 +36,8 @@ public function __construct(InstagramProvider $instagramProvider, FacebookProvider $facebookProvider, TwitterProvider $twitterProvider, TumblrProvider $tumblrProvider, - DiasporaProvider $diasporaProvider) { + DiasporaProvider $diasporaProvider, + XingProvider $xingProvider) { // This determines the priority of known providers $this->providers = [ @@ -46,6 +47,7 @@ public function __construct(InstagramProvider $instagramProvider, 'facebook' => $facebookProvider, 'tumblr' => $tumblrProvider, 'diaspora' => $diasporaProvider, + 'xing' => $xingProvider, ]; } diff --git a/lib/Service/Social/XingProvider.php b/lib/Service/Social/XingProvider.php new file mode 100644 index 000000000..739d1fd2f --- /dev/null +++ b/lib/Service/Social/XingProvider.php @@ -0,0 +1,82 @@ + + * + * @author Matthias Heinisch + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Contacts\Service\Social; + +use OCP\Http\Client\IClientService; + +class XingProvider implements ISocialProvider { + + /** @var IClientService */ + private $httpClient; + + /** @var boolean */ + private $looping; + + public function __construct(IClientService $httpClient) { + $this->httpClient = $httpClient->NewClient(); + $this->looping = false; + } + + /** + * Returns the profile-id + * + * @param {string} the value from the contact's x-socialprofile + * + * @return string + */ + public function cleanupId(string $candidate):string { + $candidate = preg_replace('/^' . preg_quote('x-apple:', '/') . '/', '', $candidate); + try { + if (strpos($candidate, 'http') !== 0) { + $candidate = 'https://www.xing.com/profile/' . $candidate; + } + } catch (Exception $e) { + $candidate = null; + } + return $candidate; + } + + /** + * Returns the profile-picture url + * + * @param {string} profileId the profile-id + * + * @return string|null + */ + public function getImageUrl(string $profileUrl):?string { + try { + $result = $this->httpClient->get($profileUrl); + $htmlResult = $result->getBody(); + + $avatar = '/.*src="(https:\/\/profile-images[a-zA-Z0-9\/.\-_]+\.jpg)".*/'; + if (preg_match($avatar, $htmlResult, $matches)) { + return $matches[1]; + } + // keyword not found, maybe page changed? + return null; + } catch (Exception $e) { + return null; + } + } +}