Coverity-CWE 330: Use of Insufficiently Random Values
[osm/NG-UI.git] / src / services / SharedService.ts
index 53078b5..8fb51bf 100644 (file)
@@ -39,6 +39,7 @@ import {
 import { environment } from 'environment';
 import * as HttpStatus from 'http-status-codes';
 import * as untar from 'js-untar';
+import { ActiveToast, ToastrService } from 'ngx-toastr';
 import * as pako from 'pako';
 import { RestService } from 'RestService';
 import { Observable } from 'rxjs';
@@ -98,6 +99,15 @@ export class SharedService {
     /** Holds OSM Version value @public */
     public osmVersion: string;
 
+    /** Holds Last Login Toaster Message @public */
+    public lastLoginMessage: string;
+
+    /** Holds Failed Attempts Toaster Message @public */
+    public failedAttemptsMessage: string;
+
+    /** Holds No Of Days Toaster Message @public */
+    public daysMessage: string;
+
     /** express number for time manupulation -2 */
     // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private epochTimeMinus2: number = -2;
@@ -106,31 +116,54 @@ export class SharedService {
     // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private epochTime1000: number = 1000;
 
+    /** express number for time manupulation 60 */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
+    private epochTime60: number = 60;
+
+    /** express number for time manupulation 24 */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
+    private epochTime24: number = 24;
+
     /** Random string generator length */
     // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private randomStringLength: number = 4;
 
+    /** express number for rgb manipulation */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
+    private colourHour: number = 10;
+
+    /** express number for rgb manipulation*/
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
+    private colourMin: number = 5;
+
     /** Instance of the rest service @private */
     private restService: RestService;
 
     /** Service holds the router information @private */
     private router: Router;
 
-    /** Random color string generator length @private */
-    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
-    private colorStringLength: number = 256;
-
     /** Check for the root directory @private */
     // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     private directoryCount: number = 2;
 
+    /** express number for time manupulation 1000 */
+    private toasterSettings: {} = {
+        enableHtml: true,
+        closeButton: true,
+        timeOut: 2000
+    };
+
     /** Contains tranlsate instance @private */
     private translateService: TranslateService;
 
-    constructor(restService: RestService, router: Router, translateService: TranslateService) {
+    /** Contains toaster instance @private */
+    private toaster: ToastrService;
+
+    constructor(restService: RestService, router: Router, translateService: TranslateService, toaster: ToastrService) {
         this.restService = restService;
         this.router = router;
         this.translateService = translateService;
+        this.toaster = toaster;
     }
 
     /** convert epoch time function @public */
@@ -153,6 +186,56 @@ export class SharedService {
         return this.translateService.instant('NODATE');
     }
 
+    /** convert epoch time function to No of days @public */
+    public converEpochToDays(date: string): number {
+        if (!isNullOrUndefined(date)) {
+            const today: Date = new Date();
+            const accountDate: Date = new Date(date);
+            const toasterDate: number = (accountDate.getTime() -
+                today.getTime()) / this.epochTime1000 / this.epochTime60 / this.epochTime60 / this.epochTime24;
+            if (toasterDate >= 0 || toasterDate < 1) {
+                return Math.round(toasterDate);
+            }
+            return Math.floor(toasterDate);
+        }
+        return this.translateService.instant('N/A');
+    }
+
+    /** show toaster for password & account expiry @public */
+    public showToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
+        accountNoOfDays: string, passwordExpireMessage: string, accountExpireMessage: string,
+        passwordMessage: string, accountMessage: string): ActiveToast<string> {
+        this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
+        this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
+        return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
+            '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
+            '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage +
+            '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
+            this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
+    }
+
+    /** show toaster for password expiry @public */
+    public passwordToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
+        passwordExpireMessage: string, passwordMessage: string): ActiveToast<string> {
+        this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
+        this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
+        return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
+            '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
+            '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage,
+            this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
+    }
+
+    /** show toaster for account expiry @public */
+    public accountToaster(lastLogin: string, failedAttempts: string,
+        accountNoOfDays: string, accountExpireMessage: string, accountMessage: string): ActiveToast<string> {
+        this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
+        this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
+        return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
+            '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
+            '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
+            this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
+    }
+
     /** Download Files function @public */
     public downloadFiles(name: string, binaryData: Blob[], filetype: string): void {
         const downloadLink: HTMLAnchorElement = document.createElement('a');
@@ -177,10 +260,9 @@ export class SharedService {
 
     /** Generate random string @public */
     public randomString(): string {
-        const chars: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
         let result: string = '';
         for (let randomStringRef: number = this.randomStringLength; randomStringRef > 0; --randomStringRef) {
-            result += chars[Math.floor(Math.random() * chars.length)];
+            result += new Date().getSeconds();
         }
         return result;
     }
@@ -331,6 +413,7 @@ export class SharedService {
             const version: string[] = res.version.split('+');
             if (!isNullOrUndefined(version[0])) {
                 this.osmVersion = version[0];
+                sessionStorage.setItem('version', version[0]);
             } else {
                 this.osmVersion = null;
             }
@@ -342,9 +425,9 @@ export class SharedService {
 
     /** Random RGB color code generator @public */
     public generateColor(): string {
-        const x: number = Math.floor(Math.random() * this.colorStringLength);
-        const y: number = Math.floor(Math.random() * this.colorStringLength);
-        const z: number = Math.floor(Math.random() * this.colorStringLength);
+        const x: number = Math.floor((new Date().getHours()) * this.colourHour);
+        const y: number = Math.floor((new Date().getMinutes()) * this.colourMin);
+        const z: number = Math.floor((new Date().getSeconds()) * this.colourMin);
         return 'rgb(' + x + ',' + y + ',' + z + ')';
     }
 
@@ -385,6 +468,19 @@ export class SharedService {
         }));
     }
 
+    /** Sorting the list based on date @public */
+    public compareFunction = (dir: number, a: string, b: string): number => {
+        const first: number = new Date(a).getTime();
+        const second: number = new Date(b).getTime();
+        if (first < second) {
+            return -1 * dir;
+        }
+        if (first > second) {
+            return dir;
+        }
+        return 0;
+    };
+
     /** Method to validate file extension and size @private */
     private vaildataFileInfo(fileInfo: File, fileType: string): boolean {
         const extension: string = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1);