lookup server connector
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
This commit is contained in:
parent
b23a4ca96b
commit
069023416c
2 changed files with 82 additions and 12 deletions
|
@ -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);
|
||||
});
|
||||
|
|
|
@ -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,
|
||||
]
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue