-
-
- {{data.icon}} {{data.title}}
-
+
+
- {{data.icon}} {{data.title}}
{{data.icon}}
-
- {{data.title}}
-
+ {{data.title}}
-
+
-
-
+ = new EventEmitter();
- constructor(private router: Router) {
+ constructor(private router: Router) {}
- }
-
isNotButton(data: MenuItem) {
- return isNullOrUndefined(data.navigateTo)
- && (isNullOrUndefined(data.callback) || data.callback === false)
- && isNullOrUndefined(data.subMenu);
+ return (
+ isNullOrUndefined(data.navigateTo) &&
+ (isNullOrUndefined(data.callback) || data.callback === false) &&
+ isNullOrUndefined(data.subMenu)
+ );
}
isEnable(data: MenuItem) {
if (!isNullOrUndefined(data) && !isNullOrUndefined(data.enable) && data.enable === false) {
@@ -44,28 +42,26 @@ export class TopMenuComponent implements OnInit {
return true;
}
- getPosition(data: string) : string {
+ getPosition(data: string): string {
return `float: ${data}`;
}
- ngOnInit() {
-
- }
+ ngOnInit() {}
onOutUserProperty(): void {
//console.log('onOutUserProperty ==> event...');
this.subMenu = undefined;
}
getClassMenuPosition(): string {
if (isNullOrUndefined(this.subMenuPosition)) {
- return "menu-left";
- }
- return 'menu-' + this.subMenuPosition;
+ return 'menu-left';
+ }
+ return 'menu-' + this.subMenuPosition;
}
- getClassModel(data?:string): string {
+ getClassModel(data?: string): string {
if (isNullOrUndefined(data)) {
- return "";
- }
- return 'model_' + data;
+ return '';
+ }
+ return 'model_' + data;
}
onGeneric(data: MenuItem, event: any): void {
@@ -73,9 +69,9 @@ export class TopMenuComponent implements OnInit {
// check if we need to navigate
if (!isNullOrUndefined(data.navigateTo)) {
// remove in every case the subMenu:
- this.subMenu = undefined
+ this.subMenu = undefined;
this.subMenuPosition = undefined;
- this.router.navigate([ data.navigateTo ]);
+ this.router.navigate([data.navigateTo]);
return;
}
if (!isNullOrUndefined(data.callback) && data.callback === true) {
@@ -105,5 +101,4 @@ export class TopMenuComponent implements OnInit {
this.subMenu = data.subMenu;
this.subMenuPosition = data.position;
}
-
}
diff --git a/front/src/common/component/upload-file/upload-file.html b/front/src/common/component/upload-file/upload-file.html
index 0b0609d..3e5cf69 100644
--- a/front/src/common/component/upload-file/upload-file.html
+++ b/front/src/common/component/upload-file/upload-file.html
@@ -1,11 +1,9 @@
+
-
diff --git a/front/src/common/component/top-menu/top-menu.less b/front/src/common/component/top-menu/top-menu.less
index 5f37a8e..38962fd 100644
--- a/front/src/common/component/top-menu/top-menu.less
+++ b/front/src/common/component/top-menu/top-menu.less
@@ -1,5 +1,3 @@
-
-
.element-pos-left {
z-index: 5;
float: left;
@@ -14,25 +12,24 @@
}
.model_happy {
- color:yellow;
+ color: yellow;
}
.model_disable {
- color:rgb(100, 100, 100);
+ color: rgb(100, 100, 100);
}
.model_error {
- color:darkred;
+ color: darkred;
}
.top {
.sub-menu {
-
position: fixed;
-
- min-width:150px;
- min-height:70px;
-
+
+ min-width: 150px;
+ min-height: 70px;
+
display: block;
overflow: visible;
-
+
box-shadow: none;
flex-direction: column;
flex-wrap: nowrap;
@@ -44,9 +41,9 @@
border: none;
z-index: 300;
box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.6);
-
+
.item {
- display:block;
+ display: block;
float: top;
line-height: 56px;
z-index: 4;
@@ -56,61 +53,61 @@
/*text-transform: uppercase;*/
font-weight: bold;
font-size: 17px;
- width:100%;
+ width: 100%;
}
-
+
.material-icons {
vertical-align: middle;
}
/* Create an Arraw on the top ob the box ... */
- &:after, &:before {
+ &:after,
+ &:before {
bottom: 100%;
right: 13px;
border: solid transparent;
- content: " ";
+ content: ' ';
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
-
+
&:after {
border-color: rgba(136, 183, 213, 0);
border-bottom-color: #263238;
border-width: 15px;
margin-left: -15px;
}
-
}
.menu-left {
- top:75px;
- left:15px;
+ top: 75px;
+ left: 15px;
}
.menu-right {
- top:75px;
- right:15px;
+ top: 75px;
+ right: 15px;
}
-
+
.fill-all {
position: absolute;
top: 0;
left: 0;
- width:100%;
- height:100%;
+ width: 100%;
+ height: 100%;
/*
background-color: #0F0;
*/
- z-index:400;
+ z-index: 400;
}
-
+
.main-menu {
position: fixed;
- top:0px;
- left:0px;
-
+ top: 0px;
+ left: 0px;
+
display: block;
overflow: visible;
-
+
box-shadow: none;
min-height: 56px;
flex-direction: column;
@@ -125,9 +122,9 @@
max-height: 1000px;
z-index: 3;
box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.6);
-
+
.item {
- display:block;
+ display: block;
float: left;
line-height: 56px;
z-index: 4;
@@ -137,18 +134,17 @@
font-weight: bold;
font-size: 17px;
.comment {
- visibility: "hidden";
+ visibility: 'hidden';
}
@media all and (min-width: 700px) {
.comment {
- visibility: "visible";
+ visibility: 'visible';
}
}
-
}
-
+
.inert_element {
- display:block;
+ display: block;
float: left;
line-height: 56px;
z-index: 4;
@@ -160,7 +156,7 @@
}
.ariane {
- display:block;
+ display: block;
float: left;
line-height: 56px;
z-index: 4;
@@ -171,14 +167,14 @@
font-weight: bold;
font-size: 15px;
}
-
+
.material-icons {
vertical-align: middle;
}
-
+
.avatar {
- height:42px;
- width:42px;
+ height: 42px;
+ width: 42px;
border-radius: 50%;
vertical-align: middle;
}
diff --git a/front/src/common/component/top-menu/top-menu.ts b/front/src/common/component/top-menu/top-menu.ts
index 5661034..5e13cf0 100644
--- a/front/src/common/component/top-menu/top-menu.ts
+++ b/front/src/common/component/top-menu/top-menu.ts
@@ -9,8 +9,6 @@ import { Router } from '@angular/router';
import { isNullOrUndefined } from 'common/utils';
import { MenuItem } from 'common/model/menu-item';
-
-
export interface EventOnMenu {
menu: MenuItem;
newWindows: boolean;
@@ -20,7 +18,7 @@ export interface EventOnMenu {
@Component({
selector: 'app-top-menu',
templateUrl: './top-menu.html',
- styleUrls: [ './top-menu.less' ]
+ styleUrls: ['./top-menu.less'],
})
export class TopMenuComponent implements OnInit {
@Input() menu: MenuItem[];
@@ -28,14 +26,14 @@ export class TopMenuComponent implements OnInit {
subMenuPosition: String = undefined;
@Output() callback: EventEmitter
{{data.icon}} {{data.title}}
-
+
-
{{data.icon}}
-
- {{data.title}}
-
+ {{data.title}}
+
+
{{data.icon}} {{data.title}}
-
- {{data.title}}
-
+ {{data.title}}
-
diff --git a/front/src/common/popin/delete-confirm/delete-confirm.less b/front/src/common/popin/delete-confirm/delete-confirm.less
index 95fc9fd..750695e 100644
--- a/front/src/common/popin/delete-confirm/delete-confirm.less
+++ b/front/src/common/popin/delete-confirm/delete-confirm.less
@@ -1,15 +1,13 @@
-
-
.expand {
width: 100%;
input {
width: 100%;
- };
+ }
div {
width: 100%;
- };
+ }
textarea {
width: 100%;
- };
- text-align:center;
+ }
+ text-align: center;
}
diff --git a/front/src/common/popin/delete-confirm/delete-confirm.ts b/front/src/common/popin/delete-confirm/delete-confirm.ts
index 756967b..b813c17 100644
--- a/front/src/common/popin/delete-confirm/delete-confirm.ts
+++ b/front/src/common/popin/delete-confirm/delete-confirm.ts
@@ -11,7 +11,7 @@ import { PopInService } from 'common/service';
@Component({
selector: 'delete-confirm',
templateUrl: './delete-confirm.html',
- styleUrls: [ './delete-confirm.less' ]
+ styleUrls: ['./delete-confirm.less'],
})
export class PopInDeleteConfirm implements OnInit {
@Input() comment: string = null;
@@ -21,22 +21,16 @@ export class PopInDeleteConfirm implements OnInit {
public closeButtonTitle: string = 'Cancel';
public validateButtonTitle: string = 'Validate';
- constructor(private popInService: PopInService) {
+ constructor(private popInService: PopInService) {}
- }
+ OnDestroy() {}
- OnDestroy() {
-
- }
-
- ngOnInit() {
-
- }
+ ngOnInit() {}
eventPopUp(_event: string): void {
- console.log(`GET event: ${ _event}`);
+ console.log(`GET event: ${_event}`);
this.popInService.close('popin-delete-confirm');
- if(_event === 'validate') {
+ if (_event === 'validate') {
this.callback.emit(null);
}
}
diff --git a/front/src/common/popin/index.ts b/front/src/common/popin/index.ts
index ba9ced4..e03a6b6 100644
--- a/front/src/common/popin/index.ts
+++ b/front/src/common/popin/index.ts
@@ -1,8 +1,4 @@
-import { PopInDeleteConfirm } from "./delete-confirm/delete-confirm";
-import { PopInUploadProgress } from "./upload-progress/upload-progress";
+import { PopInDeleteConfirm } from './delete-confirm/delete-confirm';
+import { PopInUploadProgress } from './upload-progress/upload-progress';
-
-export {
- PopInDeleteConfirm,
- PopInUploadProgress,
-}
\ No newline at end of file
+export { PopInDeleteConfirm, PopInUploadProgress };
diff --git a/front/src/common/popin/upload-progress/upload-progress.html b/front/src/common/popin/upload-progress/upload-progress.html
index d946de8..dd86eb1 100644
--- a/front/src/common/popin/upload-progress/upload-progress.html
+++ b/front/src/common/popin/upload-progress/upload-progress.html
@@ -1,31 +1,34 @@
-
+
diff --git a/front/src/common/component/upload-file/upload-file.less b/front/src/common/component/upload-file/upload-file.less
index 359915e..6449880 100644
--- a/front/src/common/component/upload-file/upload-file.less
+++ b/front/src/common/component/upload-file/upload-file.less
@@ -6,7 +6,7 @@
height: 200px;
width: 80%;
margin: 20px auto;
- border: 2px dashed #1C8ADB;
+ border: 2px dashed #1c8adb;
border-radius: 10px;
}
@@ -34,6 +34,6 @@
cursor: pointer;
}
-.files-list .delete-file img{
- width:30px;
+.files-list .delete-file img {
+ width: 30px;
}
diff --git a/front/src/common/component/upload-file/upload-file.ts b/front/src/common/component/upload-file/upload-file.ts
index cbadc3c..169befe 100644
--- a/front/src/common/component/upload-file/upload-file.ts
+++ b/front/src/common/component/upload-file/upload-file.ts
@@ -9,12 +9,12 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-upload-file',
templateUrl: './upload-file.html',
- styleUrls: [ './upload-file.less' ]
+ styleUrls: ['./upload-file.less'],
})
export class UploadFileComponent {
files: any = [];
uploadFile(event) {
- for(let index = 0; index < event.length; index++) {
+ for (let index = 0; index < event.length; index++) {
const element = event[index];
this.files.push(element.name);
}
diff --git a/front/src/common/model/index.ts b/front/src/common/model/index.ts
index 9c10c56..4a17f73 100644
--- a/front/src/common/model/index.ts
+++ b/front/src/common/model/index.ts
@@ -1,8 +1,4 @@
-import { isMenuItem, isMenuPosition, MenuItem, MenuPosition } from "./menu-item";
-import { NodeData, isNodeData } from "./node";
+import { isMenuItem, isMenuPosition, MenuItem, MenuPosition } from './menu-item';
+import { NodeData, isNodeData } from './node';
-
-export {
- NodeData, isNodeData,
- MenuPosition, isMenuPosition, MenuItem, isMenuItem,
-}
+export { NodeData, isNodeData, MenuPosition, isMenuPosition, MenuItem, isMenuItem };
diff --git a/front/src/common/model/menu-item.ts b/front/src/common/model/menu-item.ts
index 6ada30b..f69da0b 100644
--- a/front/src/common/model/menu-item.ts
+++ b/front/src/common/model/menu-item.ts
@@ -1,71 +1,67 @@
-import { isObject, isOptionalOf, isString, isNullOrUndefined, isOptionalArrayOf } from "common/utils";
+import { isObject, isOptionalOf, isString, isNullOrUndefined, isOptionalArrayOf, isInArray } from 'common/utils';
export enum MenuPosition {
- LEFT = "left",
- RIGHT = "right",
- CENTER = "none",
+ LEFT = 'left',
+ RIGHT = 'right',
+ CENTER = 'none',
}
export function isMenuPosition(data: any): data is MenuPosition {
- return data === "left"
- || data === "right"
- || data === "none";
-
+ return isInArray(data, ['left', 'right', 'none']);
}
export interface MenuItem {
- // Position of the menue element
- position: MenuPosition;
- // Hover help
- hover?: string;
- // Icon of the menue (need to be a meterial-icon name
- icon?: string;
- // If we want to display an image instead of an icon
- image?: string;
- // Displayed Title
- title: string;
- // Jump Link (If undefined: it is considered as text and not a button)
- model?: string;
- // Jump Link (If undefined: it is considered as text and not a button)
- navigateTo?: string;
- // if it request a callbak with the curent element: (not compatible with the previous)
- callback?: boolean;
- // Other data that want to be set by the user
- otherData?: any;
- // Enable or not the elemnt
- enable?: boolean;
- // Menu model For a subList of elements
- subMenu?: MenuItem[];
-};
-
+ // Position of the menue element
+ position: MenuPosition;
+ // Hover help
+ hover?: string;
+ // Icon of the menue (need to be a meterial-icon name
+ icon?: string;
+ // Displayed Title
+ image?: string;
+ // Displayed Title
+ title: string;
+ // Model of the display:
+ model?: string;
+ // Jump Link (If undefined: it is considered as text and not a button)
+ navigateTo?: string;
+ // Menu model For a subList of elements
+ callback?: boolean;
+ // Other data that want to be set by the user
+ otherData?: any;
+ // Menu model For a subList of elements
+ enable?: boolean;
+ // Menu model For a subList of elements
+ subMenu?: MenuItem[];
+}
export function isMenuItem(data: any): data is MenuItem {
- if (isNullOrUndefined(data)) {
- return false;
- }
- if (!isObject(data)) {
- return false;
- }
- if (!isMenuPosition(data.position)) {
- return false;
- }
- if (!isOptionalOf(data.hover, isString)) {
- return false;
- }
- if (!isOptionalOf(data.icon, isString)) {
- return false;
- }
- if (!isOptionalOf(data.image, isString)) {
- return false;
- }
- if (!isString(data.title)) {
- return false;
- }
- if (!isOptionalOf(data.navigateTo, isString)) {
- return false;
- }
- if (!isOptionalArrayOf(data.subMenu, isMenuItem)) {
- return false;
- }
- return true;
+ if (isNullOrUndefined(data)) {
+ return false;
+ }
+ if (!isObject(data)) {
+ return false;
+ }
+ if (!isMenuPosition(data.position)) {
+ return false;
+ }
+ if (!isOptionalOf(data.hover, isString)) {
+ return false;
+ }
+ if (!isOptionalOf(data.icon, isString)) {
+ return false;
+ }
+ if (!isOptionalOf(data.image, isString)) {
+ return false;
+ }
+ if (!isString(data.title)) {
+ return false;
+ }
+ if (!isOptionalOf(data.navigateTo, isString)) {
+ return false;
+ }
+ if (!isOptionalArrayOf(data.subMenu, isMenuItem)) {
+ return false;
+ }
+ return true;
}
diff --git a/front/src/common/model/node.ts b/front/src/common/model/node.ts
index ca9657e..90c6360 100644
--- a/front/src/common/model/node.ts
+++ b/front/src/common/model/node.ts
@@ -1,34 +1,31 @@
-import { isArrayOf, isNumberFinite, isObject, isOptionalOf, isOptionalArrayOf, isString } from "common/utils";
-
-
+import { isArrayOf, isNumberFinite, isObject, isOptionalOf, isOptionalArrayOf, isString } from 'common/utils';
export interface NodeData {
- id: number;
- name: string;
- description?: string;
- parentId?: number;
- covers?: number[];
-};
-
+ id: number;
+ name: string;
+ description?: string;
+ parentId?: number;
+ covers?: number[];
+}
export function isNodeData(data: any): data is NodeData {
- if (!isObject(data)) {
- return false;
- }
- if (!isNumberFinite(data.id)) {
- return false;
- }
- if (!isString(data.name)) {
- return false;
- }
- if (!isOptionalOf(data.description, isString)) {
- return false;
- }
- if (!isOptionalOf(data.parentId, isNumberFinite)) {
- return false;
- }
- if (!isOptionalArrayOf(data.cover, isNumberFinite)) {
- return false;
- }
- return true;
-}
\ No newline at end of file
+ if (!isObject(data)) {
+ return false;
+ }
+ if (!isNumberFinite(data.id)) {
+ return false;
+ }
+ if (!isString(data.name)) {
+ return false;
+ }
+ if (!isOptionalOf(data.description, isString)) {
+ return false;
+ }
+ if (!isOptionalOf(data.parentId, isNumberFinite)) {
+ return false;
+ }
+ if (!isOptionalArrayOf(data.cover, isNumberFinite)) {
+ return false;
+ }
+ return true;
+}
diff --git a/front/src/common/popin/delete-confirm/delete-confirm.html b/front/src/common/popin/delete-confirm/delete-confirm.html
index 21d39ae..c9de0d2 100644
--- a/front/src/common/popin/delete-confirm/delete-confirm.html
+++ b/front/src/common/popin/delete-confirm/delete-confirm.html
@@ -1,16 +1,17 @@
+
-
+
- // DELETE //
-
+ // DELETE //
-
\ No newline at end of file
+{{ file }}
-
-
+
-
\ No newline at end of file
+
-
+
-
+
\ No newline at end of file
+
diff --git a/front/src/common/scene/home-out/home-out.less b/front/src/common/scene/home-out/home-out.less
index 6e566e1..83d4b58 100644
--- a/front/src/common/scene/home-out/home-out.less
+++ b/front/src/common/scene/home-out/home-out.less
@@ -1,25 +1,24 @@
-
-.full-mode{
- width:100%;
- height:100%;
- top:0;
- left:0;
- margin:0;
- padding:0;
- border:0;
- float:left;
- display:block;
+.full-mode {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ float: left;
+ display: block;
}
.centered {
- position:relative;
- max-width:75%;
+ position: relative;
+ max-width: 75%;
padding: 16px 32px 16px 32px;
-
+
top: 50%;
- transform: ~"translate(0, -50%)";
+ transform: ~'translate(0, -50%)';
font-size: 30px;
-
+
font-weight: 600;
text-align: center;
line-height: 200%;
@@ -32,7 +31,7 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #000000;
+ text-shadow: 0px 0px 4px #000000;
color: rgb(160, 44, 44);
i {
font-size: 55px;
@@ -45,6 +44,6 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #07213a;
+ text-shadow: 0px 0px 4px #07213a;
color: white;
}
diff --git a/front/src/common/scene/home-out/home-out.ts b/front/src/common/scene/home-out/home-out.ts
index 40367f2..abe83d9 100644
--- a/front/src/common/scene/home-out/home-out.ts
+++ b/front/src/common/scene/home-out/home-out.ts
@@ -9,8 +9,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-home-out',
templateUrl: './home-out.html',
- styleUrls: [ './home-out.less' ]
+ styleUrls: ['./home-out.less'],
})
export class HomeOutScene {
- constructor() { }
+ constructor() {}
}
diff --git a/front/src/common/scene/index.ts b/front/src/common/scene/index.ts
index 0421ef5..441c8a3 100644
--- a/front/src/common/scene/index.ts
+++ b/front/src/common/scene/index.ts
@@ -1,17 +1,8 @@
-import { ErrorViewerScene } from "./error-viewer/error-viewer";
-import { ForbiddenScene } from "./forbidden/forbidden";
-import { SsoScene } from "./sso/sso";
-//import { UploadScene } from "../../app/scene/upload/upload";
-import { HomeOutScene } from "./home-out/home-out";
-import { NotFound404Scene } from "./404/404";
-
-export {
- ErrorViewerScene,
- SsoScene,
- //UploadScene,
- ForbiddenScene,
- HomeOutScene,
- NotFound404Scene,
-};
-
+//import { ErrorViewerScene } from "./error-viewer/error-viewer";
+import { ErrorViewerScene } from './error-viewer/error-viewer';
+import { ForbiddenScene } from './forbidden/forbidden';
+import { SsoScene } from './sso/sso';
+import { HomeOutScene } from './home-out/home-out';
+import { NotFound404Scene } from './404/404';
+export { ErrorViewerScene, SsoScene, ForbiddenScene, HomeOutScene, NotFound404Scene };
diff --git a/front/src/common/scene/sso/sso.html b/front/src/common/scene/sso/sso.html
index c8b11a5..a2f06f7 100644
--- a/front/src/common/scene/sso/sso.html
+++ b/front/src/common/scene/sso/sso.html
@@ -4,7 +4,7 @@
-
- {{progress}}%
+ {{progress}}%
-
- +
\ No newline at end of file
+
diff --git a/front/src/common/scene/forbidden/forbidden.less b/front/src/common/scene/forbidden/forbidden.less
index 9a6a44f..15134f8 100644
--- a/front/src/common/scene/forbidden/forbidden.less
+++ b/front/src/common/scene/forbidden/forbidden.less
@@ -1,26 +1,25 @@
-
-.full-mode{
- width:100%;
- height:100%;
- top:0;
- left:0;
- margin:0;
- padding:0;
- border:0;
- float:left;
- display:block;
+.full-mode {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ float: left;
+ display: block;
}
.centered {
- position:relative;
- max-width:500px;
+ position: relative;
+ max-width: 500px;
padding: 16px 32px 16px 32px;
-
+
top: 50%;
left: 50%;
- transform: ~"translate(-50%, -50%)";
+ transform: ~'translate(-50%, -50%)';
font-size: 30px;
-
+
font-weight: 600;
text-align: left;
line-height: 200%;
@@ -33,7 +32,7 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #000000;
+ text-shadow: 0px 0px 4px #000000;
color: rgb(160, 44, 44);
i {
font-size: 55px;
@@ -46,6 +45,6 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #07213a;
+ text-shadow: 0px 0px 4px #07213a;
color: white;
}
diff --git a/front/src/common/scene/forbidden/forbidden.ts b/front/src/common/scene/forbidden/forbidden.ts
index 67b3b57..fab7309 100644
--- a/front/src/common/scene/forbidden/forbidden.ts
+++ b/front/src/common/scene/forbidden/forbidden.ts
@@ -9,8 +9,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-forbidden',
templateUrl: './forbidden.html',
- styleUrls: [ './forbidden.less' ]
+ styleUrls: ['./forbidden.less'],
})
export class ForbiddenScene {
- constructor() { }
+ constructor() {}
}
diff --git a/front/src/common/scene/home-out/home-out.html b/front/src/common/scene/home-out/home-out.html
index 8be721f..7b3feed 100644
--- a/front/src/common/scene/home-out/home-out.html
+++ b/front/src/common/scene/home-out/home-out.html
@@ -1,6 +1,8 @@
- +
+
+
- +
+
-
\ No newline at end of file
+
diff --git a/front/src/common/scene/404/404.less b/front/src/common/scene/404/404.less
index 6e566e1..83d4b58 100644
--- a/front/src/common/scene/404/404.less
+++ b/front/src/common/scene/404/404.less
@@ -1,25 +1,24 @@
-
-.full-mode{
- width:100%;
- height:100%;
- top:0;
- left:0;
- margin:0;
- padding:0;
- border:0;
- float:left;
- display:block;
+.full-mode {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ float: left;
+ display: block;
}
.centered {
- position:relative;
- max-width:75%;
+ position: relative;
+ max-width: 75%;
padding: 16px 32px 16px 32px;
-
+
top: 50%;
- transform: ~"translate(0, -50%)";
+ transform: ~'translate(0, -50%)';
font-size: 30px;
-
+
font-weight: 600;
text-align: center;
line-height: 200%;
@@ -32,7 +31,7 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #000000;
+ text-shadow: 0px 0px 4px #000000;
color: rgb(160, 44, 44);
i {
font-size: 55px;
@@ -45,6 +44,6 @@
background-position: 0% 50%;
padding: 0 0 0 58px;
margin: 17px 0 17px 0;
- text-shadow:0px 0px 4px #07213a;
+ text-shadow: 0px 0px 4px #07213a;
color: white;
}
diff --git a/front/src/common/scene/404/404.ts b/front/src/common/scene/404/404.ts
index 601f188..a909a88 100644
--- a/front/src/common/scene/404/404.ts
+++ b/front/src/common/scene/404/404.ts
@@ -9,8 +9,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-404-not-found',
templateUrl: './404.html',
- styleUrls: [ './404.less' ]
+ styleUrls: ['./404.less'],
})
export class NotFound404Scene {
- constructor() { }
+ constructor() {}
}
diff --git a/front/src/common/scene/error-viewer/error-viewer.html b/front/src/common/scene/error-viewer/error-viewer.html
index e571939..d60f6a7 100644
--- a/front/src/common/scene/error-viewer/error-viewer.html
+++ b/front/src/common/scene/error-viewer/error-viewer.html
@@ -1,3 +1 @@
-
-
+
diff --git a/front/src/common/popin/upload-progress/upload-progress.less b/front/src/common/popin/upload-progress/upload-progress.less
index ddf5285..bbc46cd 100644
--- a/front/src/common/popin/upload-progress/upload-progress.less
+++ b/front/src/common/popin/upload-progress/upload-progress.less
@@ -1,23 +1,21 @@
-
-
.expand {
width: 100%;
input {
width: 100%;
- };
+ }
textarea {
width: 100%;
- };
+ }
}
.progress-back {
- color:#000!important;
- background-color:#f1f1f1!important;
- border-radius: 3px;
+ color: #000 !important;
+ background-color: #f1f1f1 !important;
+ border-radius: 3px;
}
.progress-bar {
- color:#000000!important;
- background-color:#4CAF50!important;
- border-radius: 3px;
+ color: #000000 !important;
+ background-color: #4caf50 !important;
+ border-radius: 3px;
}
diff --git a/front/src/common/popin/upload-progress/upload-progress.ts b/front/src/common/popin/upload-progress/upload-progress.ts
index 18da1d8..54db79a 100644
--- a/front/src/common/popin/upload-progress/upload-progress.ts
+++ b/front/src/common/popin/upload-progress/upload-progress.ts
@@ -12,7 +12,7 @@ import { PopInService } from 'common/service';
@Component({
selector: 'upload-progress',
templateUrl: './upload-progress.html',
- styleUrls: [ './upload-progress.less' ]
+ styleUrls: ['./upload-progress.less'],
})
export class PopInUploadProgress implements OnInit {
@Input() mediaTitle: string = '';
@@ -26,37 +26,28 @@ export class PopInUploadProgress implements OnInit {
public uploadDisplay: string = '';
public sizeDisplay: string = '';
public progress: number = 0;
- constructor(private router: Router,
- private popInService: PopInService) {
-
- }
- OnDestroy() {
-
- }
- ngOnInit() {
-
- }
+ constructor(private router: Router, private popInService: PopInService) {}
+ OnDestroy() {}
+ ngOnInit() {}
eventPopUp(_event: string): void {
- console.log(`GET event: ${ _event}`);
+ console.log(`GET event: ${_event}`);
this.popInService.close('popin-upload-progress');
}
- updateNeedSend():void {
+ updateNeedSend(): void {}
+ limit3(count: number): string {
+ if (count >= 1000) {
+ return `${count}`;
+ }
+ if (count >= 100) {
+ return ` ${count}`;
+ }
+ if (count >= 10) {
+ return ` ${count}`;
+ }
+ return ` ${count}`;
}
-
- limit3(count:number):string {
- if(count >= 1000) {
- return `${ count}`;
- }
- if(count >= 100) {
- return ` ${ count}`;
- }
- if(count >= 10) {
- return ` ${ count}`;
- }
- return ` ${ count}`;
- }
- convertInHuman(countIn:number):string {
+ convertInHuman(countIn: number): string {
let count = countIn;
let tera = Math.trunc(count / (1024 * 1024 * 1024 * 1024));
count = count - tera * 1024 * 1024 * 1024 * 1024;
@@ -67,34 +58,34 @@ export class PopInUploadProgress implements OnInit {
let kilo = Math.trunc(count / 1024);
count = count - kilo * 1024;
let out = '';
- if(out.length !== 0 || tera !== 0) {
- out = `${out } ${ this.limit3(tera) }T`;
+ if (out.length !== 0 || tera !== 0) {
+ out = `${out} ${this.limit3(tera)}T`;
}
- if(out.length !== 0 || giga !== 0) {
- out = `${out } ${ this.limit3(giga) }G`;
+ if (out.length !== 0 || giga !== 0) {
+ out = `${out} ${this.limit3(giga)}G`;
}
- if(out.length !== 0 || mega !== 0) {
- out = `${out } ${ this.limit3(mega) }M`;
+ if (out.length !== 0 || mega !== 0) {
+ out = `${out} ${this.limit3(mega)}M`;
}
- if(out.length !== 0 || kilo !== 0) {
- out = `${out } ${ this.limit3(kilo) }k`;
+ if (out.length !== 0 || kilo !== 0) {
+ out = `${out} ${this.limit3(kilo)}k`;
}
- if(out.length !== 0 || count !== 0) {
- out = `${out } ${ this.limit3(count) }B`;
+ if (out.length !== 0 || count !== 0) {
+ out = `${out} ${this.limit3(count)}B`;
}
return out;
}
ngOnChanges(changes: SimpleChanges) {
//console.log(`Upload progress event : ${JSON.stringify(changes)}`);
- this.progress = Math.trunc(this.mediaUploaded * 100 / this.mediaSize);
+ this.progress = Math.trunc((this.mediaUploaded * 100) / this.mediaSize);
this.uploadDisplay = this.convertInHuman(this.mediaUploaded);
this.sizeDisplay = this.convertInHuman(this.mediaSize);
- if(this.error === null && this.result === null) {
+ if (this.error === null && this.result === null) {
this.closeButtonTitle = 'Abort';
this.otherButtonTitle = null;
this.validateButtonTitle = null;
- } else if(this.result === null) {
+ } else if (this.result === null) {
this.closeButtonTitle = null;
this.otherButtonTitle = 'Close';
this.validateButtonTitle = null;
@@ -106,7 +97,6 @@ export class PopInUploadProgress implements OnInit {
}
}
-
export class UploadProgress {
labelMediaTitle: string = '';
mediaSendSize: number = 0;
diff --git a/front/src/common/scene/404/404.html b/front/src/common/scene/404/404.html
index aabf82e..01f6d2c 100644
--- a/front/src/common/scene/404/404.html
+++ b/front/src/common/scene/404/404.html
@@ -1,6 +1,8 @@
+
+
-
-
+
\ No newline at end of file
++
+
-
-
+
-
+
+
- error-viewer works! -
+error-viewer works!
diff --git a/front/src/common/scene/error-viewer/error-viewer.ts b/front/src/common/scene/error-viewer/error-viewer.ts index e798a66..6885730 100644 --- a/front/src/common/scene/error-viewer/error-viewer.ts +++ b/front/src/common/scene/error-viewer/error-viewer.ts @@ -10,13 +10,10 @@ import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'app-error-viewer', templateUrl: './error-viewer.html', - styleUrls: [ './error-viewer.less' ] + styleUrls: ['./error-viewer.less'], }) export class ErrorViewerScene implements OnInit { - constructor(private route: ActivatedRoute) { } + constructor(private route: ActivatedRoute) {} - ngOnInit() { - - } + ngOnInit() {} } - diff --git a/front/src/common/scene/forbidden/forbidden.html b/front/src/common/scene/forbidden/forbidden.html index f0ad92f..1401ec6 100644 --- a/front/src/common/scene/forbidden/forbidden.html +++ b/front/src/common/scene/forbidden/forbidden.html @@ -1,6 +1,10 @@
-
-
+
-
+
+
+
+
+
-
+
-
+
+
-
+
@@ -18,10 +18,14 @@
-
+
- {
let self = this;
//console.log(`Try to get DB '${ name }'`);
- if( !isNullOrUndefined(this.bdd[name]) ) {
+ if (!isNullOrUndefined(this.bdd[name])) {
return new Promise((resolve, reject) => {
resolve(self.bdd[name]);
});
}
//console.log(`get DB: ?? ${ name } ??`);
- if(isNullOrUndefined(this.bddPomise[name])) {
+ if (isNullOrUndefined(this.bddPomise[name])) {
this.bddPomise[name] = [];
// Try to load Local Data (storage)
let retriveBDDString = null;
- if(this.useLocalStorage === true) {
+ if (this.useLocalStorage === true) {
localStorage.getItem(this.baseLocalStorageName + name);
}
- if(retriveBDDString !== null) {
+ if (retriveBDDString !== null) {
//console.log(`retrive local bdd string (${ name })= ${ retriveBDDString}`);
let retriveBDD = JSON.parse(retriveBDDString);
//console.log(`retrive local bdd (${ name })= ${ retriveBDD}`);
let retriveBDDTmp = new DataInterface(name, retriveBDD);
self.bdd[name] = retriveBDDTmp;
- for(let iii = 0; iii < self.bddPomise[name].length; iii++) {
+ for (let iii = 0; iii < self.bddPomise[name].length; iii++) {
self.bddPomise[name][iii].resolve(self.bdd[name]);
}
// brut force update of the BDD : TODO optimise it later ...
//console.log(`Update BDD (${ name })`);
- self.http.getSpecific(name)
- .then((response) => {
+ self.http
+ .getSpecific(name)
+ .then(response => {
//console.log(`end download DB: ==> ${ name } ${ response.length}`);
self.bdd[name] = new DataInterface(name, response);
localStorage.setItem(self.baseLocalStorageName + name, JSON.stringify(self.bdd[name].bdd));
- }).catch((response) => {
- console.log(`[E] ${ self.constructor.name }: cant not get data from remote server: ${ name}`);
+ })
+ .catch(response => {
+ console.log(`[E] ${self.constructor.name}: cant not get data from remote server: ${name}`);
});
} else {
//console.log(`Download BDD (${ name })`);
return new Promise((resolve, reject) => {
- self.http.getSpecific(name)
- .then((response) => {
+ self.http
+ .getSpecific(name)
+ .then(response => {
//console.log(`end download DB: ==> ${ name } ${ response.length}`);// + " " + JSON.stringify(response).length);
self.bdd[name] = new DataInterface(name, response);
- if(self.useLocalStorage === true) {
- localStorage.setItem(self.baseLocalStorageName + name, JSON.stringify(self.bdd[name].bdd));
+ if (self.useLocalStorage === true) {
+ localStorage.setItem(
+ self.baseLocalStorageName + name,
+ JSON.stringify(self.bdd[name].bdd)
+ );
}
- for(let iii = 0; iii < self.bddPomise[name].length; iii++) {
+ for (let iii = 0; iii < self.bddPomise[name].length; iii++) {
self.bddPomise[name][iii].resolve(self.bdd[name]);
}
resolve(self.bdd[name]);
- }).catch((response) => {
- console.log(`[E] ${ self.constructor.name }: can not get data from remote server: ${ name}`);
- for(let iii = 0; iii < self.bddPomise[name].length; iii++) {
+ })
+ .catch(response => {
+ console.log(`[E] ${self.constructor.name}: can not get data from remote server: ${name}`);
+ for (let iii = 0; iii < self.bddPomise[name].length; iii++) {
self.bddPomise[name][iii].reject(response);
}
reject(response);
@@ -145,7 +155,7 @@ export class BddService {
}
}
return new Promise((resolve, reject) => {
- if(!isNullOrUndefined(self.bdd[name])) {
+ if (!isNullOrUndefined(self.bdd[name])) {
resolve(self.bdd[name]);
return;
}
@@ -153,4 +163,3 @@ export class BddService {
});
}
}
-
diff --git a/front/src/common/service/cookies.ts b/front/src/common/service/cookies.ts
index 74feed9..075b126 100644
--- a/front/src/common/service/cookies.ts
+++ b/front/src/common/service/cookies.ts
@@ -4,44 +4,39 @@
* @license PROPRIETARY (see license file)
*/
- import { Injectable } from '@angular/core';
+import { Injectable } from '@angular/core';
- @Injectable()
- export class CookiesService {
-
- constructor() {
-
- }
-
- set(cname: string, cvalue: string, exdays: number): void {
- if(this.get(cname) !== '') {
+@Injectable()
+export class CookiesService {
+ constructor() {}
+
+ set(cname: string, cvalue: string, exdays: number): void {
+ if (this.get(cname) !== '') {
// reset previous cookies...
- document.cookie = `${cname }=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
+ document.cookie = `${cname}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
}
let ddd = new Date();
ddd.setTime(ddd.getTime() + exdays * 24 * 60 * 60 * 1000);
let expires = `expires=${ddd.toUTCString()}`;
- document.cookie = `${cname }=${ cvalue };${ expires };path=/`;
+ document.cookie = `${cname}=${cvalue};${expires};path=/`;
}
-
- remove(cname: string) : void {
+
+ remove(cname: string): void {
this.set(cname, '', 0);
- }
-
- get(cname: string) : string | undefined {
- let name = `${cname }=`;
+ }
+
+ get(cname: string): string | undefined {
+ let name = `${cname}=`;
let coolies = document.cookie.split(';');
- for(let iii = 0; iii < coolies.length; iii++) {
+ for (let iii = 0; iii < coolies.length; iii++) {
let ccc = coolies[iii];
- while(ccc.charAt(0) === ' ') {
+ while (ccc.charAt(0) === ' ') {
ccc = ccc.substring(1);
}
- if(ccc.indexOf(name) === 0) {
+ if (ccc.indexOf(name) === 0) {
return ccc.substring(name.length, ccc.length);
}
}
return '';
}
- }
-
-
+}
diff --git a/front/src/common/service/http-wrapper.ts b/front/src/common/service/http-wrapper.ts
index d951d82..e42b25f 100644
--- a/front/src/common/service/http-wrapper.ts
+++ b/front/src/common/service/http-wrapper.ts
@@ -13,28 +13,28 @@ import { SessionService } from './session';
import { isArrayOfs, isBoolean, isNullOrUndefined, isNumber, isString } from 'common/utils';
export enum HTTPRequestModel {
- POST = "POST",
- GET = "GET",
- PUT = "PUT",
- DELETE = "DELETE",
- PATCH = "PATCH",
+ POST = 'POST',
+ GET = 'GET',
+ PUT = 'PUT',
+ DELETE = 'DELETE',
+ PATCH = 'PATCH',
}
export enum HTTPMimeType {
- ALL = "*/*",
- JSON = "application/json",
- OCTET_STREAM = "application/octet-stream",
- IMAGE = "image/*",
- IMAGE_JPEG = "image/jpeg",
- IMAGE_PNG = "image/png",
+ ALL = '*/*',
+ JSON = 'application/json',
+ OCTET_STREAM = 'application/octet-stream',
+ IMAGE = 'image/*',
+ IMAGE_JPEG = 'image/jpeg',
+ IMAGE_PNG = 'image/png',
}
-export type UrlPath = string | boolean | number | (string|boolean|number)[];
-export type ProgressCallback = (count: number, total:number) => void;
+export type UrlPath = string | boolean | number | (string | boolean | number)[];
+export type ProgressCallback = (count: number, total: number) => void;
export interface HTTPRequest {
server?: string;
endPoint: UrlPath;
- requestType: HTTPRequestModel ;
+ requestType: HTTPRequestModel;
accept: HTTPMimeType;
contentType: HTTPMimeType;
params?: object;
@@ -46,8 +46,8 @@ export interface HTTPRequest {
}
export interface ModelResponseHttp {
- status: number,
- data: any,
+ status: number;
+ data: any;
}
/**
@@ -55,43 +55,40 @@ export interface ModelResponseHttp {
*/
@Injectable()
export class HttpWrapperService {
- private displayReturn:boolean = false;
- constructor(private http: HttpClient,
- private session: SessionService) {
+ private displayReturn: boolean = false;
+ constructor(private http: HttpClient, private session: SessionService) { }
- }
-
- addTokenIfNeeded(headerOption:any): any {
+ addTokenIfNeeded(headerOption: any): any {
const token = this.session.getToken();
- if(!isNullOrUndefined(token)) {
- if(headerOption.Authorization === undefined) {
+ if (!isNullOrUndefined(token)) {
+ if (headerOption.Authorization === undefined) {
headerOption.Authorization = `Yota ${token}`;
}
}
return headerOption;
}
- request(properties: HTTPRequest) : Promise {
- //uriRest:string, headerOption:any, params:any): Promise<{status:number, data:any}> {
- //console.log(`-------------------------------------------------------\nHTTP-wrapper GET '${ properties.endPoint }'\n\t\tparams=${ JSON.stringify(properties, null, 2)}`);
-
- let connectionAdresse = this.createRESTCall2({
- server: properties.server,
- api: properties.endPoint,
- inputOptions: properties.params,
- });
+ request(properties: HTTPRequest): Promise {
+ let connectionAddresses = this.createRESTCall2({
+ server: properties.server,
+ api: properties.endPoint,
+ inputOptions: properties.params,
+ });
let headers: any = {
- 'Accept': properties.accept,
+ Accept: properties.accept,
//'Content-Type': properties.contentType,
- }
+ };
if (properties.authorization !== undefined && properties.authorization !== null) {
headers['Authorization'] = properties.authorization;
}
if (properties.requestType !== HTTPRequestModel.GET) {
headers['Content-Type'] = properties.contentType;
}
- //console.log(`disble tocken : ${JSON.stringify(properties)} properties.disableTocken=${properties.disableTocken}`);
- if (properties.disableTocken === undefined || properties.disableTocken === null || properties.disableTocken === false) {
+ if (
+ properties.disableTocken === undefined ||
+ properties.disableTocken === null ||
+ properties.disableTocken === false
+ ) {
headers = this.addTokenIfNeeded(headers);
}
//console.log(`header: ${JSON.stringify(headers)}`);
@@ -99,49 +96,61 @@ export class HttpWrapperService {
if (properties.contentType === HTTPMimeType.JSON) {
body = JSON.stringify(properties.body);
}
- const result = fetch(connectionAdresse, {
+ console.log(`Call ${connectionAddresses}`)
+ const result = fetch(connectionAddresses, {
method: properties.requestType,
headers,
- body
- })
- return result;
- };
-
-
- requestJson(properties: HTTPRequest) : Promise {
- return new Promise((resolve, reject) => {
- this.request(properties).then((response: Response) => {
- if(response.status >= 200 && response.status <= 299) {
- const contentType = response.headers.get('Content-Type');
- if (contentType === HTTPMimeType.JSON) {
- response.json().then((value:any) => {
- //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
- resolve({ status:response.status, data:value });
- }).catch((reason:any)=> {
- reject({ status:999, data:reason });
- });
- } else {
- console.error(`content Type is not Json: ${contentType}`)
- reject({ status:999, data:`content Type is not Json: ${contentType}` });
- }
- } else {
- console.error(`wring correct status: ${response.status}`)
- reject({ status:900, data: response });
- }
- }).catch((error: any) => {
- reject({ status:error.status, data:error.error });
- });
+ body,
});
- };
+ return result;
+ }
- requestImage(properties: HTTPRequest) : Promise {
+ requestJson(properties: HTTPRequest): Promise {
return new Promise((resolve, reject) => {
- this.request(properties).then((response: Response) => {
- if(response.status >= 200 && response.status <= 299) {
- const contentType = response.headers.get('Content-Type');
- //console.log(`REICEIVE ==> ${response.status}`);
- resolve({ status:900, data: response });
- /*
+ this.request(properties)
+ .then((response: Response) => {
+ if (response.status >= 200 && response.status <= 299) {
+ const contentType = response.headers.get('Content-Type');
+ if (contentType === HTTPMimeType.JSON) {
+ response
+ .json()
+ .then((value: any) => {
+ //console.log(`RECEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
+ resolve({ status: response.status, data: value });
+ })
+ .catch((reason: any) => {
+ reject({ status: 999, data: reason });
+ });
+ } else {
+ console.error(`content Type is not Json: ${contentType}`);
+ reject({ status: 999, data: `content Type is not Json: ${contentType}` });
+ }
+ } else {
+ console.error(`wring correct status: ${response.status}`);
+ reject({ status: 900, data: response });
+ }
+ })
+ .catch((error: any) => {
+ reject({
+ time: Date(),
+ status: 999,
+ error: error,
+ statusMessage: "Fetch error",
+ message: "http-wrapper.ts detect an error in the fetch request"
+ });
+ });
+ });
+ }
+
+ requestImage(properties: HTTPRequest): Promise {
+ return new Promise((resolve, reject) => {
+ this.request(properties)
+ .then((response: Response) => {
+ if (response.status >= 200 && response.status <= 299) {
+ const contentType = response.headers.get('Content-Type');
+ //console.log(`REICEIVE ==> ${response.status}`);
+ resolve({ status: 900, data: response });
+ /*
resolve({ status:response.status, data:value });
}).catch((reason:any)=> {
reject({ status:999, data:reason });
@@ -151,36 +160,51 @@ export class HttpWrapperService {
reject({ status:999, data:`content Type is not Json: ${contentType}` });
}
*/
- } else {
- console.error(`wring correct status: ${response.status}`)
- resolve({ status:900, data: response });
- }
- }).catch((error: any) => {
- reject({ status:error.status, data:error.error });
- });
+ } else {
+ console.error(`wring correct status: ${response.status}`);
+ resolve({ status: 900, data: response });
+ }
+ })
+ .catch((error: any) => {
+ reject({
+ time: Date(),
+ status: 999,
+ error: error,
+ statusMessage: "Fetch image error",
+ message: "http-wrapper.ts detect an error in the fetch request"
+ });
+ });
});
}
-
- createRESTCall2({ api, server, inputOptions, addURLToken }: { server?: string; api: UrlPath; inputOptions?: object; addURLToken?:boolean }) {
-
+ createRESTCall2({
+ api,
+ server,
+ inputOptions,
+ addURLToken,
+ }: {
+ server?: string;
+ api: UrlPath;
+ inputOptions?: object;
+ addURLToken?: boolean;
+ }) {
if (isNullOrUndefined(server)) {
server = environment.defaultServer;
}
const basePage = environment.server[server];
let addressServerRest = basePage;
- if (!basePage.endsWith("/")) {
+ if (!basePage.endsWith('/')) {
addressServerRest = `${basePage}/`;
}
let options = inputOptions;
- if(isNullOrUndefined(options)) {
+ if (isNullOrUndefined(options)) {
options = {};
}
let out = addressServerRest;
if (isArrayOfs(api, isString, isNumber, isBoolean)) {
- for (let iii=0; iii {
- if(this.displayReturn === true) {
- console.log(`call POST ${ connectionAdresse } data=${ JSON.stringify(data, null, 2)}`);
+ if (this.displayReturn === true) {
+ console.log(`call POST ${connectionAddresses} data=${JSON.stringify(data, null, 2)}`);
}
- let request = this.http.post(connectionAdresse, data, {
- headers: new HttpHeaders(headerOption),
- reportProgress: true,
- observe: 'events'
- });
- let self = this;
- request.subscribe((res: any) => {
- if(self.displayReturn === true) {
- console.log(`!! data ${ JSON.stringify(res, null, 2)}`);
- }
- if(res.type === HttpEventType.Sent) {
- /* res.type === 0 */
- //console.log('post : Sent');
- } else if(res.type === HttpEventType.UploadProgress) {
- /* res.type === 1 */
- // console.log("post : " + res.loaded + " / " + res.total);
- progress(res.loaded, res.total);
- } else if(res.type === HttpEventType.ResponseHeader) {
- /* res.type === 2 */
- //console.log('post : get header');
- } else if(res.type === HttpEventType.DownloadProgress) {
- /* res.type === 3 */
- //console.log(`post : get DownloadProgress ${ res.loaded}`);
- } else if(res.type === HttpEventType.Response) {
- /* res.type === 4 */
- //console.log('post : get response');
- if(res.httpCode) {
- resolve({ status:res.httpCode, data:res });
- } else {
- resolve({ status:200, data:res });
- }
- } else if(res.type === HttpEventType.User) {
- /* res.type === 5 */
- //console.log('post : get User');
- } else {
- console.log(`post : get unknown ... ${ res.type}`);
- }
- },
- (error) => {
- if(self.displayReturn === true) {
- console.log(`an error occured status: ${ error.status}`);
- console.log(`answer: ${ JSON.stringify(error, null, 2)}`);
- }
- reject({ status:error.status, data:error.error });
+ let request = this.http.post(connectionAddresses, data, {
+ headers: new HttpHeaders(headerOption),
+ reportProgress: true,
+ observe: 'events',
});
+ let self = this;
+ request.subscribe(
+ (res: any) => {
+ if (self.displayReturn === true) {
+ console.log(`!! data ${JSON.stringify(res, null, 2)}`);
+ }
+ if (res.type === HttpEventType.Sent) {
+ /* res.type === 0 */
+ //console.log('post : Sent');
+ } else if (res.type === HttpEventType.UploadProgress) {
+ /* res.type === 1 */
+ // console.log("post : " + res.loaded + " / " + res.total);
+ progress(res.loaded, res.total);
+ } else if (res.type === HttpEventType.ResponseHeader) {
+ /* res.type === 2 */
+ //console.log('post : get header');
+ } else if (res.type === HttpEventType.DownloadProgress) {
+ /* res.type === 3 */
+ //console.log(`post : get DownloadProgress ${ res.loaded}`);
+ } else if (res.type === HttpEventType.Response) {
+ /* res.type === 4 */
+ //console.log('post : get response');
+ if (res.httpCode) {
+ resolve({ status: res.httpCode, data: res });
+ } else {
+ resolve({ status: 200, data: res });
+ }
+ } else if (res.type === HttpEventType.User) {
+ /* res.type === 5 */
+ //console.log('post : get User');
+ } else {
+ console.log(`post : get unknown ... ${res.type}`);
+ }
+ },
+ error => {
+ if (self.displayReturn === true) {
+ console.log(`an error occured status: ${error.status}`);
+ console.log(`answer: ${JSON.stringify(error, null, 2)}`);
+ }
+ reject({ status: error.status, data: error.error });
+ }
+ );
});
}
// Deprecated ... old model stream
- uploadMultipart(base:string, multipart:FormData, progress: ProgressCallback): any {
+ uploadMultipart(base: string, multipart: FormData, progress: ProgressCallback): any {
//console.log(`Upload multipart to ${ base}`);
let url = base;
@@ -305,54 +330,58 @@ export class HttpWrapperService {
return new Promise((resolve, reject) => {
let headers = {
// 'Content-Type': 'multipart/form-data',
- };// new Headers();
+ }; // new Headers();
- self.post(url, headers, multipart, progress)
- .then((response: any) => {
+ self.post(url, headers, multipart, progress).then(
+ (response: any) => {
//console.log(`URL: ${ url }\nRespond(${ response.status }): ${ JSON.stringify(response.data, null, 2)}`);
- if(response.status >= 200 && response.status <= 299) {
+ if (response.status >= 200 && response.status <= 299) {
resolve(response.data.body);
return;
}
reject('An error occured');
- }, (response: any) => {
- if(typeof response.data === 'undefined') {
+ },
+ (response: any) => {
+ if (typeof response.data === 'undefined') {
reject('return ERROR undefined');
} else {
- reject('return ERROR ...');// + JSON.stringify(response, null, 2));
+ reject('return ERROR ...'); // + JSON.stringify(response, null, 2));
}
- });
+ }
+ );
});
}
// Complex wrapper to simplify interaction:
- getSpecific(urlPath: UrlPath):any {
+ getSpecific(urlPath: UrlPath): any {
return new Promise((resolve, reject) => {
this.requestJson({
- endPoint: urlPath,
- requestType: HTTPRequestModel.GET,
- accept: HTTPMimeType.JSON,
- contentType: HTTPMimeType.JSON,
- })
- .then((response: ModelResponseHttp) => {
+ endPoint: urlPath,
+ requestType: HTTPRequestModel.GET,
+ accept: HTTPMimeType.JSON,
+ contentType: HTTPMimeType.JSON,
+ }).then(
+ (response: ModelResponseHttp) => {
//console.log("URL: " + url + "\nRespond(" + response.status + "): " + JSON.stringify(response.data, null, 2));
- if(response.status === 200) {
+ if (response.status === 200) {
resolve(response.data);
return;
}
reject('An error occured');
- }, (response: ModelResponseHttp) => {
- if(isNullOrUndefined(response.data)) {
+ },
+ (response: ModelResponseHttp) => {
+ if (isNullOrUndefined(response.data)) {
reject('return ERROR undefined');
} else {
- reject(`return ERROR ${ JSON.stringify(response.data, null, 2)}`);
+ reject(`return ERROR ${JSON.stringify(response.data, null, 2)}`);
}
- });
+ }
+ );
});
}
// Complex wrapper to simplify interaction:s
- putSpecific(urlPath: UrlPath, data: object):Promise {
+ putSpecific(urlPath: UrlPath, data: object): Promise {
return new Promise((resolve, reject) => {
this.request({
endPoint: urlPath,
@@ -360,30 +389,35 @@ export class HttpWrapperService {
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
body: data,
- }).then((response: Response) => {
- if(response.status >= 200 && response.status <= 201) {
- const contentType = response.headers.get('Content-Type');
- if (contentType === HTTPMimeType.JSON) {
- response.json().then((value:any) => {
- //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
- resolve({ status:response.status, data:value });
- }).catch((reason:any)=> {
- reject({ status:999, data:reason });
- });
+ })
+ .then((response: Response) => {
+ if (response.status >= 200 && response.status <= 201) {
+ const contentType = response.headers.get('Content-Type');
+ if (contentType === HTTPMimeType.JSON) {
+ response
+ .json()
+ .then((value: any) => {
+ //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
+ resolve({ status: response.status, data: value });
+ })
+ .catch((reason: any) => {
+ reject({ status: 999, data: reason });
+ });
+ } else {
+ console.error(`content Type is not Json: ${contentType}`);
+ reject({ status: 998, data: `content Type is not Json: ${contentType}` });
+ }
} else {
- console.error(`content Type is not Json: ${contentType}`)
- reject({ status: 998, data:`content Type is not Json: ${contentType}` });
+ console.error(`wrong correct status: ${response.status}`);
+ reject({ status: 900, data: response });
}
- } else {
- console.error(`wrong correct status: ${response.status}`)
- reject({ status: 900, data: response });
- }
- }).catch((error: any) => {
- reject({ status:error.status, data:error.error });
- });
+ })
+ .catch((error: any) => {
+ reject({ status: error.status, data: error.error });
+ });
});
}
- postSpecific(urlPath: UrlPath, data: object):Promise {
+ postSpecific(urlPath: UrlPath, data: object): Promise {
return new Promise((resolve, reject) => {
this.request({
endPoint: urlPath,
@@ -391,57 +425,67 @@ export class HttpWrapperService {
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
body: data,
- }).then((response: Response) => {
- if(response.status >= 200 && response.status <= 201) {
- const contentType = response.headers.get('Content-Type');
- if (contentType === HTTPMimeType.JSON) {
- response.json().then((value:any) => {
- //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
- resolve({ status:response.status, data:value });
- }).catch((reason:any)=> {
- reject({ status:999, data:reason });
- });
+ })
+ .then((response: Response) => {
+ if (response.status >= 200 && response.status <= 201) {
+ const contentType = response.headers.get('Content-Type');
+ if (contentType === HTTPMimeType.JSON) {
+ response
+ .json()
+ .then((value: any) => {
+ //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
+ resolve({ status: response.status, data: value });
+ })
+ .catch((reason: any) => {
+ reject({ status: 999, data: reason });
+ });
+ } else {
+ console.error(`content Type is not Json: ${contentType}`);
+ reject({ status: 998, data: `content Type is not Json: ${contentType}` });
+ }
} else {
- console.error(`content Type is not Json: ${contentType}`)
- reject({ status: 998, data:`content Type is not Json: ${contentType}` });
+ console.error(`wrong correct status: ${response.status}`);
+ reject({ status: 900, data: response });
}
- } else {
- console.error(`wrong correct status: ${response.status}`)
- reject({ status: 900, data: response });
- }
- }).catch((error: any) => {
- reject({ status:error.status, data:error.error });
- });
+ })
+ .catch((error: any) => {
+ reject({ status: error.status, data: error.error });
+ });
});
}
- deleteSpecific(urlPath: UrlPath ):Promise {
+ deleteSpecific(urlPath: UrlPath): Promise {
return new Promise((resolve, reject) => {
this.request({
endPoint: urlPath,
requestType: HTTPRequestModel.DELETE,
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
- }).then((response: Response) => {
- if(response.status >= 200 && response.status <= 201) {
- const contentType = response.headers.get('Content-Type');
- if (contentType === HTTPMimeType.JSON) {
- response.json().then((value:any) => {
- //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
- resolve({ status:response.status, data:value });
- }).catch((reason:any)=> {
- reject({ status:999, data:reason });
- });
+ })
+ .then((response: Response) => {
+ if (response.status >= 200 && response.status <= 201) {
+ const contentType = response.headers.get('Content-Type');
+ if (contentType === HTTPMimeType.JSON) {
+ response
+ .json()
+ .then((value: any) => {
+ //console.log(`REICEIVE ==> ${response.status}=${ JSON.stringify(value, null, 2)}`);
+ resolve({ status: response.status, data: value });
+ })
+ .catch((reason: any) => {
+ reject({ status: 999, data: reason });
+ });
+ } else {
+ console.error(`content Type is not Json: ${contentType}`);
+ reject({ status: 998, data: `content Type is not Json: ${contentType}` });
+ }
} else {
- console.error(`content Type is not Json: ${contentType}`)
- reject({ status: 998, data:`content Type is not Json: ${contentType}` });
+ console.error(`wrong correct status: ${response.status}`);
+ reject({ status: 900, data: response });
}
- } else {
- console.error(`wrong correct status: ${response.status}`)
- reject({ status: 900, data: response });
- }
- }).catch((error: any) => {
- reject({ status:error.status, data:error.error });
- });
+ })
+ .catch((error: any) => {
+ reject({ status: error.status, data: error.error });
+ });
});
}
}
diff --git a/front/src/common/service/index.ts b/front/src/common/service/index.ts
index 87020ac..2d36858 100644
--- a/front/src/common/service/index.ts
+++ b/front/src/common/service/index.ts
@@ -1,29 +1,35 @@
-import { BddService } from "./bdd";
-import { CookiesService } from "./cookies";
-import { HttpWrapperService, ModelResponseHttp, HTTPRequest, HTTPMimeType, HTTPRequestModel } from "./http-wrapper";
-import { StorageService } from "./local-storage";
-import { PopInService } from "./popin";
-import { OnlyAdminGuard, OnlyUnregisteredGuardHome, OnlyUsersGuard, OnlyUsersGuardHome, SessionService } from "./session";
-import { SSOService } from "./sso";
-import { UserService } from "./user";
+import { BddService } from './bdd';
+import { CookiesService } from './cookies';
+import { HttpWrapperService, ModelResponseHttp, HTTPRequest, HTTPMimeType, HTTPRequestModel } from './http-wrapper';
+import { StorageService } from './local-storage';
+import { NotificationService } from './notification';
+import { PopInService } from './popin';
+import {
+ OnlyAdminGuard,
+ OnlyUnregisteredGuardHome,
+ OnlyUsersGuard,
+ OnlyUsersGuardHome,
+ SessionService,
+} from './session';
+import { SSOService } from './sso';
+import { UserService } from './user';
export {
- BddService,
- CookiesService,
- StorageService,
- HttpWrapperService,
- ModelResponseHttp,
- HTTPRequest,
- HTTPMimeType,
- HTTPRequestModel,
- PopInService,
- SessionService,
- UserService,
- SSOService,
- OnlyUsersGuard,
- OnlyUsersGuardHome,
- OnlyUnregisteredGuardHome,
- OnlyAdminGuard,
+ BddService,
+ CookiesService,
+ StorageService,
+ HttpWrapperService,
+ ModelResponseHttp,
+ HTTPRequest,
+ HTTPMimeType,
+ HTTPRequestModel,
+ PopInService,
+ SessionService,
+ UserService,
+ SSOService,
+ OnlyUsersGuard,
+ OnlyUsersGuardHome,
+ OnlyUnregisteredGuardHome,
+ OnlyAdminGuard,
+ NotificationService,
};
-
-
diff --git a/front/src/common/service/local-storage.ts b/front/src/common/service/local-storage.ts
index 4b0a2b2..05e05e7 100644
--- a/front/src/common/service/local-storage.ts
+++ b/front/src/common/service/local-storage.ts
@@ -4,18 +4,16 @@
* @license PROPRIETARY (see license file)
*/
- import { Injectable } from '@angular/core';
+import { Injectable } from '@angular/core';
import { environment } from 'environments/environment';
- @Injectable()
- export class StorageService {
- private baseLocalStorageName = environment.applName + '_';
-
- constructor() {
-
- }
-
- set(cname: string, cvalue: string): void {
+@Injectable()
+export class StorageService {
+ private baseLocalStorageName = environment.applName + '_';
+
+ constructor() {}
+
+ set(cname: string, cvalue: string): void {
//console.debug(`storage set: ${cname} : ${cvalue}`);
localStorage.setItem(this.baseLocalStorageName + cname, cvalue);
}
@@ -23,16 +21,16 @@ import { environment } from 'environments/environment';
setSession(cname: string, cvalue: string): void {
sessionStorage.setItem(this.baseLocalStorageName + cname, cvalue);
}
-
- remove(cname: string) : void {
+
+ remove(cname: string): void {
//console.debug(`storage remove: ${cname}`);
localStorage.removeItem(this.baseLocalStorageName + cname);
}
- removeSession(cname: string) : void {
+ removeSession(cname: string): void {
sessionStorage.removeItem(this.baseLocalStorageName + cname);
}
-
- get(cname: string) : string | undefined {
+
+ get(cname: string): string | undefined {
//console.debug(`storage get: ${cname}`);
// TODO check expire day...
const data = localStorage.getItem(this.baseLocalStorageName + cname);
@@ -42,13 +40,11 @@ import { environment } from 'environments/environment';
}
return data;
}
- getSession(cname: string) : string | undefined {
+ getSession(cname: string): string | undefined {
const data = sessionStorage.getItem(this.baseLocalStorageName + cname);
if (data === null || data === undefined) {
return undefined;
}
return data;
}
- }
-
-
+}
diff --git a/front/src/common/service/notification.ts b/front/src/common/service/notification.ts
new file mode 100644
index 0000000..96a6b75
--- /dev/null
+++ b/front/src/common/service/notification.ts
@@ -0,0 +1,25 @@
+/** @file
+ * @author Edouard DUPIN
+ * @copyright 2018, Edouard DUPIN, all right reserved
+ * @license PROPRIETARY (see license file)
+ */
+
+import { Injectable } from '@angular/core';
+
+@Injectable()
+export class NotificationService {
+
+ constructor() {
+ console.log('Start Notification Service');
+ }
+
+ errorRaw(data: any) {
+ console.error(`get notification error: ${data}`)
+ }
+ warningRaw(data: any) {
+ console.info(`get notification warning: ${data}`)
+ }
+ infoRaw(data: any) {
+ console.info(`get notification info: ${data}`)
+ }
+}
diff --git a/front/src/common/service/popin.ts b/front/src/common/service/popin.ts
index 5ddeae3..039916b 100644
--- a/front/src/common/service/popin.ts
+++ b/front/src/common/service/popin.ts
@@ -21,8 +21,8 @@ export class PopInService {
remove(_id: string) {
// remove popin from array of active popins
- for(let iii = 0; iii < this.popins.length; iii++) {
- if(this.popins[iii].id === _id) {
+ for (let iii = 0; iii < this.popins.length; iii++) {
+ if (this.popins[iii].id === _id) {
this.popins.splice(iii, 1);
return;
}
@@ -30,22 +30,23 @@ export class PopInService {
}
open(_id: string) {
- // console.log("Try to open pop-in: '" + _id + "'");
+ console.log("Try to open pop-in: '" + _id + "'");
// open popin specified by id
- for(let iii = 0; iii < this.popins.length; iii++) {
- if(this.popins[iii].id === _id) {
- // console.log(" ==>find it ...");
+ for (let iii = 0; iii < this.popins.length; iii++) {
+ console.log(` check: ${this.popins[iii].id}`);
+ if (this.popins[iii].id === _id) {
+ console.log(" ==>find it ...");
this.popins[iii].open();
return;
}
}
- // console.log(" ==> NOT found !!!!!");
+ console.log(" ==> NOT found !!!!!");
}
close(_id: string) {
// close popin specified by id
- for(let iii = 0; iii < this.popins.length; iii++) {
- if(this.popins[iii].id === _id) {
+ for (let iii = 0; iii < this.popins.length; iii++) {
+ if (this.popins[iii].id === _id) {
this.popins[iii].close();
return;
}
diff --git a/front/src/common/service/session.ts b/front/src/common/service/session.ts
index b4fc551..5efc58b 100644
--- a/front/src/common/service/session.ts
+++ b/front/src/common/service/session.ts
@@ -6,92 +6,99 @@
import { Injectable, Output, EventEmitter } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
+import { isNullOrUndefined } from 'common/utils';
+import { environment } from 'environments/environment';
export enum UserRoles222 {
- admin = 10000,
- user = 1,
- guest = 10
+ admin = 'admin',
+ user = 'user',
+ guest = 'guest',
}
@Injectable()
export class SessionService {
private tokenJwt = null;
- public sessionId = null;
public userLogin = null;
- public userAdmin = null;
- public userEMail = null;
- public userAvatar = null;
public userId = null;
+ public right: any = {};
@Output() change: EventEmitter = new EventEmitter();
- constructor() {
-
- }
+ constructor() { }
/**
* @brief Create a new session.
*
- * @param sessionId -
* @param userId -
* @param userLogin -
- * @param userEMail -
- * @param userAdmin -
- * @param userAvatar -
+ * @param tokenJwt -
*/
- create({ sessionId, userId, userLogin, userEMail, userAdmin, userAvatar, tokenJwt }: {
- sessionId;
- userId: string;
- userLogin: string;
- userEMail: string;
- userAdmin: boolean;
- userBlocked: boolean;
- userRemoved: boolean;
- userAvatar: string;
- tokenJwt: string;
- }) {
- console.log(`Session Create: userId=${userId} userLogin=${userLogin} userEMail=${userEMail} userAdmin=${userAdmin} userAvatar=${userAvatar} sessionId = ${sessionId} tokenJwt = ${tokenJwt}`);
+ create({
+ userId,
+ userLogin,
+ tokenJwt,
+ }: {
+ userId: string;
+ userLogin: string;
+ tokenJwt: string;
+ }) {
+ console.log(
+ `Session Create: userId=${userId} userLogin=${userLogin} tokenJwt = ${tokenJwt}`
+ );
this.tokenJwt = tokenJwt;
- this.sessionId = sessionId;
this.userId = userId;
this.userLogin = userLogin;
- this.userAdmin = userAdmin;
- this.userEMail = userEMail;
- this.userAvatar = userAvatar;
+ this.right = this.parseToken(tokenJwt);
+ console.log(`Retrieve right: ${JSON.stringify(this.right, null, 4)}`);
this.change.emit(true);
}
+ b64_to_utf8(str: string): string {
+ return decodeURIComponent(window.atob(str));
+ }
+ parseToken(token: string): any {
+ const cut = token.split('.');
+ const decoded = this.b64_to_utf8(cut[1]);
+ const jsonModel = JSON.parse(decoded);
+ if (isNullOrUndefined(jsonModel.right)) {
+ return {};
+ }
+ if (isNullOrUndefined(jsonModel.right[environment.applName])) {
+ return {};
+ }
+ return jsonModel.right[environment.applName];
+ }
/**
* @brief destroy the current session.
*/
destroy() {
console.log('Session REMOVE');
- let last = this.sessionId;
- this.sessionId = null;
this.tokenJwt = undefined;
this.userId = null;
this.userLogin = null;
- this.userAdmin = null;
- this.userEMail = null;
- this.userAvatar = null;
+ this.right = {};
this.change.emit(false);
}
getToken(): string | undefined {
return this.tokenJwt;
}
islogged() {
- return this.sessionId !== null;
+ return this.userId !== null;
}
- hasRight(type) {
- if(type === UserRoles222.admin) {
- // sometime needed...
- return this.userAdmin;
+ hasRight(type: UserRoles222): boolean {
+ if (type === UserRoles222.admin) {
+ if (isNullOrUndefined(this.right.ADMIN)) {
+ return false;
+ }
+ return this.right.ADMIN;
}
- if(type === UserRoles222.user) {
- // is connected ==> is user
- return this.sessionId !== null;
+ if (type === UserRoles222.user) {
+ if (isNullOrUndefined(this.right.USER)) {
+ return false;
+ }
+ return this.right.USER;
}
- if(type === UserRoles222.guest) {
+ if (type === UserRoles222.guest) {
// all the other ... maybe unneeded
return true;
}
@@ -105,7 +112,7 @@ export class SessionService {
}
getAvatar() {
return 'assets/images/avatar_generic.svg';
- /* This is not ready :
+ /* This is not ready:
if(this.userAvatar === false) {
return 'assets/images/avatar_generic.svg';
}
@@ -116,60 +123,56 @@ export class SessionService {
@Injectable()
export class OnlyUsersGuard implements CanActivate {
- constructor(private sessionService: SessionService,
- private router: Router) {};
+ constructor(private sessionService: SessionService, private router: Router) { }
- canActivate() {
- console.log("OnlyLoggedInUsers");
- if (this.sessionService.hasRight(UserRoles222.user) || this.sessionService.hasRight(UserRoles222.admin) ) {
- return true;
- } else {
- this.router.navigateByUrl('/forbidden');
- return false;
- }
- }
+ canActivate() {
+ console.log('OnlyLoggedInUsers');
+ if (this.sessionService.hasRight(UserRoles222.user) || this.sessionService.hasRight(UserRoles222.admin)) {
+ return true;
+ } else {
+ this.router.navigateByUrl('/forbidden');
+ return false;
+ }
+ }
}
@Injectable()
export class OnlyUsersGuardHome implements CanActivate {
- constructor(private sessionService: SessionService,
- private router: Router) {};
+ constructor(private sessionService: SessionService, private router: Router) { }
- canActivate() {
- if (this.sessionService.hasRight(UserRoles222.user) || this.sessionService.hasRight(UserRoles222.admin) ) {
- return true;
- } else {
- this.router.navigateByUrl('/unregistered');
- return false;
- }
- }
+ canActivate() {
+ if (this.sessionService.hasRight(UserRoles222.user) || this.sessionService.hasRight(UserRoles222.admin)) {
+ return true;
+ } else {
+ this.router.navigateByUrl('/unregistered');
+ return false;
+ }
+ }
}
@Injectable()
export class OnlyUnregisteredGuardHome implements CanActivate {
- constructor(private sessionService: SessionService,
- private router: Router) {};
+ constructor(private sessionService: SessionService, private router: Router) { }
- canActivate() {
- if (!this.sessionService.islogged() ) {
- return true;
- } else {
- this.router.navigateByUrl('/home');
- return false;
- }
- }
+ canActivate() {
+ if (!this.sessionService.islogged()) {
+ return true;
+ } else {
+ this.router.navigateByUrl('/home');
+ return false;
+ }
+ }
}
@Injectable()
export class OnlyAdminGuard implements CanActivate {
- constructor(private sessionService: SessionService,
- private router: Router) {};
+ constructor(private sessionService: SessionService, private router: Router) { }
- canActivate() {
- if (this.sessionService.hasRight(UserRoles222.user)) {
- return true;
- } else {
- this.router.navigateByUrl('/forbidden');
- return false;
- }
- }
+ canActivate() {
+ if (this.sessionService.hasRight(UserRoles222.user)) {
+ return true;
+ } else {
+ this.router.navigateByUrl('/forbidden');
+ return false;
+ }
+ }
}
diff --git a/front/src/common/service/sso.ts b/front/src/common/service/sso.ts
index 1909709..5bd459e 100644
--- a/front/src/common/service/sso.ts
+++ b/front/src/common/service/sso.ts
@@ -12,32 +12,56 @@ import { HTTPMimeType, HTTPRequestModel, HttpWrapperService, ModelResponseHttp }
@Injectable()
export class SSOService {
signUpEnable: boolean = undefined;
-
- constructor(
- private http: HttpWrapperService,
- ) {
+
+ constructor(private http: HttpWrapperService) {
console.log('Start SSOService');
}
- utf8_to_b64( str:string ): string {
+ utf8_to_b64(str: string): string {
// remove unneeded "=" padding
- return window.btoa(encodeURIComponent( str )).replace("=", "");
+ return window.btoa(encodeURIComponent(str)).replace('=', '');
}
-
- b64_to_utf8( str:string ): string {
- return decodeURIComponent(window.atob( str ));
+
+ b64_to_utf8(str: string): string {
+ return decodeURIComponent(window.atob(str));
}
/**
* Request SSO connection
*/
hashLocalData(data?: string): string {
- if (!isNullOrUndefined(data) && !isInArray(data, ["", "null", "NULL", "undefined", "---", "unregistered", "unregistered/", "forbidden", "forbidden/"])) {
+ if (
+ !isNullOrUndefined(data) &&
+ !isInArray(data, [
+ '',
+ 'null',
+ 'NULL',
+ 'undefined',
+ '---',
+ 'unregistered',
+ 'unregistered/',
+ 'forbidden',
+ 'forbidden/',
+ ])
+ ) {
return this.utf8_to_b64(data);
}
- let pathName = getApplicationLocation();
- if (isInArray(pathName, ["sso", "/sso", "/sso/"])) {
+ const pathName = getApplicationLocation();
+ if (isInArray(pathName, ['sso', '/sso', '/sso/'])) {
return this.utf8_to_b64('home');
}
- if (!isNullOrUndefined(pathName) && !isInArray(pathName, ["", "null", "NULL", "undefined", "---", "unregistered", "unregistered/", "forbidden", "forbidden/"])) {
+ if (
+ !isNullOrUndefined(pathName) &&
+ !isInArray(pathName, [
+ '',
+ 'null',
+ 'NULL',
+ 'undefined',
+ '---',
+ 'unregistered',
+ 'unregistered/',
+ 'forbidden',
+ 'forbidden/',
+ ])
+ ) {
return this.utf8_to_b64(pathName);
}
return this.utf8_to_b64('home');
@@ -46,17 +70,22 @@ export class SSOService {
* Request SSO connection
*/
unHashLocalData(data: string): string | undefined {
- if (isNullOrUndefined(data) || isInArray(data, ["", "null", "NULL", "undefined", "---"])) {
+ if (isNullOrUndefined(data) || isInArray(data, ['', 'null', 'NULL', 'undefined', '---'])) {
return undefined;
}
try {
return this.b64_to_utf8(data);
- }
- catch (ex) {
+ } catch (ex) {
console.error(`Can not convert the data: ${data}`);
}
return undefined;
}
+ /**
+ * Request Open SSO Global website
+ */
+ requestOpenSite(): void {
+ window.location.href = environment.ssoSite;
+ }
/**
* Request SSO connection
*/
@@ -83,24 +112,24 @@ export class SSOService {
let self = this;
return new Promise((resolve, reject) => {
if (isNullOrUndefined(self.signUpEnable)) {
- this.http.requestJson({
+ this.http
+ .requestJson({
server: 'karso',
endPoint: 'system_config/is_sign_up_availlable',
requestType: HTTPRequestModel.GET,
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
- }).then((response: ModelResponseHttp) =>{
+ })
+ .then((response: ModelResponseHttp) => {
self.signUpEnable = response.data.signup;
resolve(self.signUpEnable);
- }).catch((error:any) => {
- reject(`return ERROR ${ JSON.stringify(error, null, 2)}`);
+ })
+ .catch((error: any) => {
+ reject(`return ERROR ${JSON.stringify(error, null, 2)}`);
});
return;
}
resolve(self.signUpEnable);
});
-
}
-
}
-
diff --git a/front/src/common/service/user.ts b/front/src/common/service/user.ts
index 44eadde..2892c94 100644
--- a/front/src/common/service/user.ts
+++ b/front/src/common/service/user.ts
@@ -14,22 +14,21 @@ import { SessionService } from './session';
import { SSOService } from './sso';
import { getApplicationLocation, isNullOrUndefined, sha512 } from 'common/utils';
+/*
interface MessageLogIn {
login: string;
method: string;
time: number;
password: string;
}
-
interface MessageAnswer_USER_CONNECT {
- sessionId: string,
- login: string,
- eMail: string,
- role: string,
- avatar: string
+ sessionId: string;
+ login: string;
+ eMail: string;
+ role: string;
+ avatar: string;
}
-
-
+*/
@Injectable()
export class UserService {
// 0: Not hide password; 1 hide password;
@@ -42,7 +41,8 @@ export class UserService {
private storageService: StorageService,
private http: HttpWrapperService,
private sessionService: SessionService,
- private ssoService: SSOService) {
+ private ssoService: SSOService
+ ) {
console.log('Start UserService');
}
@@ -51,8 +51,7 @@ export class UserService {
*/
logOut(): void {
this.removeSession();
- this.ssoService.requestSignOut("home");
-
+ this.ssoService.requestSignOut('home');
}
removeSession(): void {
this.storageService.remove(this.cookiesRememberMe);
@@ -67,69 +66,81 @@ export class UserService {
}
// Separate the Data:
const elems = token.split('.');
- if (elems.length !== 3 ) {
+ if (elems.length !== 3) {
return false;
}
- //const tokenHeader = decodeURIComponent(window.atob( elems[0] ));
- const tokenData = decodeURIComponent(window.atob( elems[1] ));
- //console.error(`Retreive local token: \nheader=${tokenHeader} \ndata=${tokenData}`);
+ // const tokenHeader = decodeURIComponent(window.atob( elems[0] ));
+ const tokenData = decodeURIComponent(window.atob(elems[1]));
+ // console.error(`Retreive local token: \nheader=${tokenHeader} \ndata=${tokenData}`);
const parsedData = JSON.parse(tokenData);
- console.debug(`Retreive token exp data=${new Date(parsedData.exp*1000).toISOString()} < ${new Date().toISOString()}`);
- const expireIn = new Date(parsedData.exp*1000);
+ console.debug(
+ `Retreive token exp data=${new Date(parsedData.exp * 1000).toISOString()} < ${new Date().toISOString()}`
+ );
+ const expireIn = new Date(parsedData.exp * 1000);
const nowTime = new Date();
// TODO: set a marging of 2 hours...
return expireIn > nowTime;
}
+
+ getRememberMe(): boolean {
+ return this.storageService.get(this.cookiesRememberMe) === 'true';
+ }
+
/**
* Check if the system can be connected
*/
checkAutoConnect(): Promise {
let locationOrigin = getApplicationLocation();
- let self = this;
+ const self = this;
return new Promise((resolve, reject) => {
- // Need to use the windows global route to prevent the log in cycle ...
+ // Need to use the windows global route to prevent the log in cycle ...
// And in the mlain application position, the route does not have curently root the page
let pathName = window.location.pathname;
- //console.log("start Path-name: '" + pathName + "'");
- //console.log("check with: '" + environment.applName + "/sso/" + "'");
- if (pathName.startsWith("/sso/") || pathName.startsWith(environment.applName + "/sso/")) {
- console.log(" ==> SSo section");
+ // console.log("start Path-name: '" + pathName + "'");
+ // console.log("check with: '" + environment.applName + "/sso/" + "'");
+ if (pathName.startsWith('/sso/') || pathName.startsWith(environment.applName + '/sso/')) {
+ console.log(' ==> SSo section');
reject();
return;
}
- console.log(" ==> Check if need reconnect?");
- let rememberMe = self.storageService.get(self.cookiesRememberMe)==="true";
+ console.log(' ==> Check if need reconnect?');
+ let rememberMe = self.getRememberMe();
// TODO: in case of jest reload ==> no need to manage the SSO ==> just keep the token ... it in enought...
let token = null;
- if (isNullOrUndefined(environment.tokenStoredInPermanentStorage) || environment.tokenStoredInPermanentStorage !== true) {
+ if (
+ isNullOrUndefined(environment.tokenStoredInPermanentStorage) ||
+ environment.tokenStoredInPermanentStorage !== true
+ ) {
token = self.storageService.getSession(self.cookiesToken);
} else {
token = self.storageService.get(self.cookiesToken);
}
- // TODO: check validity of th eToken:
+ // TODO: check validity of the Token:
if (self.isTokenUpToDate(token)) {
// remove in case of fail !!!
this.storageService.removeSession(this.cookiesToken);
this.storageService.remove(this.cookiesToken);
- self.startSession(token, rememberMe).then(() => {
- self.router.navigateByUrl(locationOrigin);
- console.log(`update global URL = ${locationOrigin}`);
- resolve();
- }).catch(() => {
- // jump in the sign-in page (automatically of request remember-me)
- if(rememberMe) {
- // jump to the sso !!! (remove local data to prevent login loop)
- this.storageService.remove(this.cookiesRememberMe);
- this.storageService.remove(this.cookiesToken);
- this.storageService.removeSession(this.cookiesToken);
- self.ssoService.requestSignIn(locationOrigin);
- reject();
- }
- resolve();
- });
+ self.startSession(token, rememberMe)
+ .then(() => {
+ self.router.navigateByUrl(locationOrigin);
+ console.log(`update global URL = ${locationOrigin}`);
+ resolve();
+ })
+ .catch(() => {
+ // jump in the sign-in page (automatically of request remember-me)
+ if (rememberMe) {
+ // jump to the sso !!! (remove local data to prevent login loop)
+ this.storageService.remove(this.cookiesRememberMe);
+ this.storageService.remove(this.cookiesToken);
+ this.storageService.removeSession(this.cookiesToken);
+ self.ssoService.requestSignIn(locationOrigin);
+ reject();
+ }
+ resolve();
+ });
} else {
console.log(`Get previous connection ... `);
- if(rememberMe) {
+ if (rememberMe) {
// jump to the sso !!! (remove local data to prevent login loop)
this.storageService.remove(this.cookiesRememberMe);
this.storageService.remove(this.cookiesToken);
@@ -141,94 +152,103 @@ export class UserService {
}
});
}
-
- startSession(token : string, rememberMe: boolean): Promise {
- let self = this;
+
+ startSession(token: string, rememberMe: boolean): Promise {
+ const self = this;
return new Promise((resolve, reject) => {
- self.retreiveMe(token).then(
- (value2: boolean) => {
- if(rememberMe === true) {
- self.storageService.set(self.cookiesRememberMe, rememberMe?"true":"false");
+ self.retreiveMe(token)
+ .then((value2: boolean) => {
+ if (rememberMe === true) {
+ self.storageService.set(self.cookiesRememberMe, rememberMe ? 'true' : 'false');
}
- if (isNullOrUndefined(environment.tokenStoredInPermanentStorage) || environment.tokenStoredInPermanentStorage !== true) {
+ if (
+ isNullOrUndefined(environment.tokenStoredInPermanentStorage) ||
+ environment.tokenStoredInPermanentStorage !== true
+ ) {
self.storageService.setSession(self.cookiesToken, token);
} else {
self.storageService.set(self.cookiesToken, token);
}
resolve(self.sessionService.getLogin());
- }).catch(() => {
+ })
+ .catch(() => {
reject('sdfsdfsdf');
});
});
}
- retreiveMe(token : string): Promise {
- console.log(`AuthService.loginWithToken ... '${ token }'`);
- let self = this;
+ retreiveMe(token: string): Promise {
+ console.log(`AuthService.loginWithToken ... '${token}'`);
+ const self = this;
return new Promise((resolve, reject) => {
- this.http.requestJson({
- //server: 'karso',
+ this.http
+ .requestJson({
+ // server: 'karso',
endPoint: 'users/me',
requestType: HTTPRequestModel.GET,
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
authorization: `Yota ${token}`, // special case, the token is set after this request...
- }).then((response: ModelResponseHttp) =>{
+ })
+ .then((response: ModelResponseHttp) => {
// TODO: check type ...
- console.log(`loginWithToken : get some data to check: ${JSON.stringify(response.data)}`)
- self.sessionService.create(
- {
- sessionId: response.data.sessionId,
- userId: response.data.id,
- userLogin: response.data.login,
- userEMail: response.data.email,
- userAdmin: response.data.admin,
- userBlocked: response.data.blocked,
- userRemoved: response.data.removed,
- userAvatar: response.data.avatar,
- tokenJwt: token,
- });
+ console.log(`loginWithToken : get some data to check: ${JSON.stringify(response.data)}`);
+ self.sessionService.create({
+ //sessionId: response.data.sessionId,
+ userId: response.data.id,
+ userLogin: response.data.login,
+ //userEMail: response.data.email,
+ //userAdmin: response.data.admin,
+ //userBlocked: response.data.blocked,
+ //userRemoved: response.data.removed,
+ //userAvatar: response.data.avatar,
+ tokenJwt: token,
+ });
resolve(true);
- }).catch((error:any) => {
- reject(`return ERROR ${ JSON.stringify(error, null, 2)}`);
+ })
+ .catch((error: any) => {
+ reject(`return ERROR ${JSON.stringify(error, null, 2)}`);
});
- });
+ });
}
- create(login : string, email : string, password : string) {
+ create(login: string, email: string, password: string) {
return this.createSha(login, email, sha512(password));
}
- createSha(login : string, email : string, password : string) {
+ createSha(login: string, email: string, password: string) {
let data = {
method: 'v?',
login: login,
email: email,
- password: password
+ password: password,
};
- console.log(`call users data=${ JSON.stringify(data, null, 2)}`);
+ console.log(`call users data=${JSON.stringify(data, null, 2)}`);
- if(this.identificationVersion === 1) {
+ if (this.identificationVersion === 1) {
data.method = 'v1';
}
return new Promise((resolve, reject) => {
- this.http.requestJson({
- server: 'karso',
+ this.http
+ .requestJson({
+ server: 'karso',
endPoint: 'users',
requestType: HTTPRequestModel.POST,
accept: HTTPMimeType.JSON,
contentType: HTTPMimeType.JSON,
body: data,
- }).then((response: ModelResponseHttp) =>{
+ })
+ .then((response: ModelResponseHttp) => {
// TODO: check type ...
- console.log(`createSha : get some data to check: ${JSON.stringify(response.data)}`)
+ console.log(`createSha : get some data to check: ${JSON.stringify(response.data)}`);
resolve(response.data);
- }).catch((error:any) => {
- reject(`return ERROR ${ JSON.stringify(error, null, 2)}`);
+ })
+ .catch((error: any) => {
+ reject(`return ERROR ${JSON.stringify(error, null, 2)}`);
});
- });
+ });
}
- isAuthenticated():boolean {
+ isAuthenticated(): boolean {
// return !!Session.userId;
return false;
}
@@ -238,10 +258,9 @@ export class UserService {
authorizedRoles = [_authorizedRoles];
}
return ( authService.isAuthenticated()
- && _authorizedRoles.indexOf(Session.userRole) !== -1
- );
+ && _authorizedRoles.indexOf(Session.userRole) !== -1
+ );
*/
return false;
}
}
-
diff --git a/front/src/common/utils/applPath.ts b/front/src/common/utils/applPath.ts
index 5109ec1..4b734f7 100644
--- a/front/src/common/utils/applPath.ts
+++ b/front/src/common/utils/applPath.ts
@@ -1,17 +1,17 @@
-import { environment } from "environments/environment";
+import { environment } from 'environments/environment';
export function getApplicationLocation(): string {
- let pathName = location.pathname;
- //console.log("start Path-name: '" + pathName + "'");
- //console.log("check with: '" + environment.applName + "/sso/" + "'");
- if (pathName.startsWith('/' + environment.applName + '/')) {
- pathName = pathName.substring(environment.applName.length+2);
- } else if (pathName.startsWith('/' + environment.applName)) {
- pathName = pathName.substring(environment.applName.length + 1);
- } else if (pathName.startsWith(environment.applName + '/')) {
- pathName = pathName.substring(environment.applName.length+1);
- } else if (pathName.startsWith(environment.applName)) {
- pathName = pathName.substring(environment.applName.length);
- }
- return pathName;
-}
\ No newline at end of file
+ let pathName = location.pathname;
+ //console.log("start Path-name: '" + pathName + "'");
+ //console.log("check with: '" + environment.applName + "/sso/" + "'");
+ if (pathName.startsWith('/' + environment.applName + '/')) {
+ pathName = pathName.substring(environment.applName.length + 2);
+ } else if (pathName.startsWith('/' + environment.applName)) {
+ pathName = pathName.substring(environment.applName.length + 1);
+ } else if (pathName.startsWith(environment.applName + '/')) {
+ pathName = pathName.substring(environment.applName.length + 1);
+ } else if (pathName.startsWith(environment.applName)) {
+ pathName = pathName.substring(environment.applName.length);
+ }
+ return pathName;
+}
diff --git a/front/src/common/utils/dataInterface.ts b/front/src/common/utils/dataInterface.ts
index 636d402..33a9baa 100644
--- a/front/src/common/utils/dataInterface.ts
+++ b/front/src/common/utils/dataInterface.ts
@@ -4,8 +4,8 @@
* @license PROPRIETARY (see license file)
*/
-import { NodeData } from "../model";
-import { isArray, isNullOrUndefined } from "./validator";
+import { NodeData } from '../model';
+import { isArray, isNullOrUndefined } from './validator';
export enum TypeCheck {
CONTAINS = 'C',
@@ -20,7 +20,7 @@ export enum TypeCheck {
export interface SelectModel {
check: TypeCheck;
key: string;
- value?: number|string|boolean|number[]|string[];
+ value?: number | string | boolean | number[] | string[];
}
/*
{ check: TypeCheck.EQUAL, key: sss, value: null}
@@ -32,9 +32,9 @@ export interface SelectModel {
export class DataInterface {
static extractLimitOne(data: NodeData[], key: string): any[] {
const out = [];
- for (let iii=0; iii= control.value) {
+ } else if (control.check === TypeCheck.LESS) {
+ if (valueElement >= control.value) {
find = false;
break;
}
- } else if(control.check === TypeCheck.LESS_EQUAL) {
- if(valueElement > control.value) {
+ } else if (control.check === TypeCheck.LESS_EQUAL) {
+ if (valueElement > control.value) {
find = false;
break;
}
- } else if(control.check === TypeCheck.GREATER) {
- if(valueElement <= control.value) {
+ } else if (control.check === TypeCheck.GREATER) {
+ if (valueElement <= control.value) {
find = false;
break;
}
- } else if(control.check === TypeCheck.GREATER_EQUAL) {
- if(valueElement < control.value) {
+ } else if (control.check === TypeCheck.GREATER_EQUAL) {
+ if (valueElement < control.value) {
find = false;
break;
}
@@ -263,7 +263,7 @@ export class DataInterface {
}
}
}
- if(find === true) {
+ if (find === true) {
// console.log(" ==> SELECTED");
out.push(values[iiiElem]);
} else {
@@ -274,21 +274,21 @@ export class DataInterface {
}
public orderBy(values: NodeData[], order: string[]): NodeData[] {
- if(isNullOrUndefined(order)) {
+ if (isNullOrUndefined(order)) {
return values;
}
- if(order.length === 0) {
+ if (order.length === 0) {
return values;
}
let valueOrder = order[0];
let out = [];
let outUnclassable = [];
- for(let iii = 0; iii < values.length; iii++) {
- if(values[iii][valueOrder] === undefined) {
+ for (let iii = 0; iii < values.length; iii++) {
+ if (values[iii][valueOrder] === undefined) {
outUnclassable.push(values[iii]);
continue;
}
- if(values[iii][valueOrder] === null) {
+ if (values[iii][valueOrder] === null) {
outUnclassable.push(values[iii]);
continue;
}
@@ -296,36 +296,35 @@ export class DataInterface {
}
// console.log("order in list by : " + value_order);
// out = sorted(out, key=lambda x{ x[value_order])
- if(valueOrder === 'name') {
+ if (valueOrder === 'name') {
out.sort((aaa, bbb) => {
const name1 = aaa[valueOrder].toLowerCase();
const name2 = bbb[valueOrder].toLowerCase();
- if(name1 > name2) {
+ if (name1 > name2) {
return 1;
}
- if(name1 < name2) {
+ if (name1 < name2) {
return -1;
}
return 0;
});
} else {
out.sort((aaa, bbb) => {
- if(aaa[valueOrder] > bbb[valueOrder]) {
+ if (aaa[valueOrder] > bbb[valueOrder]) {
return 1;
}
- if(aaa[valueOrder] < bbb[valueOrder]) {
+ if (aaa[valueOrder] < bbb[valueOrder]) {
return -1;
}
return 0;
});
}
- if(order.length > 1) {
+ if (order.length > 1) {
outUnclassable = this.orderBy(outUnclassable, order.slice(1));
}
- for(let jjj = 0; jjj < outUnclassable.length; jjj++) {
+ for (let jjj = 0; jjj < outUnclassable.length; jjj++) {
out.push(outUnclassable[jjj]);
}
return out;
}
}
-
diff --git a/front/src/common/utils/index.ts b/front/src/common/utils/index.ts
index 17445d1..6426b17 100644
--- a/front/src/common/utils/index.ts
+++ b/front/src/common/utils/index.ts
@@ -1,29 +1,51 @@
-
-
-import { getApplicationLocation } from "./applPath";
-import { DataInterface, TypeCheck } from "./dataInterface";
-import { sha512 } from "./sha512";
-import { isArray, isArrayOf, isBoolean, isNull, isNullOrUndefined, isNumber, isNumberFinite, isObject, isOptionalOf, isOptionalArrayOf, isString, isUndefined, isArrayOfs, isInArray, isStringNullOrUndefined } from "./validator";
+import { getApplicationLocation } from './applPath';
+import { DataInterface, TypeCheck } from './dataInterface';
+import { sha512 } from './sha512';
+import {
+ isArray,
+ isArrayOf,
+ isBoolean,
+ isNull,
+ isNullOrUndefined,
+ isNumber,
+ isNumberFinite,
+ isObject,
+ isOptionalOf,
+ isOptionalArrayOf,
+ isString,
+ isUndefined,
+ isArrayOfs,
+ isInArray,
+ isStringNullOrUndefined,
+ isNumeric,
+} from './validator';
+import { checkEmailValidity, checkLoginValidity, checkPasswordValidity, createLoginState, createPasswordState, getLoginType } from './validatorPasswordEmail';
export {
- isNumber,
- isNumberFinite,
- isBoolean,
- isString,
- isArray,
- isNull,
- isUndefined,
- isNullOrUndefined,
- isObject,
- isArrayOf,
- isArrayOfs,
- isOptionalOf,
- isOptionalArrayOf,
- isInArray,
- isStringNullOrUndefined,
- DataInterface,
- TypeCheck,
- getApplicationLocation,
- sha512,
-}
-
+ isNumber,
+ isNumberFinite,
+ isBoolean,
+ isString,
+ isArray,
+ isNull,
+ isUndefined,
+ isNullOrUndefined,
+ isObject,
+ isArrayOf,
+ isArrayOfs,
+ isOptionalOf,
+ isOptionalArrayOf,
+ isInArray,
+ isStringNullOrUndefined,
+ DataInterface,
+ TypeCheck,
+ getApplicationLocation,
+ sha512,
+ createPasswordState,
+ checkEmailValidity,
+ checkPasswordValidity,
+ checkLoginValidity,
+ getLoginType,
+ createLoginState,
+ isNumeric,
+};
diff --git a/front/src/common/utils/mobileDevice.ts b/front/src/common/utils/mobileDevice.ts
index fb0465c..8845f8d 100644
--- a/front/src/common/utils/mobileDevice.ts
+++ b/front/src/common/utils/mobileDevice.ts
@@ -1,7 +1,3 @@
-
-
-
-
export function isMobileAgent() {
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
diff --git a/front/src/common/utils/sha512.ts b/front/src/common/utils/sha512.ts
index 25ecdda..8bdf54a 100644
--- a/front/src/common/utils/sha512.ts
+++ b/front/src/common/utils/sha512.ts
@@ -1,6 +1,6 @@
/*
-* Secure Hash Algorithm (SHA512)
-*/
+ * Secure Hash Algorithm (SHA512)
+ */
export function sha512(str) {
function int64(msint_32, lsint_32) {
@@ -8,51 +8,99 @@ export function sha512(str) {
this.lowOrder = lsint_32;
}
- let H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),
- new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),
- new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),
- new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];
+ let H = [
+ new int64(0x6a09e667, 0xf3bcc908),
+ new int64(0xbb67ae85, 0x84caa73b),
+ new int64(0x3c6ef372, 0xfe94f82b),
+ new int64(0xa54ff53a, 0x5f1d36f1),
+ new int64(0x510e527f, 0xade682d1),
+ new int64(0x9b05688c, 0x2b3e6c1f),
+ new int64(0x1f83d9ab, 0xfb41bd6b),
+ new int64(0x5be0cd19, 0x137e2179),
+ ];
- let K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),
- new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),
- new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),
- new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),
- new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),
- new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),
- new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),
- new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),
- new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),
- new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),
- new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
- new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),
- new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),
- new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),
- new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),
- new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),
- new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
- new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),
- new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),
- new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),
- new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),
- new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),
- new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),
- new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
- new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),
- new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),
- new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),
- new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),
- new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
- new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),
- new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),
- new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),
- new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),
- new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),
- new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),
- new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),
- new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
- new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),
- new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),
- new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];
+ let K = [
+ new int64(0x428a2f98, 0xd728ae22),
+ new int64(0x71374491, 0x23ef65cd),
+ new int64(0xb5c0fbcf, 0xec4d3b2f),
+ new int64(0xe9b5dba5, 0x8189dbbc),
+ new int64(0x3956c25b, 0xf348b538),
+ new int64(0x59f111f1, 0xb605d019),
+ new int64(0x923f82a4, 0xaf194f9b),
+ new int64(0xab1c5ed5, 0xda6d8118),
+ new int64(0xd807aa98, 0xa3030242),
+ new int64(0x12835b01, 0x45706fbe),
+ new int64(0x243185be, 0x4ee4b28c),
+ new int64(0x550c7dc3, 0xd5ffb4e2),
+ new int64(0x72be5d74, 0xf27b896f),
+ new int64(0x80deb1fe, 0x3b1696b1),
+ new int64(0x9bdc06a7, 0x25c71235),
+ new int64(0xc19bf174, 0xcf692694),
+ new int64(0xe49b69c1, 0x9ef14ad2),
+ new int64(0xefbe4786, 0x384f25e3),
+ new int64(0x0fc19dc6, 0x8b8cd5b5),
+ new int64(0x240ca1cc, 0x77ac9c65),
+ new int64(0x2de92c6f, 0x592b0275),
+ new int64(0x4a7484aa, 0x6ea6e483),
+ new int64(0x5cb0a9dc, 0xbd41fbd4),
+ new int64(0x76f988da, 0x831153b5),
+ new int64(0x983e5152, 0xee66dfab),
+ new int64(0xa831c66d, 0x2db43210),
+ new int64(0xb00327c8, 0x98fb213f),
+ new int64(0xbf597fc7, 0xbeef0ee4),
+ new int64(0xc6e00bf3, 0x3da88fc2),
+ new int64(0xd5a79147, 0x930aa725),
+ new int64(0x06ca6351, 0xe003826f),
+ new int64(0x14292967, 0x0a0e6e70),
+ new int64(0x27b70a85, 0x46d22ffc),
+ new int64(0x2e1b2138, 0x5c26c926),
+ new int64(0x4d2c6dfc, 0x5ac42aed),
+ new int64(0x53380d13, 0x9d95b3df),
+ new int64(0x650a7354, 0x8baf63de),
+ new int64(0x766a0abb, 0x3c77b2a8),
+ new int64(0x81c2c92e, 0x47edaee6),
+ new int64(0x92722c85, 0x1482353b),
+ new int64(0xa2bfe8a1, 0x4cf10364),
+ new int64(0xa81a664b, 0xbc423001),
+ new int64(0xc24b8b70, 0xd0f89791),
+ new int64(0xc76c51a3, 0x0654be30),
+ new int64(0xd192e819, 0xd6ef5218),
+ new int64(0xd6990624, 0x5565a910),
+ new int64(0xf40e3585, 0x5771202a),
+ new int64(0x106aa070, 0x32bbd1b8),
+ new int64(0x19a4c116, 0xb8d2d0c8),
+ new int64(0x1e376c08, 0x5141ab53),
+ new int64(0x2748774c, 0xdf8eeb99),
+ new int64(0x34b0bcb5, 0xe19b48a8),
+ new int64(0x391c0cb3, 0xc5c95a63),
+ new int64(0x4ed8aa4a, 0xe3418acb),
+ new int64(0x5b9cca4f, 0x7763e373),
+ new int64(0x682e6ff3, 0xd6b2b8a3),
+ new int64(0x748f82ee, 0x5defb2fc),
+ new int64(0x78a5636f, 0x43172f60),
+ new int64(0x84c87814, 0xa1f0ab72),
+ new int64(0x8cc70208, 0x1a6439ec),
+ new int64(0x90befffa, 0x23631e28),
+ new int64(0xa4506ceb, 0xde82bde9),
+ new int64(0xbef9a3f7, 0xb2c67915),
+ new int64(0xc67178f2, 0xe372532b),
+ new int64(0xca273ece, 0xea26619c),
+ new int64(0xd186b8c7, 0x21c0c207),
+ new int64(0xeada7dd6, 0xcde0eb1e),
+ new int64(0xf57d4f7f, 0xee6ed178),
+ new int64(0x06f067aa, 0x72176fba),
+ new int64(0x0a637dc5, 0xa2c898a6),
+ new int64(0x113f9804, 0xbef90dae),
+ new int64(0x1b710b35, 0x131c471b),
+ new int64(0x28db77f5, 0x23047d84),
+ new int64(0x32caab7b, 0x40c72493),
+ new int64(0x3c9ebe0a, 0x15c9bebc),
+ new int64(0x431d67c4, 0x9c100d4c),
+ new int64(0x4cc5d4be, 0xcb3e42b6),
+ new int64(0x597f299c, 0xfc657e2a),
+ new int64(0x5fcb6fab, 0x3ad6faec),
+ new int64(0x6c44198c, 0x4a475817),
+ ];
let W = new Array(64);
let a, b, c, d, e, f, g, h, i, j;
@@ -76,14 +124,14 @@ export function sha512(str) {
}
function binb2hex(binarray) {
- let hex_tab = "0123456789abcdef";
- let str = "";
+ let hex_tab = '0123456789abcdef';
+ let str = '';
let length = binarray.length * 4;
let srcByte;
for (let i = 0; i < length; i += 1) {
srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);
- str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);
+ str += hex_tab.charAt((srcByte >> 4) & 0xf) + hex_tab.charAt(srcByte & 0xf);
}
return str;
@@ -92,13 +140,13 @@ export function sha512(str) {
function safe_add_2(x, y) {
let lsw, msw, lowOrder, highOrder;
- lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);
+ lsw = (x.lowOrder & 0xffff) + (y.lowOrder & 0xffff);
msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
- lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);
+ lsw = (x.highOrder & 0xffff) + (y.highOrder & 0xffff) + (msw >>> 16);
msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
return new int64(highOrder, lowOrder);
}
@@ -106,13 +154,18 @@ export function sha512(str) {
function safe_add_4(a, b, c, d) {
let lsw, msw, lowOrder, highOrder;
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);
+ lsw = (a.lowOrder & 0xffff) + (b.lowOrder & 0xffff) + (c.lowOrder & 0xffff) + (d.lowOrder & 0xffff);
msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);
+ lsw =
+ (a.highOrder & 0xffff) +
+ (b.highOrder & 0xffff) +
+ (c.highOrder & 0xffff) +
+ (d.highOrder & 0xffff) +
+ (msw >>> 16);
msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
return new int64(highOrder, lowOrder);
}
@@ -120,13 +173,36 @@ export function sha512(str) {
function safe_add_5(a, b, c, d, e) {
let lsw, msw, lowOrder, highOrder;
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);
- msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ lsw =
+ (a.lowOrder & 0xffff) +
+ (b.lowOrder & 0xffff) +
+ (c.lowOrder & 0xffff) +
+ (d.lowOrder & 0xffff) +
+ (e.lowOrder & 0xffff);
+ msw =
+ (a.lowOrder >>> 16) +
+ (b.lowOrder >>> 16) +
+ (c.lowOrder >>> 16) +
+ (d.lowOrder >>> 16) +
+ (e.lowOrder >>> 16) +
+ (lsw >>> 16);
+ lowOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);
- msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
+ lsw =
+ (a.highOrder & 0xffff) +
+ (b.highOrder & 0xffff) +
+ (c.highOrder & 0xffff) +
+ (d.highOrder & 0xffff) +
+ (e.highOrder & 0xffff) +
+ (msw >>> 16);
+ msw =
+ (a.highOrder >>> 16) +
+ (b.highOrder >>> 16) +
+ (c.highOrder >>> 16) +
+ (d.highOrder >>> 16) +
+ (e.highOrder >>> 16) +
+ (lsw >>> 16);
+ highOrder = ((msw & 0xffff) << 16) | (lsw & 0xffff);
return new int64(highOrder, lowOrder);
}
@@ -182,7 +258,9 @@ export function sha512(str) {
}
function gamma0(x) {
- let rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);
+ let rotr1 = rotr(x, 1),
+ rotr8 = rotr(x, 8),
+ shr7 = shr(x, 7);
return new int64(
rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,
@@ -203,23 +281,17 @@ export function sha512(str) {
function shr(x, n) {
if (n <= 32) {
- return new int64(
- x.highOrder >>> n,
- x.lowOrder >>> n | (x.highOrder << (32 - n))
- );
+ return new int64(x.highOrder >>> n, (x.lowOrder >>> n) | (x.highOrder << (32 - n)));
} else {
- return new int64(
- 0,
- x.highOrder << (32 - n)
- );
+ return new int64(0, x.highOrder << (32 - n));
}
}
str = utf8_encode(str);
- let strlen = str.length*charsize;
+ let strlen = str.length * charsize;
str = str2binb(str);
- str[strlen >> 5] |= 0x80 << (24 - strlen % 32);
+ str[strlen >> 5] |= 0x80 << (24 - (strlen % 32));
str[(((strlen + 128) >> 10) << 5) + 31] = strlen;
for (let i = 0; i < str.length; i += 32) {
@@ -234,7 +306,7 @@ export function sha512(str) {
for (let j = 0; j < 80; j++) {
if (j < 16) {
- W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);
+ W[j] = new int64(str[j * 2 + i], str[j * 2 + i + 1]);
} else {
W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);
}
@@ -267,4 +339,4 @@ export function sha512(str) {
binarray.push(H[i].lowOrder);
}
return binb2hex(binarray);
-}
\ No newline at end of file
+}
diff --git a/front/src/common/utils/validator.ts b/front/src/common/utils/validator.ts
index a5cf2bd..5fe81db 100644
--- a/front/src/common/utils/validator.ts
+++ b/front/src/common/utils/validator.ts
@@ -1,85 +1,98 @@
+export function isNumeric(val: string): boolean {
+ return !isNaN(Number(val));
+}
+
export function isNumber(data: any): data is number {
- return typeof data === "number";
+ return typeof data === 'number';
}
export function isNumberFinite(data: any): data is number {
- return isNumber(data) && isFinite(data);
+ return isNumber(data) && isFinite(data);
}
export function isBoolean(data: any): data is boolean {
- return typeof data === "boolean";
+ return typeof data === 'boolean';
}
export function isString(data: any): data is string {
- return typeof data === "string";
+ return typeof data === 'string';
}
export function isArray(data: any): data is any[] {
- return Array.isArray(data);
+ return Array.isArray(data);
}
export function isNull(data: any): data is null {
- return data === null;
+ return data === null;
}
export function isUndefined(data: any): data is undefined {
- return data === undefined;
+ return data === undefined;
}
export function isNullOrUndefined(data: any): data is undefined | null {
- return data === undefined || data === null;
+ return data === undefined || data === null;
}
export function isStringNullOrUndefined(data: any): data is undefined | null {
- return data === "undefined" || data === "null" || data === "";
+ return data === 'undefined' || data === 'null' || data === '';
}
export function isObject(data: any): data is any {
- return !isNullOrUndefined(data)
- && typeof data === 'object'
- && !isArray(data);
+ return !isNullOrUndefined(data) && typeof data === 'object' && !isArray(data);
}
export function isInArray(data: any, listElment: any[]): boolean {
- for (let iii=0; iii(data: any, typeChecker: (subData: any) => subData is TYPE, length?: number): data is TYPE[] {
- if (!isArray(data)) {
- return false;
- }
- if (!data.every(typeChecker)) {
- return false;
- }
- if (!isUndefined(length) && data.length != length) {
- return false;
- }
- return true;
+export function isArrayOf(
+ data: any,
+ typeChecker: (subData: any) => subData is TYPE,
+ length?: number
+): data is TYPE[] {
+ if (!isArray(data)) {
+ return false;
+ }
+ if (!data.every(typeChecker)) {
+ return false;
+ }
+ if (!isUndefined(length) && data.length != length) {
+ return false;
+ }
+ return true;
}
-export function isArrayOfs(data: any,
- typeChecker: (subData: any) => subData is TYPE,
- typeChecker2?: (subData: any) => subData is TYPE2,
- typeChecker3?: (subData: any) => subData is TYPE3): data is (TYPE|TYPE2|TYPE3)[] {
- if (!isArray(data)) {
- return false;
- }
- for (let iii=0; iii(
+ data: any,
+ typeChecker: (subData: any) => subData is TYPE,
+ typeChecker2?: (subData: any) => subData is TYPE2,
+ typeChecker3?: (subData: any) => subData is TYPE3
+): data is (TYPE | TYPE2 | TYPE3)[] {
+ if (!isArray(data)) {
+ return false;
+ }
+ for (let iii = 0; iii < data.length; iii++) {
+ let elem = data[iii];
+ if (typeChecker(elem)) {
+ continue;
+ }
+ if (typeChecker2 != undefined && typeChecker2(elem)) {
+ continue;
+ }
+ if (typeChecker3 != undefined && typeChecker3(elem)) {
+ continue;
+ }
+ return false;
+ }
+ return true;
}
-export function isOptionalOf(data: any, typeChecker: (subData: any) => subData is TYPE): data is TYPE | undefined {
- return isUndefined(data) || typeChecker(data);
+export function isOptionalOf(
+ data: any,
+ typeChecker: (subData: any) => subData is TYPE
+): data is TYPE | undefined {
+ return isUndefined(data) || typeChecker(data);
}
-export function isOptionalArrayOf(data: any, typeChecker: (subData: any) => subData is TYPE): data is TYPE[] | undefined {
- return isUndefined(data) || isArrayOf(data, typeChecker);
+export function isOptionalArrayOf(
+ data: any,
+ typeChecker: (subData: any) => subData is TYPE
+): data is TYPE[] | undefined {
+ return isUndefined(data) || isArrayOf(data, typeChecker);
}
-
diff --git a/front/src/common/utils/validatorPasswordEmail.ts b/front/src/common/utils/validatorPasswordEmail.ts
new file mode 100644
index 0000000..ffbdfff
--- /dev/null
+++ b/front/src/common/utils/validatorPasswordEmail.ts
@@ -0,0 +1,146 @@
+import { isNullOrUndefined } from "./validator";
+
+/**
+ * Test the specific regexp on a value
+ * @param value Value to test.
+ * @param expression Regexp epression to test on the value
+ * @returns true if the regexp is validate, false otherwise
+ */
+export function testRegExp(value: string, expression: string): boolean {
+ let regexCheck = new RegExp(expression);
+ if (regexCheck.test(value)) {
+ return true;
+ }
+ return false;
+}
+/**
+ * Check the value is well formated to be a login.
+ * @param value login value to check.
+ * @returns true if it is compatible with a login, false otherwise.
+ */
+export function checkLoginValidity(value: string): boolean {
+ return testRegExp(value, '^[a-zA-Z0-9_\\.-]+$');
+}
+/**
+ * Check the value is well formated to be an e-mail.
+ * @param value email value to check.
+ * @returns true if it is an email, false otherwise.
+ */
+export function checkEmailValidity(value: string): boolean {
+ return testRegExp(value, '^[a-zA-Z0-9_\\.@-]+@[a-zA-Z0-9_\\.-]+\\.[a-zA-Z]+$');
+}
+/**
+ * Check the value is well formated to be an Password.
+ * @param value password value to check.
+ * @returns true if it is compatible with a password, false otherwise.
+ */
+export function checkPasswordValidity(value: string): boolean {
+ return testRegExp(value, '^[a-zA-Z0-9_\\.@ %:;,=}{\\?\\!\\*\\+\\(\\)\\[\\]\\|%~/\\\\\\<\\>\\-£€]+$');
+}
+/**
+ * Check if the value contains one alphabetical lower case character
+ * @param value String value to check.
+ * @returns true if it contains one lower case character, false otherwise.
+ */
+export function check1LowerChar(value: string): boolean {
+ return testRegExp(value, '(.*[a-z].*)');
+}
+/**
+ * Check if the value contains one alphabetical upper case character
+ * @param value String value to check.
+ * @returns true if it contains one upper case character, false otherwise.
+ */
+export function check1UpperChar(value: string): boolean {
+ return testRegExp(value, '(.*[A-Z].*)');
+}
+/**
+ * Check if the value contains one numerical character
+ * @param value String value to check.
+ * @returns true if it contains minimum of one digit character, false otherwise.
+ */
+export function check1DigitChar(value: string): boolean {
+ return testRegExp(value, '(.*[0-9].*)');
+}
+/**
+ * Check if the value contains one special character
+ * @param value String value to check.
+ * @returns true if it contains minimum of one special character, false otherwise.
+ */
+export function check1SpecialChar(value: string): boolean {
+ return testRegExp(value, '(.*[_\\.@ %:;,=}{\\?\\!\\*\\+\\(\\)\\[\\]\\|%~/\\\\\\<\\>\\-£€].*)');
+}
+/**
+ * Creata a pasword state of a password. it return a readable string that explain why the password is wrong.
+ * if check minimum size, at lease one digit, one upper case, one lower case and one special character.
+ * @param value Pasword value to check.
+ * @returns true if it is compatcable, false if the value is undefined or empty,or the descriptive error string (English).
+ */
+export function createPasswordState(value: string): boolean|string {
+ let ret = createPasswordStateSimple(value);
+ if (ret === true) {
+ if (check1LowerChar(value) === false) {
+ return 'Not valid: missing 1 lower case character [a-z]';
+ }
+ if (check1UpperChar(value) === false) {
+ return 'Not valid: missing 1 upper case character [A-Z]';
+ }
+ if (check1DigitChar(value) === false) {
+ return 'Not valid: missing 1 digit character [0-9]';
+ }
+ if (check1SpecialChar(value) === false) {
+ return 'Not valid: missing 1 special character: _-:;.,?!*+=}{([|)]% @&~#/\\<>';
+ }
+ }
+ return ret;
+}/**
+ * Creata a pasword state of a password. it return a readable string that explain why the password is wrong.
+ * It does not check if the email have specific less one char, it is dangerous for login interface.
+ * @param value Pasword value to check.
+ * @returns true if it is compatcable, false if the value is undefined or empty,or the descriptive error string (English).
+ */
+export function createPasswordStateSimple(value: string): boolean|string {
+ if (isNullOrUndefined(value) || value === '') {
+ return false;
+ }
+ if (value.length < 6) {
+ return 'Need 6 characters';
+ }
+ if (checkPasswordValidity(value) === false) {
+ return 'Not valid: characters, numbers and "_-:;.,?!*+=}{([|)]% @&~#/\\<>"';
+ }
+ return true;
+}
+
+/**
+ * Creata a login/email state. It return a readable string that explain why the login/email is wrong.
+ * if check minimum size, or not an email.
+ * @param value email/login value to check.
+ * @returns true if it is compatcable, false if the value is undefined or empty,or the descriptive error string (English).
+ */
+export function createLoginState(value: string): boolean|string {
+ if (isNullOrUndefined(value) || value === '') {
+ return false;
+ }
+ if (value.length < 6) {
+ return 'Need 6 characters';
+ }
+ if (checkLoginValidity(value) === true) {
+ return true;
+ } else if (checkEmailValidity(value) === true) {
+ return true;
+ } else {
+ return 'Not valid: characters, numbers, "_-." and email format: you@example.com';
+ }
+}
+
+export function getLoginType(value: string): string {
+ if (isNullOrUndefined(value) || value.length <6 ) {
+ return 'Username/E-mail';
+ }
+ if (checkLoginValidity(value) === true) {
+ return 'Username';
+ } else if (checkEmailValidity(value) === true) {
+ return 'E-mail';
+ }
+ return 'Username/E-mail';
+}
diff --git a/front/src/environments/environment.prod.ts b/front/src/environments/environment.prod.ts
index c4a0c76..496f691 100644
--- a/front/src/environments/environment.prod.ts
+++ b/front/src/environments/environment.prod.ts
@@ -12,6 +12,7 @@ export const environment = {
karusic: `${location.origin}/karusic/api`,
karso: `${location.origin}/karso/api`,
},
+ ssoSite: `${location.origin}/karso/`,
ssoSignIn: `${location.origin}/karso/signin/karusic/`,
ssoSignUp: `${location.origin}/karso/signup/karusic/`,
ssoSignOut: `${location.origin}/karso/signout/karusic/`,
diff --git a/front/src/environments/environment.ts b/front/src/environments/environment.ts
index da6dfbc..54c16ce 100644
--- a/front/src/environments/environment.ts
+++ b/front/src/environments/environment.ts
@@ -3,18 +3,21 @@
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
// The list of which env maps to which file can be found in `.angular-cli.json`.
+const serverSSOAddress = 'http://atria-soft.org'
+
const environment_back_prod = {
production: false,
// URL of development API
applName: "karusic",
defaultServer: "karusic",
server: {
- karusic: 'http://192.168.1.156/karusic/api',
- karso: 'http://192.168.1.156/karso/api',
+ karusic: `${serverSSOAddress}/karusic/api`,
+ karso: `${serverSSOAddress}/karso/api`,
},
- ssoSignIn: 'http://192.168.1.156/karso/signin/karusic-dev/',
- ssoSignUp: 'http://192.168.1.156/karso/signup/karusic-dev/',
- ssoSignOut: 'http://192.168.1.156/karso/signout/karusic-dev/',
+ ssoSite: `${serverSSOAddress}/karso/`,
+ ssoSignIn: `${serverSSOAddress}/karso/signin/karusic-dev/`,
+ ssoSignUp: `${serverSSOAddress}/karso/signup/karusic-dev/`,
+ ssoSignOut: `${serverSSOAddress}/karso/signout/karusic-dev/`,
tokenStoredInPermanentStorage: false,
};
@@ -25,11 +28,12 @@ const environment_local = {
defaultServer: "karusic",
server: {
karusic: 'http://localhost:19080/karusic/api',
- karso: 'http://192.168.1.156/karso/api',
+ karso: `${serverSSOAddress}/karso/api`,
},
- ssoSignIn: 'http://192.168.1.156/karso/signin/karusic-dev/',
- ssoSignUp: 'http://192.168.1.156/karso/signup/karusic-dev/',
- ssoSignOut: 'http://192.168.1.156/karso/signout/karusic-dev/',
+ ssoSite: `${serverSSOAddress}/karso/`,
+ ssoSignIn: `${serverSSOAddress}/karso/signin/karusic-dev/`,
+ ssoSignUp: `${serverSSOAddress}/karso/signup/karusic-dev/`,
+ ssoSignOut: `${serverSSOAddress}/karso/signout/karusic-dev/`,
tokenStoredInPermanentStorage: false,
};
@@ -42,6 +46,7 @@ const environment_full_local = {
karusic: 'http://localhost:19080/karusic/api',
karso: 'http://localhost:15080/karso/api',
},
+ ssoSite: `${serverSSOAddress}/karso/`,
ssoSignIn: 'http://localhost:4200/signin/karusic-dev/',
ssoSignUp: 'http://localhost:4200/signup/karusic-dev/',
ssoSignOut: 'http://localhost:4200/signout/karusic-dev/',
@@ -54,13 +59,15 @@ const environment_hybrid = {
applName: "karusic",
defaultServer: "karusic",
server: {
- karusic: 'http://192.168.1.156/karusic/api',
- karso: 'http://192.168.1.156/karso/api',
+ karusic: `${serverSSOAddress}/karusic/api`,
+ karso: `${serverSSOAddress}/karso/api`,
},
+ ssoSite: `${serverSSOAddress}/karso/`,
ssoSignIn: 'http://localhost:4200/signin/karusic-dev/',
ssoSignUp: 'http://localhost:4200/signup/karusic-dev/',
ssoSignOut: 'http://localhost:4200/signout/karusic-dev/',
tokenStoredInPermanentStorage: false,
};
-export const environment = environment_back_prod;
+
+export const environment = environment_local;
+
diff --git a/front/src/common/scene/sso/sso.less b/front/src/common/scene/sso/sso.less
index 2d1d549..fc679ad 100644
--- a/front/src/common/scene/sso/sso.less
+++ b/front/src/common/scene/sso/sso.less
@@ -1,16 +1,16 @@
-
-.full{
- width:100%;
- height:100%;
- right:0;
- margin:0;
- padding:0;
- border:0;
- float:right;
- display:block;
+.full {
+ width: 100%;
+ height: 100%;
+ right: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ float: right;
+ display: block;
}
-input[type=text], input[type=password] {
+input[type='text'],
+input[type='password'] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
@@ -33,7 +33,6 @@ input[type=text], input[type=password] {
margin: 15px 0 0 0;
}
-
.imgContainer {
text-align: center;
margin: 15px 0 0 0;
@@ -58,7 +57,7 @@ span.psw {
}
.forgot {
- color: #00B;
+ color: #00b;
font-size: 14px;
float: right;
buttum: 0;
@@ -77,18 +76,19 @@ span.psw {
border-style: solid;
border-width: 0px;
box-sizing: border-box;
-
- &:after, &:before {
+
+ &:after,
+ &:before {
bottom: 100%;
left: 25px;
border: solid transparent;
- content: " ";
+ content: ' ';
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
-
+
&:after {
border-bottom-color: #f44336;
border-width: 10px;
@@ -96,14 +96,13 @@ span.psw {
}
}
-
.container-global {
- position:relative;
- max-width:400px;
+ position: relative;
+ max-width: 400px;
padding: 16px 32px 16px 32px;
-
+
top: 50%;
left: 50%;
- transform: ~"translate(-50%, -50%)";
+ transform: ~'translate(-50%, -50%)';
box-shadow: 0px 8px 20px 0 rgba(0, 0, 0, 0.9);
-}
\ No newline at end of file
+}
diff --git a/front/src/common/scene/sso/sso.ts b/front/src/common/scene/sso/sso.ts
index 3bca6f3..11a3a1f 100644
--- a/front/src/common/scene/sso/sso.ts
+++ b/front/src/common/scene/sso/sso.ts
@@ -11,20 +11,21 @@ import { SSOService, UserService } from 'common/service';
@Component({
selector: 'app-sso',
templateUrl: './sso.html',
- styleUrls: [ './sso.less' ]
+ styleUrls: ['./sso.less'],
})
export class SsoScene implements OnInit {
ssoData: string;
token: string;
- keepConnected: boolean
- userName: string
-
+ keepConnected: boolean;
+ userName: string;
+
constructor(
private router: Router,
private route: ActivatedRoute,
private ssoService: SSOService,
- private userService: UserService) {
- console.error("retreive data after SSO");
+ private userService: UserService
+ ) {
+ console.error('retreive data after SSO');
}
ngOnInit() {
@@ -52,34 +53,33 @@ export class SsoScene implements OnInit {
console.log(`token: '${token}'`);
console.log(`keepConnected: '${keepConnected}'`);
if (this.token !== '__CANCEL__' && this.token !== '__FAIL__' && this.token !== '__LOGOUT__') {
- const destination = (this.ssoData);
+ const destination = this.ssoData;
console.log(`ssoData (decoded): '${destination}'`);
const realDst = this.ssoService.unHashLocalData(destination);
console.log(`realDst: '${realDst}'`);
- this.userService.startSession(this.token, this.keepConnected).then((userName: string) => {
- self.userName = userName;
- setTimeout(function(){
- self.router.navigate([ realDst ], { replaceUrl:true });
- }, 500); // 2 seconds
- }).catch(() => {
- this.token = "ERROR_ME";
- })
+ this.userService
+ .startSession(this.token, this.keepConnected)
+ .then((userName: string) => {
+ self.userName = userName;
+ setTimeout(function () {
+ self.router.navigate([realDst], { replaceUrl: true });
+ }, 500); // 2 seconds
+ })
+ .catch(() => {
+ this.token = 'ERROR_ME';
+ });
} else if (this.token === '__LOGOUT__') {
this.userService.removeSession();
- const destination = (this.ssoData);
+ const destination = this.ssoData;
console.error(`ssoData (decoded): '${destination}'`);
// sample : ZZ**DST:home
const realDst = this.ssoService.unHashLocalData(destination);
console.error(`realDst: '${realDst}'`);
- setTimeout(function(){
- self.router.navigate([ realDst ], { replaceUrl:true });
+ setTimeout(function () {
+ self.router.navigate([realDst], { replaceUrl: true });
}, 500); // 2 seconds
} else {
this.userService.removeSession();
}
}
-
-
}
-
-
diff --git a/front/src/common/service/bdd.ts b/front/src/common/service/bdd.ts
index b28add6..f97a864 100644
--- a/front/src/common/service/bdd.ts
+++ b/front/src/common/service/bdd.ts
@@ -9,7 +9,6 @@ import { HttpWrapperService } from 'common/service/http-wrapper';
import { isNullOrUndefined } from 'common/utils';
import { DataInterface } from 'common/utils/dataInterface';
-
@Injectable()
export class BddService {
private bdd = {};
@@ -25,15 +24,16 @@ export class BddService {
let self = this;
return new Promise((resolve, reject) => {
self.get(name)
- .then((response:DataInterface) => {
+ .then((response: DataInterface) => {
let responseTmp = response;
- ret.then((response2) => {
+ ret.then(response2 => {
responseTmp.add(response2);
resolve(response2);
- }).catch((response2) => {
+ }).catch(response2 => {
reject(response2);
});
- }).catch((response) => {
+ })
+ .catch(response => {
reject(response);
});
});
@@ -43,15 +43,16 @@ export class BddService {
let self = this;
return new Promise((resolve, reject) => {
self.get(name)
- .then((response:DataInterface) => {
+ .then((response: DataInterface) => {
let responseTmp = response;
- ret.then((response2) => {
+ ret.then(response2 => {
responseTmp.set(id, response2);
resolve(response2);
- }).catch((response2) => {
+ }).catch(response2 => {
reject(response2);
});
- }).catch((response) => {
+ })
+ .catch(response => {
reject(response);
});
});
@@ -59,9 +60,10 @@ export class BddService {
asyncSetInDB(name: string, id: number, data: any) {
let self = this;
self.get(name)
- .then((response:DataInterface) => {
+ .then((response: DataInterface) => {
response.set(id, data);
- }).catch((response) => {
+ })
+ .catch(response => {
// nothing to do ...
});
}
@@ -70,15 +72,16 @@ export class BddService {
let self = this;
return new Promise((resolve, reject) => {
self.get(name)
- .then((response:DataInterface) => {
+ .then((response: DataInterface) => {
let responseTmp = response;
- ret.then((response2) => {
+ ret.then(response2 => {
responseTmp.delete(id);
resolve(response2);
- }).catch((response2) => {
+ }).catch(response2 => {
reject(response2);
});
- }).catch((response) => {
+ })
+ .catch(response => {
reject(response);
});
});
@@ -87,56 +90,63 @@ export class BddService {
get(name: string): Promise