diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-09-04 16:38:41 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-04 16:38:41 +0300 |
commit | 21df963e981fa63c57e7bb9594f3272b9b1f4d62 (patch) | |
tree | e90ccb866ad7a181f51d5caa0283576c0eb60877 | |
parent | 1fa5777efe124da2da0cb0ba03ee512b46ce3e41 (diff) | |
parent | 6f5ba6cb273713b8f302e54159f28d381c5dc5c5 (diff) |
Merge pull request #16 from nextcloud/batch-upload
allow nodes from a global site setup to populate the lookup server automatically
-rwxr-xr-x | server/config/config.sample.php | 3 | ||||
-rw-r--r-- | server/index.php | 1 | ||||
-rw-r--r-- | server/lib/UserManager.php | 43 | ||||
-rw-r--r-- | server/src/config.php | 1 | ||||
-rw-r--r-- | server/src/dependencies.php | 2 |
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(); |