Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/lookup-server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-09-04 16:38:41 +0300
committerGitHub <noreply@github.com>2017-09-04 16:38:41 +0300
commit21df963e981fa63c57e7bb9594f3272b9b1f4d62 (patch)
treee90ccb866ad7a181f51d5caa0283576c0eb60877
parent1fa5777efe124da2da0cb0ba03ee512b46ce3e41 (diff)
parent6f5ba6cb273713b8f302e54159f28d381c5dc5c5 (diff)
Merge pull request #16 from nextcloud/batch-upload
allow nodes from a global site setup to populate the lookup server automatically
-rwxr-xr-xserver/config/config.sample.php3
-rw-r--r--server/index.php1
-rw-r--r--server/lib/UserManager.php43
-rw-r--r--server/src/config.php1
-rw-r--r--server/src/dependencies.php2
5 files changed, 45 insertions, 5 deletions
diff --git a/server/config/config.sample.php b/server/config/config.sample.php
index 5154854..97cdaf9 100755
--- a/server/config/config.sample.php
+++ b/server/config/config.sample.php
@@ -56,6 +56,9 @@ $CONFIG = [
// does the lookup server run in a global scale setup
'GLOBAL_SCALE' => false,
+ // auth token
+ 'AUTH_KEY' => 'secure key, same as the jwt key used on the global site selector and all clients',
+
// twitter oauth credentials, needed to perform twitter verification
'TWITTER' => [
'CONSUMER_KEY' => '',
diff --git a/server/index.php b/server/index.php
index 457d2ba..34ab429 100644
--- a/server/index.php
+++ b/server/index.php
@@ -18,6 +18,7 @@ $app->add($container->get('BruteForceMiddleware'));
$app->get('/users', 'UserManager:search');
$app->post('/users', 'UserManager:register');
+$app->post('/gs/users', 'UserManager:batchRegister');
$app->delete('/users', 'UserManager:delete');
$app->get('/validate/email/{token}', 'EmailValidator:validate')->setName('validateEmail');
$app->get('/status', 'Status:status');
diff --git a/server/lib/UserManager.php b/server/lib/UserManager.php
index 52a895e..34c6a5a 100644
--- a/server/lib/UserManager.php
+++ b/server/lib/UserManager.php
@@ -31,6 +31,9 @@ class UserManager {
/** @var bool */
private $globalScaleMode;
+ /** @var string */
+ private $authKey;
+
/**
* UserManager constructor.
*
@@ -39,20 +42,23 @@ class UserManager {
* @param Website $websiteValidator
* @param Twitter $twitterValidator
* @param SignatureHandler $signatureHandler
- * @param bool globalScaleMode
+ * @param bool $globalScaleMode
+ * @param string $authKey
*/
public function __construct(\PDO $db,
Email $emailValidator,
Website $websiteValidator,
Twitter $twitterValidator,
SignatureHandler $signatureHandler,
- $globalScaleMode) {
+ $globalScaleMode,
+ $authKey) {
$this->db = $db;
$this->emailValidator = $emailValidator;
$this->websiteValidator = $websiteValidator;
$this->twitterValidator = $twitterValidator;
$this->signatureHandler = $signatureHandler;
$this->globalScaleMode = $globalScaleMode;
+ $this->authKey = $authKey;
}
public function search(Request $request, Response $response) {
@@ -226,7 +232,7 @@ LIMIT ' . $limit);
$storeId = $this->db->lastInsertId();
$stmt->closeCursor();
- if ($field === 'email') {
+ if ($field === 'email' && $this->globalScaleMode === false) {
$this->emailValidator->emailUpdated($data[$field], $storeId);
}
}
@@ -276,7 +282,7 @@ LIMIT ' . $limit);
$stmt->bindParam(':v', $data[$key]);
$stmt->execute();
$stmt->closeCursor();
- if ($key === 'email') {
+ if ($key === 'email' && $this->globalScaleMode === false) {
$this->emailValidator->emailUpdated($data[$key], $row['id']);
}
// remove verification request from old data
@@ -357,6 +363,35 @@ LIMIT ' . $limit);
return $response;
}
+ /**
+ * let server auto register users, used in the global scale scenario
+ *
+ * @param Request $request
+ * @param Response $response
+ * @return Response
+ */
+ public function batchRegister(Request $request, Response $response) {
+
+ $body = json_decode($request->getBody(), true);
+
+ if ($body === null || !isset($body['authKey']) || !isset($body['users'])) {
+ $response->withStatus(400);
+ return $response;
+ }
+
+ if ($body['authKey'] !== $this->authKey) {
+ $response->withStatus(400);
+ return $response;
+ }
+
+ foreach ($body['users'] as $cloudId => $data) {
+ $this->insertOrUpdate($cloudId, $data, time());
+ }
+
+ return $response;
+
+ }
+
public function delete(Request $request, Response $response) {
$body = json_decode($request->getBody(), true);
diff --git a/server/src/config.php b/server/src/config.php
index 0ee302a..4e5bc5f 100644
--- a/server/src/config.php
+++ b/server/src/config.php
@@ -17,6 +17,7 @@ return [
'replication_auth' => $CONFIG['REPLICATION_AUTH'],
'replication_hosts' => $CONFIG['REPLICATION_HOSTS'],
'global_scale' => $CONFIG['GLOBAL_SCALE'],
+ 'auth_key' => $CONFIG['AUTH_KEY'],
'twitter' => [
'consumer_key' => $CONFIG['TWITTER']['CONSUMER_KEY'],
'consumer_secret' => $CONFIG['TWITTER']['CONSUMER_SECRET'],
diff --git a/server/src/dependencies.php b/server/src/dependencies.php
index c2a9d80..641968a 100644
--- a/server/src/dependencies.php
+++ b/server/src/dependencies.php
@@ -9,7 +9,7 @@ $container['db'] = function($c) {
return $pdo;
};
$container['UserManager'] = function($c) {
- return new \LookupServer\UserManager($c->db, $c->EmailValidator, $c->WebsiteValidator, $c->TwitterValidator, $c->SignatureHandler, $c['settings']['global_scale']);
+ return new \LookupServer\UserManager($c->db, $c->EmailValidator, $c->WebsiteValidator, $c->TwitterValidator, $c->SignatureHandler, $c['settings']['global_scale'], $c['settings']['auth_key']);
};
$container['SignatureHandler'] = function($c) {
return new \LookupServer\SignatureHandler();