lookup server connector
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
This commit is contained in:
parent
b23a4ca96b
commit
069023416c
|
@ -21,8 +21,13 @@
|
||||||
|
|
||||||
$dispatcher = \OC::$server->getEventDispatcher();
|
$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();
|
$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);
|
$updateLookupServer->userUpdated($user);
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,8 +24,10 @@ namespace OCA\LookupServerConnector;
|
||||||
|
|
||||||
|
|
||||||
use OC\Accounts\AccountManager;
|
use OC\Accounts\AccountManager;
|
||||||
|
use OCP\Http\Client\IClientService;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
|
use OCP\Security\ISecureRandom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class UpdateLookupServer
|
* Class UpdateLookupServer
|
||||||
|
@ -40,15 +42,31 @@ class UpdateLookupServer {
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
private $config;
|
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.
|
* UpdateLookupServer constructor.
|
||||||
*
|
*
|
||||||
* @param AccountManager $accountManager
|
* @param AccountManager $accountManager
|
||||||
* @param IConfig $config
|
* @param IConfig $config
|
||||||
|
* @param ISecureRandom $secureRandom
|
||||||
|
* @param IClientService $clientService
|
||||||
*/
|
*/
|
||||||
public function __construct(AccountManager $accountManager, IConfig $config) {
|
public function __construct(AccountManager $accountManager,
|
||||||
$this->accountManager;
|
IConfig $config,
|
||||||
|
ISecureRandom $secureRandom,
|
||||||
|
IClientService $clientService) {
|
||||||
|
$this->accountManager = $accountManager;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
|
$this->secureRandom = $secureRandom;
|
||||||
|
$this->clientService = $clientService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,16 +76,16 @@ class UpdateLookupServer {
|
||||||
|
|
||||||
$publicData = [];
|
$publicData = [];
|
||||||
|
|
||||||
foreach ($userData as $data) {
|
foreach ($userData as $key => $data) {
|
||||||
if ($data['scope'] === AccountManager::VISIBILITY_PUBLIC) {
|
if ($data['scope'] === AccountManager::VISIBILITY_PUBLIC) {
|
||||||
$publicData[] = $data;
|
$publicData[$key] = $data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($publicData)) {
|
if (empty($publicData) && !empty($authKey)) {
|
||||||
$this->removeFromLookupServer($user);
|
$this->removeFromLookupServer($user, $authKey);
|
||||||
} else {
|
} else {
|
||||||
$this->sendToLookupServer($publicData, $authKey);
|
$this->sendToLookupServer($user, $publicData, $authKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,11 +101,58 @@ class UpdateLookupServer {
|
||||||
/**
|
/**
|
||||||
* send public user data to the lookup server
|
* send public user data to the lookup server
|
||||||
*
|
*
|
||||||
|
* @param IUser $user
|
||||||
* @param array $publicData
|
* @param array $publicData
|
||||||
* @param string $authKey
|
* @param string $authKey
|
||||||
*/
|
*/
|
||||||
protected function sendToLookupServer($publicData, $authKey) {
|
protected function sendToLookupServer(IUser $user, $publicData, $authKey) {
|
||||||
// If we don't update a existing entry, the server will return a authKey and we
|
if (empty($authKey)) {
|
||||||
// will add it to the database
|
$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,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue