From 62c1cd4cfc18a75fe1b3e122351ef540ef71bcf2 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Wed, 21 Oct 2020 17:50:05 +0200
Subject: [PATCH] FEAT #13268 TIME 2 WIP sso admin

---
 .../administration-routing.module.ts          |  8 +-
 .../administration/administration.module.ts   |  6 +-
 .../administration/administration.service.ts  |  6 ++
 .../sso/sso-administration.component.html     | 55 +++++++++++++
 .../sso-administration.component.scss}        |  2 +-
 .../sso/sso-administration.component.ts       | 81 +++++++++++++++++++
 .../sso-list-administration.component.html}   | 20 ++---
 .../sso-list-administration.component.scss    |  7 ++
 .../sso-list-administration.component.ts}     | 30 +++----
 src/frontend/service/privileges.service.ts    |  2 +-
 10 files changed, 175 insertions(+), 42 deletions(-)
 create mode 100644 src/frontend/app/administration/connection/sso/sso-administration.component.html
 rename src/frontend/app/administration/connection/{connections-administration.component.scss => sso/sso-administration.component.scss} (80%)
 create mode 100644 src/frontend/app/administration/connection/sso/sso-administration.component.ts
 rename src/frontend/app/administration/connection/{connections-administration.component.html => sso/sso-list-administration.component.html} (81%)
 create mode 100644 src/frontend/app/administration/connection/sso/sso-list-administration.component.scss
 rename src/frontend/app/administration/connection/{connections-administration.component.ts => sso/sso-list-administration.component.ts} (72%)

diff --git a/src/frontend/app/administration/administration-routing.module.ts b/src/frontend/app/administration/administration-routing.module.ts
index 05b01fe229f..5109ac994b5 100755
--- a/src/frontend/app/administration/administration-routing.module.ts
+++ b/src/frontend/app/administration/administration-routing.module.ts
@@ -54,7 +54,8 @@ import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-sit
 import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component';
 import { RegisteredMailComponent } from './registered-mail/registered-mail.component';
 import { SearchAdministrationComponent } from './search/search-administration.component';
-import { ConnectionsAdministrationComponent } from './connection/connections-administration.component';
+import { SsoListAdministrationComponent } from './connection/sso/sso-list-administration.component';
+import { SsoAdministrationComponent } from './connection/sso/sso-administration.component';
 
 
 @NgModule({
@@ -130,8 +131,9 @@ import { ConnectionsAdministrationComponent } from './connection/connections-adm
             { path: 'administration/issuingSites', canActivate: [AppGuard], component: IssuingSiteListComponent },
             { path: 'administration/issuingSites/new', canActivate: [AppGuard], component: IssuingSiteComponent },
             { path: 'administration/issuingSites/:id', canActivate: [AppGuard], component: IssuingSiteComponent },
-            { path: 'administration/search', canActivate : [AppGuard], component : SearchAdministrationComponent},
-            { path: 'administration/connections', canActivate : [AppGuard], component : ConnectionsAdministrationComponent}
+            { path: 'administration/search', canActivate: [AppGuard], component: SearchAdministrationComponent },
+            { path: 'administration/connections/sso', canActivate: [AppGuard], component: SsoListAdministrationComponent },
+            { path: 'administration/connections/sso/:id', canActivate: [AppGuard], component: SsoAdministrationComponent }
         ]),
     ],
     exports: [
diff --git a/src/frontend/app/administration/administration.module.ts b/src/frontend/app/administration/administration.module.ts
index f7407a67f85..dfa472061bb 100755
--- a/src/frontend/app/administration/administration.module.ts
+++ b/src/frontend/app/administration/administration.module.ts
@@ -75,7 +75,8 @@ import { IssuingSiteListComponent } from './registered-mail/issuing-site/issuing
 import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-site.component';
 import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component';
 import { SearchAdministrationComponent } from './search/search-administration.component';
-import { ConnectionsAdministrationComponent } from './connection/connections-administration.component';
+import { SsoListAdministrationComponent } from './connection/sso/sso-list-administration.component';
+import { SsoAdministrationComponent } from './connection/sso/sso-administration.component';
 
 
 @NgModule({
@@ -160,7 +161,8 @@ import { ConnectionsAdministrationComponent } from './connection/connections-adm
         IssuingSiteComponent,
         RegisteredMailListComponent,
         SearchAdministrationComponent,
-        ConnectionsAdministrationComponent
+        SsoListAdministrationComponent,
+        SsoAdministrationComponent
     ],
     entryComponents: [
         AccountLinkComponent,
diff --git a/src/frontend/app/administration/administration.service.ts b/src/frontend/app/administration/administration.service.ts
index a9fc3d519f5..22e273f423c 100644
--- a/src/frontend/app/administration/administration.service.ts
+++ b/src/frontend/app/administration/administration.service.ts
@@ -122,6 +122,12 @@ export class AdministrationService {
             page: 0,
             field: ''
         },
+        admin_sso: {
+            sort: 'label',
+            sortDirection: 'asc',
+            page: 0,
+            field: ''
+        },
     };
     dataSource: MatTableDataSource<any>;
     filterColumns: string[];
diff --git a/src/frontend/app/administration/connection/sso/sso-administration.component.html b/src/frontend/app/administration/connection/sso/sso-administration.component.html
new file mode 100644
index 00000000000..472a354a3d6
--- /dev/null
+++ b/src/frontend/app/administration/connection/sso/sso-administration.component.html
@@ -0,0 +1,55 @@
+<mat-sidenav-container autosize class="maarch-container">
+    <ng-template #adminMenuTemplate>
+        <mat-nav-list>
+            <a mat-list-item *ngFor="let menu of subMenus" [class.active]="menu.current" [routerLink]="menu.route">
+                <mat-icon color="primary" mat-list-icon [class]="menu.icon"></mat-icon>
+                <p mat-line>
+                    {{menu.label}}
+                </p>
+            </a>
+        </mat-nav-list>
+    </ng-template>
+    <mat-sidenav-content>
+        <div class="bg-head">
+            <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
+                <div class="bg-head-title-label">
+                    <header-left></header-left>
+                </div>
+                <div class="bg-head-title-tool">
+                    <header-right></header-right>
+                </div>
+            </div>
+            <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
+            </div>
+        </div>
+        <div class="container" [class.fullContainer]="appService.getViewMode()">
+            <div class="container-content">
+                <div *ngIf="loading" style="display:flex;height:100%;">
+                    <mat-spinner style="margin:auto;"></mat-spinner>
+                </div>
+                <mat-card *ngIf="!loading" class="card-app-content">
+                    <mat-form-field appearance="outline">
+                        <input matInput [placeholder]="'Url SSO'">
+                    </mat-form-field>
+                    <mat-expansion-panel hideToggle>
+                        <mat-expansion-panel-header>
+                            <mat-panel-title color="primary">
+                                Interfaçage des en-têtes
+                            </mat-panel-title>
+                        </mat-expansion-panel-header>
+                        <div class="row" style="margin:0px;">
+                            <div class="col-md-8">
+                                <mat-form-field *ngFor="let item of mapping">
+                                    <input matInput [(ngModel)]="item.ssoId" [placeholder]="item.maarchId">
+                                </mat-form-field>
+                            </div>
+                            <div class="col-md-4">
+                               
+                            </div>
+                        </div>
+                    </mat-expansion-panel>
+                </mat-card>
+            </div>
+        </div>
+    </mat-sidenav-content>
+</mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/administration/connection/connections-administration.component.scss b/src/frontend/app/administration/connection/sso/sso-administration.component.scss
similarity index 80%
rename from src/frontend/app/administration/connection/connections-administration.component.scss
rename to src/frontend/app/administration/connection/sso/sso-administration.component.scss
index 134cfc86a6c..00d1332cb41 100644
--- a/src/frontend/app/administration/connection/connections-administration.component.scss
+++ b/src/frontend/app/administration/connection/sso/sso-administration.component.scss
@@ -1,4 +1,4 @@
-@import '../../../css/vars.scss';
+@import '../../../../css/vars.scss';
 
 .active, .active:hover , .active:active, .active:focus {
     color: $primary;
diff --git a/src/frontend/app/administration/connection/sso/sso-administration.component.ts b/src/frontend/app/administration/connection/sso/sso-administration.component.ts
new file mode 100644
index 00000000000..a394cf07f4d
--- /dev/null
+++ b/src/frontend/app/administration/connection/sso/sso-administration.component.ts
@@ -0,0 +1,81 @@
+import { HttpClient } from '@angular/common/http';
+import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
+import { MatPaginator } from '@angular/material/paginator';
+import { MatSort } from '@angular/material/sort';
+import { TranslateService } from '@ngx-translate/core';
+import { AppService } from '@service/app.service';
+import { HeaderService } from '@service/header.service';
+import { NotificationService } from '@service/notification/notification.service';
+import { AdministrationService } from '../../administration.service';
+
+@Component({
+    selector: 'app-sso-administration',
+    templateUrl: './sso-administration.component.html',
+    styleUrls: ['./sso-administration.component.scss']
+})
+export class SsoAdministrationComponent implements OnInit {
+
+    loading: boolean = true;
+
+    @ViewChild('adminMenuTemplate', { static: true }) adminMenuTemplate: TemplateRef<any>;
+    @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
+    @ViewChild(MatSort, { static: false }) sort: MatSort;
+
+    subMenus: any[] = [
+        {
+            icon: 'fas fa-users-cog',
+            route: '/administration/sso',
+            label: this.translate.instant('lang.sso'),
+            current: true
+        }
+    ];
+
+    mapping: any[] = [
+        {
+            maarchId: 'userId',
+            ssoId: 'id',
+            separator: null
+        },
+        {
+            maarchId: 'userName',
+            ssoId: 'uid',
+            separator: null
+        },
+        {
+            maarchId: 'email',
+            ssoId: 'codeunite',
+            separator: null
+        },
+        {
+            maarchId: 'groupId',
+            ssoId: 'qualification',
+            separator: ','
+        },
+        {
+            maarchId: 'entityId',
+            ssoId: 'departement_uid',
+            separator: ','
+        },
+    ];
+
+    constructor(
+        public translate: TranslateService,
+        public http: HttpClient,
+        private notify: NotificationService,
+        public appService: AppService,
+        private headerService: HeaderService,
+        private viewContainerRef: ViewContainerRef,
+        public adminService: AdministrationService,
+    ) { }
+
+    ngOnInit(): void {
+        this.headerService.injectInSideBarLeft(this.adminMenuTemplate, this.viewContainerRef, 'adminMenu');
+        this.headerService.setHeader(this.translate.instant('lang.administration') + ' ' + this.translate.instant('lang.ssoConnections'));
+        this.getConnection();
+    }
+
+    getConnection() {
+        this.loading = false;
+    }
+
+}
diff --git a/src/frontend/app/administration/connection/connections-administration.component.html b/src/frontend/app/administration/connection/sso/sso-list-administration.component.html
similarity index 81%
rename from src/frontend/app/administration/connection/connections-administration.component.html
rename to src/frontend/app/administration/connection/sso/sso-list-administration.component.html
index 906fd4e64e0..4b4388ffddb 100644
--- a/src/frontend/app/administration/connection/connections-administration.component.html
+++ b/src/frontend/app/administration/connection/sso/sso-list-administration.component.html
@@ -1,6 +1,6 @@
 <mat-sidenav-container autosize class="maarch-container">
     <ng-template #adminMenuTemplate>
-        <mat-nav-list>
+        <!--<mat-nav-list>
             <h3 mat-subheader>{{'lang.actions' | translate}}</h3>
             <a mat-list-item routerLink="/administration/connections/new">
                 <mat-icon color="primary" mat-list-icon class="fa fa-plus"></mat-icon>
@@ -9,7 +9,7 @@
                 </p>
             </a>
         </mat-nav-list>
-        <mat-divider></mat-divider>
+        <mat-divider></mat-divider>-->
         <mat-nav-list>
             <a mat-list-item *ngFor="let menu of subMenus" [class.active]="menu.current" [routerLink]="menu.route">
                 <mat-icon color="primary" mat-list-icon [class]="menu.icon"></mat-icon>
@@ -37,8 +37,8 @@
                 <div *ngIf="loading" style="display:flex;height:100%;">
                     <mat-spinner style="margin:auto;"></mat-spinner>
                 </div>
-                <mat-card *ngIf="!loading" class="card-app-content">
-                    <div class="row">
+                <mat-card *ngIf="!loading" class="card-app-content"> 
+                    <div class="row">                      
                         <div class="col-md-6 col-xs-6">
                             <mat-form-field>
                                 <input matInput [formControl]="adminService.getFilterField()" placeholder="{{'lang.filterBy' | translate}}">
@@ -65,16 +65,6 @@
                         <ng-container matColumnDef="actions">
                             <mat-header-cell *matHeaderCellDef></mat-header-cell>
                             <mat-cell *matCellDef="let element" style="justify-content: flex-end;">
-                                <button mat-icon-button color="primary"
-                                    *ngIf="element.enabled" [title]="'lang.suspend' | translate"
-                                    (click)="$event.stopPropagation();toggleConnection(element, false)">
-                                    <mat-icon class="fa fa-pause fa-2x" aria-hidden="true"></mat-icon>
-                                </button>
-                                <button mat-icon-button color="accent" *ngIf="!element.enabled"
-                                    [title]="'lang.authorize' | translate"
-                                    (click)="$event.stopPropagation();toggleConnection(element, true)">
-                                    <mat-icon class="fa fa-check fa-2x" aria-hidden="true"></mat-icon>
-                                </button>
                                 <button mat-icon-button color="warn" matTooltip="{{'lang.delete' | translate}}"
                                     (click)="$event.stopPropagation();delete(element)">
                                     <mat-icon class="fa fa-trash-alt fa-2x" aria-hidden="true"></mat-icon>
@@ -83,7 +73,7 @@
                         </ng-container>
                         <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
                         <mat-row *matRowDef="let row; columns: displayedColumns;"
-                            routerLink="/administration/sso/{{row.id}}" style="cursor:pointer;"
+                            routerLink="/administration/connections/sso/{{row.id}}" style="cursor:pointer;"
                             matTooltip="{{'lang.view' | translate}}"></mat-row>
                     </mat-table>
                     <div class="mat-paginator"
diff --git a/src/frontend/app/administration/connection/sso/sso-list-administration.component.scss b/src/frontend/app/administration/connection/sso/sso-list-administration.component.scss
new file mode 100644
index 00000000000..00d1332cb41
--- /dev/null
+++ b/src/frontend/app/administration/connection/sso/sso-list-administration.component.scss
@@ -0,0 +1,7 @@
+@import '../../../../css/vars.scss';
+
+.active, .active:hover , .active:active, .active:focus {
+    color: $primary;
+    border-left: solid 5px $primary;
+    background: rgba($primary, 0.14);
+}
\ No newline at end of file
diff --git a/src/frontend/app/administration/connection/connections-administration.component.ts b/src/frontend/app/administration/connection/sso/sso-list-administration.component.ts
similarity index 72%
rename from src/frontend/app/administration/connection/connections-administration.component.ts
rename to src/frontend/app/administration/connection/sso/sso-list-administration.component.ts
index 5e0a84c2875..a258c3100a9 100644
--- a/src/frontend/app/administration/connection/connections-administration.component.ts
+++ b/src/frontend/app/administration/connection/sso/sso-list-administration.component.ts
@@ -6,16 +6,14 @@ import { TranslateService } from '@ngx-translate/core';
 import { AppService } from '@service/app.service';
 import { HeaderService } from '@service/header.service';
 import { NotificationService } from '@service/notification/notification.service';
-import { of } from 'rxjs';
-import { catchError, tap } from 'rxjs/operators';
-import { AdministrationService } from '../administration.service';
+import { AdministrationService } from '../../administration.service';
 
 @Component({
-    selector: 'app-connections-administration',
-    templateUrl: './connections-administration.component.html',
-    styleUrls: ['./connections-administration.component.scss']
+    selector: 'app-sso-list-administration',
+    templateUrl: './sso-list-administration.component.html',
+    styleUrls: ['./sso-list-administration.component.scss']
 })
-export class ConnectionsAdministrationComponent implements OnInit {
+export class SsoListAdministrationComponent implements OnInit {
 
     loading: boolean = true;
 
@@ -32,9 +30,11 @@ export class ConnectionsAdministrationComponent implements OnInit {
         }
     ];
 
-    displayedColumns = ['id', 'label', 'actions'];
+    displayedColumns = ['id', 'label'];
     filterColumns = ['id', 'label'];
 
+    currentConnection = 1;
+
     connections: any[] = [];
 
     constructor(
@@ -59,17 +59,11 @@ export class ConnectionsAdministrationComponent implements OnInit {
             {
                 id: 1,
                 label: 'Connexion SSO',
-                enabled: true
             },
-            {
-                id: 1,
-                label: 'Connexion SSO2',
-                enabled: false
-            }
         ];
         this.loading = false;
         setTimeout(() => {
-            this.adminService.setDataSource('admin_groups', this.connections, this.sort, this.paginator, this.filterColumns);
+            this.adminService.setDataSource('admin_sso', this.connections, this.sort, this.paginator, this.filterColumns);
         }, 0);
 
         /* this.http.get('../rest/???').pipe(
@@ -77,7 +71,7 @@ export class ConnectionsAdministrationComponent implements OnInit {
                 this.connections =  data;
                 this.loading = false;
                 setTimeout(() => {
-                    this.adminService.setDataSource('admin_groups', this.connections, this.sort, this.paginator, this.filterColumns);
+                    this.adminService.setDataSource('admin_sso', this.connections, this.sort, this.paginator, this.filterColumns);
                 }, 0);
             }),
             catchError((err: any) => {
@@ -87,10 +81,6 @@ export class ConnectionsAdministrationComponent implements OnInit {
         ).subscribe(); */
     }
 
-    toggleConnection(elem: any, state: boolean) {
-
-    }
-
     delete(elem: any) {
 
     }
diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts
index 334d1c78343..876b9beed47 100755
--- a/src/frontend/service/privileges.service.ts
+++ b/src/frontend/service/privileges.service.ts
@@ -309,7 +309,7 @@ export class PrivilegeService {
             'id': 'admin_connections',
             'label': 'lang.connections',
             'comment': 'lang.connectionsDesc',
-            'route': '/administration/connections',
+            'route': '/administration/connections/sso',
             'unit': 'supervision',
             'style': 'fas fa-plug',
             'angular': true,
-- 
GitLab