summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2016-11-17 17:00:25 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2016-11-21 11:29:59 +0100
commit069023416c646ab8340a8521c4db5b453e57481d (patch)
treeb9dfd88980a534d35b7d87442d867d3337e17da1 /apps
parentb23a4ca96b018b31d7586883075f306f0492c7e4 (diff)
downloadnextcloud-server-069023416c646ab8340a8521c4db5b453e57481d.tar.gz
nextcloud-server-069023416c646ab8340a8521c4db5b453e57481d.zip
lookup server connector
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'apps')
-rw-r--r--apps/lookup_server_connector/appinfo/app.php9
-rw-r--r--apps/lookup_server_connector/lib/UpdateLookupServer.php85
2 files changed, 82 insertions, 12 deletions
diff --git a/apps/lookup_server_connector/appinfo/app.php b/apps/lookup_server_connector/appinfo/app.php
index e74f101853f..dc076b78828 100644
--- a/apps/lookup_server_connector/appinfo/app.php
+++ b/apps/lookup_server_connector/appinfo/app.php
@@ -21,8 +21,13 @@
$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);
});
diff --git a/apps/lookup_server_connector/lib/UpdateLookupServer.php b/apps/lookup_server_connector/lib/UpdateLookupServer.php
index 2ccdf5b5a8c..b6d8b9782a4 100644
--- a/apps/lookup_server_connector/lib/UpdateLookupServer.php
+++ b/apps/lookup_server_connector/lib/UpdateLookupServer.php
@@ -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,
+ ]
+ );
+
}
}