From 41893639f04d71dcbe6cab3c21cd4c78606224b5 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 6 Aug 2020 17:09:31 +0200
Subject: [PATCH] FEAT #14457 TIME 1:30 WIP Authorized route front

---
 src/app/user/controllers/UserController.php          |  7 ++++++-
 .../user/user-administration.component.html          |  8 +++++++-
 .../user/user-administration.component.ts            | 12 +++++++++++-
 src/lang/lang-en.json                                |  3 ++-
 src/lang/lang-fr.json                                |  3 ++-
 5 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index f07016bc414..071f4d7c15c 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -286,7 +286,12 @@ class UserController
             $set['mode'] = $body['mode'];
         }
 
-        if ($body['mode'] == 'rest' && !empty($body['authorizedApi']) && is_array($body['authorizedApi'])) {
+        if ($body['mode'] == 'rest' && isset($body['authorizedApi']) && is_array($body['authorizedApi'])) {
+            foreach ($body['authorizedApi'] as $value) {
+                if (strpos($value, 'GET') !== 0 && strpos($value, 'POST') !== 0 && strpos($value, 'PUT') !== 0 && strpos($value, 'DELETE') !== 0) {
+                    return $response->withStatus(400)->withJson(['errors' => 'Body authorizedApi is not well formatted']);
+                }
+            }
             $set['authorized_api'] = json_encode($body['authorizedApi']);
         }
 
diff --git a/src/frontend/app/administration/user/user-administration.component.html b/src/frontend/app/administration/user/user-administration.component.html
index 524aacc6739..6ff12d1f912 100755
--- a/src/frontend/app/administration/user/user-administration.component.html
+++ b/src/frontend/app/administration/user/user-administration.component.html
@@ -230,6 +230,12 @@
                                                 </mat-select>
                                             </mat-form-field>
                                         </div>
+                                        <div *ngIf="user.mode === 'rest'">
+                                            <mat-form-field>
+                                                <mat-label>{{'this.lang.authorizedRoutes' | translate}}</mat-label>
+                                                <textarea matInput [(ngModel)]="user.authorizedApi" placeholder="POST/attachments\nPUT/attachments/{id}"></textarea>
+                                            </mat-form-field>
+                                        </div>
                                     </mat-expansion-panel>
                                 </mat-accordion>
                                 <div class="form-group" style="margin-top: 10px;">
@@ -577,4 +583,4 @@
         </mat-list>
     </mat-sidenav>
 
-</mat-sidenav-container>
\ No newline at end of file
+</mat-sidenav-container>
diff --git a/src/frontend/app/administration/user/user-administration.component.ts b/src/frontend/app/administration/user/user-administration.component.ts
index fe6745b6c69..f9e62fd03ae 100755
--- a/src/frontend/app/administration/user/user-administration.component.ts
+++ b/src/frontend/app/administration/user/user-administration.component.ts
@@ -35,7 +35,8 @@ export class UserAdministrationComponent implements OnInit {
     userId: string;
     mode: string = '';
     user: any = {
-        mode : 'standard'
+        mode : 'standard',
+        authorizedApi : ''
     };
     _search: string = '';
     creationMode: boolean;
@@ -173,6 +174,11 @@ export class UserAdministrationComponent implements OnInit {
                     .subscribe((data: any) => {
                         this.user = data;
 
+                        if (this.user.mode == 'rest') {
+                            this.user.authorizedApi = this.user.authorizedApi.join('\n');
+                            console.log(this.user.authorizedApi);
+                        }
+
                         if (this.headerService.user.id === this.user.id) {
                             this.canViewPersonalDatas = true;
                             this.canManagePersonalDatas = true;
@@ -903,6 +909,10 @@ export class UserAdministrationComponent implements OnInit {
                     this.notify.error(err.error.errors);
                 });
         } else {
+            if (this.user.mode == 'rest') {
+                this.user.authorizedApi = this.user.authorizedApi.split('\n');
+                console.log(this.user.authorizedApi);
+            }
             this.http.put('../rest/users/' + this.serialId, this.user)
                 .subscribe((data: any) => {
                     if (this.headerService.user.id == this.serialId) {
diff --git a/src/lang/lang-en.json b/src/lang/lang-en.json
index bc4b6fca9ef..7031c69ae86 100644
--- a/src/lang/lang-en.json
+++ b/src/lang/lang-en.json
@@ -1888,5 +1888,6 @@
     "mustAtLeastMinValues": "The data must have at least <b>6</b> values",
     "enableField": "Enable field",
     "disableField": "Disable field",
-    "emailSubject": "E-mail's subject"
+    "emailSubject": "E-mail's subject",
+    "authorizedRoutes": "Authorized routes"
 }
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index bfb4211408a..668a9b21d97 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -1883,5 +1883,6 @@
     "mustAtLeastMinValues": "Les données doivent avoir au mimimum <b>6</b> valeurs",
     "enableField": "Activer le champ",
     "disableField": "Désactiver le champ",
-    "emailSubject": "Objet du courriel"
+    "emailSubject": "Objet du courriel",
+    "authorizedRoutes": "Routes autorisées"
 }
-- 
GitLab