diff --git a/rest/index.php b/rest/index.php index a14b71fc84cccfb33688bf51b3e6d03c6e7a3c0c..295047b60100fde6ba6fccb7e826d9b87af924ff 100755 --- a/rest/index.php +++ b/rest/index.php @@ -569,6 +569,7 @@ $app->post('/alfresco/accounts', \Alfresco\controllers\AlfrescoController::class $app->get('/alfresco/accounts/{id}', \Alfresco\controllers\AlfrescoController::class . ':getAccountById'); $app->put('/alfresco/accounts/{id}', \Alfresco\controllers\AlfrescoController::class . ':updateAccount'); $app->delete('/alfresco/accounts/{id}', \Alfresco\controllers\AlfrescoController::class . ':deleteAccount'); +$app->post('/alfresco/checkAccounts', \Alfresco\controllers\AlfrescoController::class . ':checkAccount'); $app->get('/alfresco/rootFolders', \Alfresco\controllers\AlfrescoController::class . ':getRootFolders'); $app->get('/alfresco/folders/{id}/children', \Alfresco\controllers\AlfrescoController::class . ':getChildrenFoldersById'); $app->get('/alfresco/autocomplete/folders', \Alfresco\controllers\AlfrescoController::class . ':getFolders'); diff --git a/src/app/external/alfresco/controllers/AlfrescoController.php b/src/app/external/alfresco/controllers/AlfrescoController.php index f8cbf9026eb6e5e8fd9ff22bb9188c0e3489038f..55f6b134a8ff0a9e5795cd06f23205072a8b1bc1 100644 --- a/src/app/external/alfresco/controllers/AlfrescoController.php +++ b/src/app/external/alfresco/controllers/AlfrescoController.php @@ -56,7 +56,7 @@ class AlfrescoController $body = $request->getParsedBody(); - if (!Validator::stringType()->notEmpty()->validate($body['uri'])) { + if (!Validator::stringType()->validate($body['uri'])) { return $response->withStatus(400)->withJson(['errors' => 'Body uri is empty or not a string']); } @@ -276,6 +276,54 @@ class AlfrescoController return $response->withStatus(204); } + public function checkAccount(Request $request, Response $response) + { + if (!PrivilegeController::hasPrivilege(['privilegeId' => 'admin_alfresco', 'userId' => $GLOBALS['id']])) { + return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']); + } + + $body = $request->getParsedBody(); + + if (!Validator::stringType()->notEmpty()->validate($body['login'])) { + return $response->withStatus(400)->withJson(['errors' => 'Body login is empty or not a string']); + } elseif (!Validator::stringType()->notEmpty()->validate($body['password'])) { + return $response->withStatus(400)->withJson(['errors' => 'Body password is empty or not a string']); + } + + $configuration = ConfigurationModel::getByService(['service' => 'admin_alfresco']); + if (empty($configuration)) { + return $response->withStatus(400)->withJson(['errors' => 'Alfresco configuration is not enabled']); + } + $configuration = json_decode($configuration['value'], true); + if (empty($configuration['uri'])) { + return $response->withStatus(400)->withJson(['errors' => 'Alfresco configuration URI is empty']); + } + $alfrescoUri = rtrim($configuration['uri'], '/'); + + $requestBody = [ + 'query' => [ + 'query' => "select * from cmis:folder", + 'language' => 'cmis', + ], + "paging" => [ + 'maxItems' => '1' + ], + 'fields' => ['id', 'name'] + ]; + $curlResponse = CurlModel::execSimple([ + 'url' => "{$alfrescoUri}/search/versions/1/search", + 'basicAuth' => ['user' => $body['login'], 'password' => $body['password']], + 'headers' => ['content-type:application/json', 'Accept: application/json'], + 'method' => 'POST', + 'body' => json_encode($requestBody) + ]); + if ($curlResponse['code'] != 200) { + return $response->withStatus(400)->withJson(['errors' => json_encode($curlResponse['response'])]); + } + + return $response->withStatus(204); + } + public function getRootFolders(Request $request, Response $response) { $configuration = ConfigurationModel::getByService(['service' => 'admin_alfresco']);