From 9912dbae83eebe97eebd6eaeb0d100b01824ca6d Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 20 Jun 2019 11:32:56 +0100
Subject: [PATCH] FIX #10771 TIME 1 check user status in MP

---
 rest/index.php                                |  1 +
 .../controllers/MaarchParapheurController.php | 56 ++++++++++++++++++-
 2 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 2485db9ed0f..c3a0a326ea3 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -341,6 +341,7 @@ $app->put('/users/{id}/status', \User\controllers\UserController::class . ':upda
 $app->put('/users/{id}/createInMaarchParapheur', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':sendUserToMaarchParapheur');
 $app->put('/users/{id}/linkToMaarchParapheur', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':linkUserToMaarchParapheur');
 $app->put('/users/{id}/unlinkToMaarchParapheur', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':unlinkUserToMaarchParapheur');
+$app->get('/users/{id}/statusInMaarchParapheur', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':userStatusInMaarchParapheur');
 $app->put('/users/{id}/externalSignatures', \ExternalSignatoryBook\controllers\MaarchParapheurController::class . ':sendSignaturesToMaarchParapheur');
 $app->post('/users/{id}/groups', \User\controllers\UserController::class . ':addGroup');
 $app->put('/users/{id}/groups/{groupId}', \User\controllers\UserController::class . ':updateGroup');
diff --git a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
index b4beb088e69..3c608dec2c3 100755
--- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
@@ -512,7 +512,6 @@ class MaarchParapheurController
 
     public static function sendUserToMaarchParapheur(Request $request, Response $response, array $aArgs)
     {
-
         $body = $request->getParsedBody();
         $check = Validator::stringType()->notEmpty()->validate($body['login']) && preg_match("/^[\w.@-]*$/", $body['login']);
         if (!$check) {
@@ -600,7 +599,6 @@ class MaarchParapheurController
         $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
 
         if ($loadedXml->signatoryBookEnabled == 'maarchParapheur') {
-
             foreach ($loadedXml->signatoryBook as $value) {
                 if ($value->id == "maarchParapheur") {
                     $url      = $value->url;
@@ -689,6 +687,60 @@ class MaarchParapheurController
         return $response->withJson(['success' => 'success']);
     }
 
+    public static function userStatusInMaarchParapheur(Request $request, Response $response, array $aArgs)
+    {
+        $error = UserController::hasUsersRights(['id' => $aArgs['id']]);
+        if (!empty($error['error'])) {
+            return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
+        }
+
+        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
+
+        if ($loadedXml->signatoryBookEnabled == 'maarchParapheur') {
+            foreach ($loadedXml->signatoryBook as $value) {
+                if ($value->id == "maarchParapheur") {
+                    $url      = $value->url;
+                    $userId   = $value->userId;
+                    $password = $value->password;
+                    break;
+                }
+            }
+
+            $userInfo = UserModel::getById(['select' => ['external_id->\'maarchParapheur\' as external_id'], 'id' => $aArgs['id']]);
+
+            if (!empty($userInfo['external_id'])) {
+                $curlResponse = CurlModel::execSimple([
+                    'url'           => rtrim($url, '/') . '/rest/users/'.$userInfo['external_id'],
+                    'basicAuth'     => ['user' => $userId, 'password' => $password],
+                    'headers'       => ['content-type:application/json'],
+                    'method'        => 'GET'
+                ]);
+            } else {
+                return $response->withStatus(400)->withJson(['errors' => 'User does not have Maarch Parapheur Id']);
+            }
+
+            if ($curlResponse['code'] != '200') {
+                if (!empty($curlResponse['response']['errors'])) {
+                    $errors =  $curlResponse['response']['errors'];
+                } else {
+                    $errors =  $curlResponse['errors'];
+                }
+                if (empty($errors)) {
+                    $errors = 'An error occured. Please check your configuration file.';
+                }
+                return $response->withStatus(400)->withJson(['errors' => $errors]);
+            }
+
+            if (empty($curlResponse['response']['user'])) {
+                return $response->withJson(['connected' => false]);
+            }
+        } else {
+            return $response->withStatus(403)->withJson(['errors' => 'maarchParapheur is not enabled']);
+        }
+
+        return $response->withJson(['connected' => true]);
+    }
+
     public static function sendSignaturesToMaarchParapheur(Request $request, Response $response, array $aArgs)
     {
         $error = UserController::hasUsersRights(['id' => $aArgs['id'], 'himself' => true]);
-- 
GitLab