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