]> source.dussan.org Git - nextcloud-server.git/commitdiff
lookup server connector
authorBjoern Schiessle <bjoern@schiessle.org>
Thu, 17 Nov 2016 16:00:25 +0000 (17:00 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Mon, 21 Nov 2016 10:29:59 +0000 (11:29 +0100)
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
apps/lookup_server_connector/appinfo/app.php
apps/lookup_server_connector/lib/UpdateLookupServer.php

index e74f101853fc2a8104decc414bd31670f2d65fef..dc076b78828b902eb40a477d9d7f8162b603bb75 100644 (file)
 
 $dispatcher = \OC::$server->getEventDispatcher();
 
-$dispatcher->addListener('OC\AccountManager::userUpdated', function(GenericEvent $event) {
+$dispatcher->addListener('OC\AccountManager::userUpdated', function(\Symfony\Component\EventDispatcher\GenericEvent $event) {
        $user = $event->getSubject();
-       $updateLookupServer = new \OCA\LookupServerConnector\UpdateLookupServer();
+       $updateLookupServer = new \OCA\LookupServerConnector\UpdateLookupServer(
+               new \OC\Accounts\AccountManager(\OC::$server->getDatabaseConnection(), \OC::$server->getEventDispatcher()),
+               \OC::$server->getConfig(),
+               \OC::$server->getSecureRandom(),
+               \OC::$server->getHTTPClientService()
+       );
        $updateLookupServer->userUpdated($user);
 });
index 2ccdf5b5a8c2719d4650c822903344f2e5c7e225..b6d8b9782a42e4425b69b9abb35d116e79f25f50 100644 (file)
@@ -24,8 +24,10 @@ namespace OCA\LookupServerConnector;
 
 
 use OC\Accounts\AccountManager;
+use OCP\Http\Client\IClientService;
 use OCP\IConfig;
 use OCP\IUser;
+use OCP\Security\ISecureRandom;
 
 /**
  * Class UpdateLookupServer
@@ -40,15 +42,31 @@ class UpdateLookupServer {
        /** @var IConfig */
        private $config;
 
+       /** @var ISecureRandom */
+       private $secureRandom;
+
+       /** @var IClientService */
+       private $clientService;
+
+       /** @var string URL point to lookup server */
+       private $lookupServer = 'http://192.168.56.102';
+
        /**
         * UpdateLookupServer constructor.
         *
         * @param AccountManager $accountManager
         * @param IConfig $config
+        * @param ISecureRandom $secureRandom
+        * @param IClientService $clientService
         */
-       public function __construct(AccountManager $accountManager, IConfig $config) {
-               $this->accountManager;
+       public function __construct(AccountManager $accountManager,
+                                                               IConfig $config,
+                                                               ISecureRandom $secureRandom,
+                                                               IClientService $clientService) {
+               $this->accountManager = $accountManager;
                $this->config = $config;
+               $this->secureRandom = $secureRandom;
+               $this->clientService = $clientService;
        }
 
 
@@ -58,16 +76,16 @@ class UpdateLookupServer {
 
                $publicData = [];
 
-               foreach ($userData as $data) {
+               foreach ($userData as $key => $data) {
                        if ($data['scope'] === AccountManager::VISIBILITY_PUBLIC) {
-                               $publicData[] = $data;
+                               $publicData[$key] = $data;
                        }
                }
 
-               if (empty($publicData)) {
-                       $this->removeFromLookupServer($user);
+               if (empty($publicData) && !empty($authKey)) {
+                       $this->removeFromLookupServer($user, $authKey);
                } else {
-                       $this->sendToLookupServer($publicData, $authKey);
+                       $this->sendToLookupServer($user, $publicData, $authKey);
                }
        }
 
@@ -83,11 +101,58 @@ class UpdateLookupServer {
        /**
         * send public user data to the lookup server
         *
+        * @param IUser $user
         * @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
+       protected function sendToLookupServer(IUser $user, $publicData, $authKey) {
+               if (empty($authKey)) {
+                       $authKey = $this->secureRandom->generate(16);
+                       $this->sendNewRecord($user, $publicData, $authKey);
+                       $this->config->setUserValue($user->getUID(), 'lookup_server_connector', 'authKey', $authKey);
+               } else {
+                       $this->updateExistingRecord($user, $publicData, $authKey);
+               }
+       }
+
+       protected function sendNewRecord(IUser $user, $publicData, $authKey) {
+               $httpClient = $this->clientService->newClient();
+               $response = $httpClient->post($this->lookupServer,
+                       [
+                               'body' => [
+                                       'key' => $authKey,
+                                       'federationid' => $publicData[$user->getCloudId()],
+                                       'name' => isset($publicData[AccountManager::PROPERTY_DISPLAYNAME]) ? $publicData[AccountManager::PROPERTY_DISPLAYNAME]['value'] : '',
+                                       'email' => isset($publicData[AccountManager::PROPERTY_EMAIL]) ? $publicData[AccountManager::PROPERTY_EMAIL]['value'] : '',
+                                       'address' => isset($publicData[AccountManager::PROPERTY_ADDRESS]) ? $publicData[AccountManager::PROPERTY_ADDRESS]['value'] : '',
+                                       'website' => isset($publicData[AccountManager::PROPERTY_WEBSITE]) ? $publicData[AccountManager::PROPERTY_WEBSITE]['value'] : '',
+                                       'twitter' => isset($publicData[AccountManager::PROPERTY_TWITTER]) ? $publicData[AccountManager::PROPERTY_TWITTER]['value'] : '',
+                                       'phone' => isset($publicData[AccountManager::PROPERTY_PHONE]) ? $publicData[AccountManager::PROPERTY_PHONE]['value'] : '',
+                               ],
+                               'timeout' => 3,
+                               'connect_timeout' => 3,
+                       ]
+               );
+       }
+
+       protected function updateExistingRecord(IUser $user, $publicData, $authKey) {
+               $httpClient = $this->clientService->newClient();
+               $httpClient->put($this->lookupServer,
+                       [
+                               'body' => [
+                                       'key' => $authKey,
+                                       'federationid' => $publicData[$user->getCloudId()],
+                                       'name' => isset($publicData[AccountManager::PROPERTY_DISPLAYNAME]) ? $publicData[AccountManager::PROPERTY_DISPLAYNAME]['value'] : '',
+                                       'email' => isset($publicData[AccountManager::PROPERTY_EMAIL]) ? $publicData[AccountManager::PROPERTY_EMAIL]['value'] : '',
+                                       'address' => isset($publicData[AccountManager::PROPERTY_ADDRESS]) ? $publicData[AccountManager::PROPERTY_ADDRESS]['value'] : '',
+                                       'website' => isset($publicData[AccountManager::PROPERTY_WEBSITE]) ? $publicData[AccountManager::PROPERTY_WEBSITE]['value'] : '',
+                                       'twitter' => isset($publicData[AccountManager::PROPERTY_TWITTER]) ? $publicData[AccountManager::PROPERTY_TWITTER]['value'] : '',
+                                       'phone' => isset($publicData[AccountManager::PROPERTY_PHONE]) ? $publicData[AccountManager::PROPERTY_PHONE]['value'] : '',
+                               ],
+                               'timeout' => 3,
+                               'connect_timeout' => 3,
+                       ]
+               );
+
        }
 }