From b23a4ca96b018b31d7586883075f306f0492c7e4 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Thu, 17 Nov 2016 12:14:13 +0100 Subject: [PATCH] push public user data to the lookup server Signed-off-by: Bjoern Schiessle --- .gitignore | 1 + apps/lookup_server_connector/appinfo/app.php | 28 ++++++ apps/lookup_server_connector/appinfo/info.xml | 18 ++++ .../lib/BackgroundJobs/RetryJob.php | 33 +++++++ .../lib/UpdateLookupServer.php | 93 +++++++++++++++++++ core/shipped.json | 2 + tests/lib/App/ManagerTest.php | 4 + 7 files changed, 179 insertions(+) create mode 100644 apps/lookup_server_connector/appinfo/app.php create mode 100644 apps/lookup_server_connector/appinfo/info.xml create mode 100644 apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php create mode 100644 apps/lookup_server_connector/lib/UpdateLookupServer.php diff --git a/.gitignore b/.gitignore index 964701eea63..fa49588fad4 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ !/apps/files_sharing !/apps/files_trashbin !/apps/files_versions +!/apps/lookup_server_connector !/apps/user_ldap !/apps/provisioning_api !/apps/systemtags diff --git a/apps/lookup_server_connector/appinfo/app.php b/apps/lookup_server_connector/appinfo/app.php new file mode 100644 index 00000000000..e74f101853f --- /dev/null +++ b/apps/lookup_server_connector/appinfo/app.php @@ -0,0 +1,28 @@ + + * + * @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 . + * + */ + +$dispatcher = \OC::$server->getEventDispatcher(); + +$dispatcher->addListener('OC\AccountManager::userUpdated', function(GenericEvent $event) { + $user = $event->getSubject(); + $updateLookupServer = new \OCA\LookupServerConnector\UpdateLookupServer(); + $updateLookupServer->userUpdated($user); +}); diff --git a/apps/lookup_server_connector/appinfo/info.xml b/apps/lookup_server_connector/appinfo/info.xml new file mode 100644 index 00000000000..88898c0b71b --- /dev/null +++ b/apps/lookup_server_connector/appinfo/info.xml @@ -0,0 +1,18 @@ + + + lookup_server_connector + Lookup Server Connector + Sync public user information with the lookup server + AGPL + Bjoern Schiessle + LookupServerConnector + 1.0.0 + other + + + + + + + + diff --git a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php new file mode 100644 index 00000000000..5c4f1e73259 --- /dev/null +++ b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php @@ -0,0 +1,33 @@ + + * + * @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\LookupServerConnector\BackgroundJobs; + + +use OC\BackgroundJob\Job; + +class RetryJob extends Job { + + protected function run($argument) { + // TODO: Implement run() method. + } +} diff --git a/apps/lookup_server_connector/lib/UpdateLookupServer.php b/apps/lookup_server_connector/lib/UpdateLookupServer.php new file mode 100644 index 00000000000..2ccdf5b5a8c --- /dev/null +++ b/apps/lookup_server_connector/lib/UpdateLookupServer.php @@ -0,0 +1,93 @@ + + * + * @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\LookupServerConnector; + + +use OC\Accounts\AccountManager; +use OCP\IConfig; +use OCP\IUser; + +/** + * Class UpdateLookupServer + * + * @package OCA\LookupServerConnector + */ +class UpdateLookupServer { + + /** @var AccountManager */ + private $accountManager; + + /** @var IConfig */ + private $config; + + /** + * UpdateLookupServer constructor. + * + * @param AccountManager $accountManager + * @param IConfig $config + */ + public function __construct(AccountManager $accountManager, IConfig $config) { + $this->accountManager; + $this->config = $config; + } + + + public function userUpdated(IUser $user) { + $userData = $this->accountManager->getUser($user); + $authKey = $this->config->getUserValue($user->getUID(), 'lookup_server_connector', 'authKey'); + + $publicData = []; + + foreach ($userData as $data) { + if ($data['scope'] === AccountManager::VISIBILITY_PUBLIC) { + $publicData[] = $data; + } + } + + if (empty($publicData)) { + $this->removeFromLookupServer($user); + } else { + $this->sendToLookupServer($publicData, $authKey); + } + } + + /** + * remove user from lookup server + * + * @param IUser $user + */ + protected function removeFromLookupServer(IUser $user) { + $this->config->deleteUserValue($user->getUID(), 'lookup_server_connector', 'authKey'); + } + + /** + * send public user data to the lookup server + * + * @param array $publicData + * @param string $authKey + */ + protected function sendToLookupServer($publicData, $authKey) { + // If we don't update a existing entry, the server will return a authKey and we + // will add it to the database + } +} diff --git a/core/shipped.json b/core/shipped.json index f831d17f36a..7fb87b7f17d 100644 --- a/core/shipped.json +++ b/core/shipped.json @@ -22,6 +22,7 @@ "firstrunwizard", "gallery", "logreader", + "lookup_server_connector", "notifications", "password_policy", "provisioning_api", @@ -42,6 +43,7 @@ "files", "dav", "federatedfilesharing", + "lookup_server_connector", "provisioning_api", "twofactor_backupcodes", "workflowengine" diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php index 3dbcb8a5609..e38f72b3d92 100644 --- a/tests/lib/App/ManagerTest.php +++ b/tests/lib/App/ManagerTest.php @@ -320,6 +320,7 @@ class ManagerTest extends TestCase { 'dav', 'federatedfilesharing', 'files', + 'lookup_server_connector', 'provisioning_api', 'test1', 'test3', @@ -344,6 +345,7 @@ class ManagerTest extends TestCase { 'dav', 'federatedfilesharing', 'files', + 'lookup_server_connector', 'provisioning_api', 'test1', 'test3', @@ -364,6 +366,7 @@ class ManagerTest extends TestCase { 'files' => ['id' => 'files'], 'federatedfilesharing' => ['id' => 'federatedfilesharing'], 'provisioning_api' => ['id' => 'provisioning_api'], + 'lookup_server_connector' => ['id' => 'lookup_server_connector'], 'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '9.0.0'], 'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'], 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], @@ -408,6 +411,7 @@ class ManagerTest extends TestCase { 'files' => ['id' => 'files'], 'federatedfilesharing' => ['id' => 'federatedfilesharing'], 'provisioning_api' => ['id' => 'provisioning_api'], + 'lookup_server_connector' => ['id' => 'lookup_server_connector'], 'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '8.0.0'], 'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'], 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], -- 2.39.5