From cf488dd04fd1c10964fe9587e73848601dd145a0 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Mon, 27 Apr 2020 18:14:56 +0200
Subject: [PATCH] FEAT #13664 TIME 0:45 Check account alfresco

---
 rest/index.php                                |  1 +
 .../controllers/AlfrescoController.php        | 50 ++++++++++++++++++-
 2 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/rest/index.php b/rest/index.php
index a14b71fc84c..295047b6010 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 f8cbf9026eb..55f6b134a8f 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']);
-- 
GitLab