blob: 2a87382b4dcf1ad2e8867dfc1a43af079922159c [file] [log] [blame]
kumaran.m3b4814a2020-05-01 19:48:54 +05301/*
2 Copyright 2020 TATA ELXSI
3
4 Licensed under the Apache License, Version 2.0 (the 'License');
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
17 */
18/**
19 * @file Provider for Shared Service
20 */
21import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';
22import { EventEmitter, Injectable, Output } from '@angular/core';
23import { FormArray, FormGroup } from '@angular/forms';
24import { Router } from '@angular/router';
Barath Kumar R09cd4ec2020-07-07 16:12:32 +053025import { TranslateService } from '@ngx-translate/core';
Barath Kumar R16070582021-02-08 18:19:35 +053026import {
27 CONSTANTNUMBER,
28 DOMAINS,
29 ERRORDATA,
30 FILESETTINGS,
31 GETAPIURLHEADER,
32 PACKAGEINFO,
33 PAGERSMARTTABLE,
34 SMARTTABLECLASS,
35 TARSETTINGS,
36 TYPESECTION
37} from 'CommonModel';
kumaran.m3b4814a2020-05-01 19:48:54 +053038import { environment } from 'environment';
39import * as HttpStatus from 'http-status-codes';
40import * as untar from 'js-untar';
SANDHYA.JS1b17c432023-04-26 17:54:57 +053041import { ActiveToast, ToastrService } from 'ngx-toastr';
kumaran.m3b4814a2020-05-01 19:48:54 +053042import * as pako from 'pako';
43import { RestService } from 'RestService';
Barath Kumar R16070582021-02-08 18:19:35 +053044import { Observable } from 'rxjs';
45import { map } from 'rxjs/operators';
kumaran.m3b4814a2020-05-01 19:48:54 +053046
47/** This is added globally by the tar.js library */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053048// eslint-disable-next-line @typescript-eslint/no-explicit-any
kumaran.m3b4814a2020-05-01 19:48:54 +053049declare const Tar: any;
50
51/**
52 * An Injectable is a class adorned with the @Injectable decorator function.
53 * @Injectable takes a metadata object that tells Angular how to compile and run module code
54 */
55@Injectable({
56 providedIn: 'root'
57})
58/** Exporting a class @exports SharedService */
59export class SharedService {
60 /** call the parent using event information @private */
61 @Output() public dataEvent: EventEmitter<{}> = new EventEmitter<{}>();
62
63 /** Variables to hold regexp pattern for URL */
kumaran.m3b4814a2020-05-01 19:48:54 +053064 public REGX_URL_PATTERN: RegExp = new RegExp(/^(http?|ftp|https):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.[a-zA-Z0-9]{2,15})(:((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4})))*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/);
65
66 /** Variables to hold regexp pattern for IP Address */
67 public REGX_IP_PATTERN: RegExp = new RegExp(/^(?:(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(?!$)|$)){4}$/);
68
69 /** Variables to hold regexp pattern for Port Number */
kumaran.m3b4814a2020-05-01 19:48:54 +053070 public REGX_PORT_PATTERN: RegExp = new RegExp(/^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$/);
71
72 /** Variables to hold regexp pattern for DPID */
73 public REGX_DPID_PATTERN: RegExp = new RegExp(/^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}$/);
74
75 /** Variable to hold regexp pattern for password */
kumaran.m3b4814a2020-05-01 19:48:54 +053076 public REGX_PASSWORD_PATTERN: RegExp = new RegExp(/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/);
77
Barath Kumar R1245fc82021-04-16 13:34:06 +053078 /** Variables to hold regexp pattern for Latitude */
79 public REGX_LAT_PATTERN: RegExp = new RegExp(/^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,15})?))$/);
80
81 /** Variables to hold regexp pattern for Longitude */
Barath Kumar R1245fc82021-04-16 13:34:06 +053082 public REGX_LONG_PATTERN: RegExp = new RegExp(/^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,15})?))$/);
83
SANDHYA.JS6c686082024-06-10 21:39:41 +053084 /** Variable to hold regexp pattern for EMAIL */
85 public REGX_EMAIL_PATTERN: RegExp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
86
Barath Kumar R403234e2020-07-07 15:48:58 +053087 /** Variables to hold maxlength for the description @public */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053088 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
Barath Kumar R403234e2020-07-07 15:48:58 +053089 public MAX_LENGTH_DESCRIPTION: number = 500;
90
91 /** Variables to hold maxlength for the name @public */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053092 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
Barath Kumar R403234e2020-07-07 15:48:58 +053093 public MAX_LENGTH_NAME: number = 50;
94
kumaran.m3b4814a2020-05-01 19:48:54 +053095 /** FormGroup instance added to the form @ html @public */
96 public formGroup: FormGroup;
97
98 /** Controls the go to top button on scroll @public */
99 public showGotoTop: boolean;
100
101 /** Holds OSM Version value @public */
102 public osmVersion: string;
103
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530104 /** Holds Last Login Toaster Message @public */
105 public lastLoginMessage: string;
106
107 /** Holds Failed Attempts Toaster Message @public */
108 public failedAttemptsMessage: string;
109
110 /** Holds No Of Days Toaster Message @public */
111 public daysMessage: string;
112
kumaran.m3b4814a2020-05-01 19:48:54 +0530113 /** express number for time manupulation -2 */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530114 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530115 private epochTimeMinus2: number = -2;
116
117 /** express number for time manupulation 1000 */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530118 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530119 private epochTime1000: number = 1000;
120
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530121 /** express number for time manupulation 60 */
122 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
123 private epochTime60: number = 60;
124
125 /** express number for time manupulation 24 */
126 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
127 private epochTime24: number = 24;
128
kumaran.m3b4814a2020-05-01 19:48:54 +0530129 /** Random string generator length */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530130 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530131 private randomStringLength: number = 4;
132
SANDHYA.JSfaf168f2024-03-07 23:08:48 +0530133 /** express number for rgb manipulation */
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530134 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
SANDHYA.JSfaf168f2024-03-07 23:08:48 +0530135 private colourHour: number = 10;
136
137 /** express number for rgb manipulation*/
138 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
139 private colourMin: number = 5;
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530140
kumaran.m3b4814a2020-05-01 19:48:54 +0530141 /** Instance of the rest service @private */
142 private restService: RestService;
143
144 /** Service holds the router information @private */
145 private router: Router;
146
147 /** Check for the root directory @private */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530148 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530149 private directoryCount: number = 2;
150
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530151 /** express number for time manupulation 1000 */
152 private toasterSettings: {} = {
153 enableHtml: true,
154 closeButton: true,
155 timeOut: 2000
156 };
157
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530158 /** Contains tranlsate instance @private */
159 private translateService: TranslateService;
160
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530161 /** Contains toaster instance @private */
162 private toaster: ToastrService;
163
164 constructor(restService: RestService, router: Router, translateService: TranslateService, toaster: ToastrService) {
kumaran.m3b4814a2020-05-01 19:48:54 +0530165 this.restService = restService;
166 this.router = router;
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530167 this.translateService = translateService;
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530168 this.toaster = toaster;
kumaran.m3b4814a2020-05-01 19:48:54 +0530169 }
170
171 /** convert epoch time function @public */
172 public convertEpochTime(unixtimestamp: number): string {
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530173 if (!isNullOrUndefined(unixtimestamp)) {
174 const monthsArr: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
175 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
176 const date: Date = new Date(unixtimestamp * this.epochTime1000);
177 const year: number = date.getFullYear();
178 const month: string = monthsArr[date.getMonth()];
179 const day: number = date.getDate();
180 const hours: number = date.getHours();
181 const minutes: string = '0' + date.getMinutes();
182 const seconds: string = '0' + date.getSeconds();
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530183 // eslint-disable-next-line deprecation/deprecation
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530184 return month + '-' + day + '-' + year + ' ' + hours + ':' + minutes.substr(this.epochTimeMinus2) + ':'
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530185 // eslint-disable-next-line deprecation/deprecation
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530186 + seconds.substr(this.epochTimeMinus2);
187 }
188 return this.translateService.instant('NODATE');
kumaran.m3b4814a2020-05-01 19:48:54 +0530189 }
190
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530191 /** convert epoch time function to No of days @public */
192 public converEpochToDays(date: string): number {
193 if (!isNullOrUndefined(date)) {
194 const today: Date = new Date();
195 const accountDate: Date = new Date(date);
SANDHYA.JSc6c72e32023-10-12 11:29:52 +0530196 const toasterDate: number = (accountDate.getTime() -
197 today.getTime()) / this.epochTime1000 / this.epochTime60 / this.epochTime60 / this.epochTime24;
198 if (toasterDate >= 0 || toasterDate < 1) {
199 return Math.round(toasterDate);
200 }
201 return Math.floor(toasterDate);
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530202 }
203 return this.translateService.instant('N/A');
204 }
205
206 /** show toaster for password & account expiry @public */
207 public showToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
208 accountNoOfDays: string, passwordExpireMessage: string, accountExpireMessage: string,
209 passwordMessage: string, accountMessage: string): ActiveToast<string> {
210 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
211 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
212 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
213 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
214 '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage +
215 '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
216 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
217 }
218
219 /** show toaster for password expiry @public */
220 public passwordToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
221 passwordExpireMessage: string, passwordMessage: string): ActiveToast<string> {
222 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
223 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
224 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
225 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
226 '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage,
227 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
228 }
229
230 /** show toaster for account expiry @public */
231 public accountToaster(lastLogin: string, failedAttempts: string,
232 accountNoOfDays: string, accountExpireMessage: string, accountMessage: string): ActiveToast<string> {
233 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
234 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
235 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
236 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
237 '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
238 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
239 }
240
kumaran.m3b4814a2020-05-01 19:48:54 +0530241 /** Download Files function @public */
Barath Kumar R063a3f12020-12-29 16:35:09 +0530242 public downloadFiles(name: string, binaryData: Blob[], filetype: string): void {
kumaran.m3b4814a2020-05-01 19:48:54 +0530243 const downloadLink: HTMLAnchorElement = document.createElement('a');
244 downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, { type: filetype }));
Barath Kumar R063a3f12020-12-29 16:35:09 +0530245 if (name !== undefined) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530246 // eslint-disable-next-line @typescript-eslint/no-explicit-any
247 const newVariable: any = window.navigator;
248 if (newVariable.msSaveOrOpenBlob) {
SANDHYA.JSb5347152024-10-15 11:41:45 +0530249 if (filetype === 'text/plain') {
250 newVariable.msSaveBlob(new Blob(binaryData, { type: 'text/yaml' }), 'OSM_Export_' + name + '.yaml');
251 } else {
252 newVariable.msSaveBlob(new Blob(binaryData, { type: filetype }), 'OSM_Export_' + name + '.tar.gz');
253 }
kumaran.m3b4814a2020-05-01 19:48:54 +0530254 } else {
SANDHYA.JSb5347152024-10-15 11:41:45 +0530255 if (filetype === 'text/plain') {
256 downloadLink.setAttribute('download', 'OSM_Export_' + name + '.yaml');
257 } else {
258 downloadLink.setAttribute('download', 'OSM_Export_' + name + '.tar.gz');
259 }
kumaran.m3b4814a2020-05-01 19:48:54 +0530260 document.body.appendChild(downloadLink);
261 downloadLink.click();
262 }
263 }
264 }
265
266 /** Call this method after delete perform action is completed in the ng-smart-table data @public */
267 public callData(): void {
268 this.dataEvent.emit();
269 }
270
271 /** Generate random string @public */
272 public randomString(): string {
kumaran.m3b4814a2020-05-01 19:48:54 +0530273 let result: string = '';
kumaran.m3b4814a2020-05-01 19:48:54 +0530274 for (let randomStringRef: number = this.randomStringLength; randomStringRef > 0; --randomStringRef) {
SANDHYA.JSfaf168f2024-03-07 23:08:48 +0530275 result += new Date().getSeconds();
kumaran.m3b4814a2020-05-01 19:48:54 +0530276 }
277 return result;
278 }
Barath Kumar R16070582021-02-08 18:19:35 +0530279
kumaran.m3b4814a2020-05-01 19:48:54 +0530280 /** Function to read uploaded file String @public */
281 public async getFileString(files: FileList, fileType: string): Promise<string | ArrayBuffer> {
282 const reader: FileReader = new FileReader();
283 return new Promise<string | ArrayBuffer>((resolve: Function, reject: Function): void => {
284 if (this.vaildataFileInfo(files[0], fileType)) {
285 this.readFileContent(reader, files[0], fileType);
286 } else {
287 reject('typeError');
288 }
289 reader.onload = (): void => {
290 if (reader.result === null) {
291 reject('contentError');
292 }
293 resolve(reader.result);
294 };
295 reader.onerror = (event: Event): void => {
296 reject('contentError');
297 };
298 });
299 }
Barath Kumar R16070582021-02-08 18:19:35 +0530300
kumaran.m3b4814a2020-05-01 19:48:54 +0530301 /** Method to handle tar and tar.gz file for shared YAML file content @public */
302 public async targzFile(packageInfo: PACKAGEINFO): Promise<string | ArrayBuffer> {
303 return new Promise<string | ArrayBuffer>((resolve: Function, reject: Function): void => {
304 const httpOptions: GETAPIURLHEADER = this.getHttpOptions();
305 let apiUrl: string = '';
306 apiUrl = packageInfo.packageType === 'nsd' ? environment.NSDESCRIPTORS_URL + '/' + packageInfo.id + '/nsd_content' :
307 environment.VNFPACKAGES_URL + '/' + packageInfo.id + '/package_content';
Barath Kumar R16070582021-02-08 18:19:35 +0530308 this.restService.getResource(apiUrl, httpOptions).subscribe((response: ArrayBuffer): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530309 try {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530310 // eslint-disable-next-line @typescript-eslint/no-explicit-any
kumaran.m3b4814a2020-05-01 19:48:54 +0530311 const tar: any = new Tar();
312 const originalInput: Uint8Array = pako.inflate(response, { to: 'Uint8Array' });
Barath Kumar R16070582021-02-08 18:19:35 +0530313 untar(originalInput.buffer).then((extractedFiles: TARSETTINGS[]): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530314 const getFoldersFiles: {}[] = extractedFiles;
315 const folderNameStr: string = extractedFiles[0].name;
Barath Kumar R16070582021-02-08 18:19:35 +0530316 getFoldersFiles.forEach((value: TARSETTINGS): void => {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530317 const fileValueObj: FILESETTINGS = this.createFileValueObject(value);
kumaran.m3b4814a2020-05-01 19:48:54 +0530318 const getRootFolder: string[] = value.name.split('/');
319 if (value.name.startsWith(folderNameStr) &&
320 (value.name.endsWith('.yaml') || value.name.endsWith('.yml')) &&
321 getRootFolder.length === this.directoryCount) {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530322 tar.append(value.name, packageInfo.descriptor, fileValueObj);
kumaran.m3b4814a2020-05-01 19:48:54 +0530323 } else {
324 if (value.type !== 'L') {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530325 tar.append(value.name, new Uint8Array(value.buffer), fileValueObj);
kumaran.m3b4814a2020-05-01 19:48:54 +0530326 }
327 }
328 });
329 const out: Uint8Array = tar.out;
330 const originalOutput: Uint8Array = pako.gzip(out);
331 resolve(originalOutput.buffer);
Barath Kumar R16070582021-02-08 18:19:35 +0530332 }, (err: string): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530333 reject('');
334 });
335 } catch (e) {
336 reject('');
337 }
Barath Kumar R16070582021-02-08 18:19:35 +0530338 }, (error: HttpErrorResponse): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530339 if (error.status === HttpStatus.NOT_FOUND || error.status === HttpStatus.UNAUTHORIZED) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530340 this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
341 // Catch Navigation Error
342 });
kumaran.m3b4814a2020-05-01 19:48:54 +0530343 } else {
344 this.restService.handleError(error, 'get');
345 reject('');
346 }
347 });
348 });
349 }
Barath Kumar R16070582021-02-08 18:19:35 +0530350
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530351 /** Method to return the file information @public */
352 public createFileValueObject(value: TARSETTINGS): FILESETTINGS {
353 return {
354 type: value.type,
355 linkname: value.linkname,
356 owner: value.uname,
357 group: value.gname
358 };
359 }
Barath Kumar R16070582021-02-08 18:19:35 +0530360
kumaran.m3b4814a2020-05-01 19:48:54 +0530361 /** Method to check given string is JSON or not @public */
362 public checkJson(jsonString: string): boolean {
363 jsonString = jsonString.replace(/'/g, '"');
364 try {
365 JSON.parse(jsonString);
366 } catch (e) {
367 return false;
368 }
369 return true;
370 }
Barath Kumar R16070582021-02-08 18:19:35 +0530371
kumaran.m3b4814a2020-05-01 19:48:54 +0530372 /** Clean the form before submit @public */
Barath Kumar Rd477b852020-07-07 15:24:05 +0530373 public cleanForm(formGroup: FormGroup, formName?: String): void {
kumaran.m3b4814a2020-05-01 19:48:54 +0530374 Object.keys(formGroup.controls).forEach((key: string) => {
Barath Kumar Rd477b852020-07-07 15:24:05 +0530375 if ((!isNullOrUndefined((formGroup.get(key) as FormArray | FormGroup).controls)) && key !== 'config') {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530376 // eslint-disable-next-line @typescript-eslint/no-shadow
kumaran.m3b4814a2020-05-01 19:48:54 +0530377 for (const { item, index } of (formGroup.get(key).value).map((item: {}, index: number) => ({ item, index }))) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530378 // eslint-disable-next-line security/detect-object-injection
kumaran.m3b4814a2020-05-01 19:48:54 +0530379 const newFormGroup: FormGroup = (formGroup.get(key) as FormArray).controls[index] as FormGroup;
380 this.cleanForm(newFormGroup);
381 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530382 } else if (formGroup.get(key).value !== undefined && formGroup.get(key).value !== null && key !== 'config') {
kumaran.m3b4814a2020-05-01 19:48:54 +0530383 if (!Array.isArray(formGroup.get(key).value)) {
384 if (typeof formGroup.get(key).value === 'string') {
385 formGroup.get(key).setValue(formGroup.get(key).value.trim());
386 }
387 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530388 } else if (key === 'config' && formName === 'vim') {
kumaran.m3b4814a2020-05-01 19:48:54 +0530389 const newFormGroup: FormGroup = formGroup.get(key) as FormGroup;
390 this.cleanForm(newFormGroup);
391 }
392 });
393 }
Barath Kumar R16070582021-02-08 18:19:35 +0530394
kumaran.m3b4814a2020-05-01 19:48:54 +0530395 /** Method to return the config of pager value for ngSmarttable @public */
396 public paginationPagerConfig(): PAGERSMARTTABLE {
397 return {
398 display: true,
399 perPage: environment.paginationNumber
400 };
401 }
Barath Kumar R16070582021-02-08 18:19:35 +0530402
kumaran.m3b4814a2020-05-01 19:48:54 +0530403 /** Method to return the class for the table for ngSmarttable @public */
404 public tableClassConfig(): SMARTTABLECLASS {
405 return {
406 class: 'table list-data'
407 };
408 }
Barath Kumar R16070582021-02-08 18:19:35 +0530409
kumaran.m3b4814a2020-05-01 19:48:54 +0530410 /** Method to return all languages name and its code @public */
411 public languageCodeList(): {}[] {
412 return [
413 { code: 'en', language: 'English' },
414 { code: 'es', language: 'Spanish' },
415 { code: 'pt', language: 'Portuguese' },
416 { code: 'de', language: 'German' }
417 ];
418 }
Barath Kumar R16070582021-02-08 18:19:35 +0530419
kumaran.m3b4814a2020-05-01 19:48:54 +0530420 /** Fetch OSM Version @public */
421 public fetchOSMVersion(): void {
Barath Kumar R16070582021-02-08 18:19:35 +0530422 this.restService.getResource(environment.OSM_VERSION_URL).subscribe((res: { version: string }): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530423 const version: string[] = res.version.split('+');
424 if (!isNullOrUndefined(version[0])) {
425 this.osmVersion = version[0];
SANDHYA.JS995c6722024-03-08 12:14:11 +0530426 sessionStorage.setItem('version', version[0]);
kumaran.m3b4814a2020-05-01 19:48:54 +0530427 } else {
428 this.osmVersion = null;
429 }
Barath Kumar R16070582021-02-08 18:19:35 +0530430 }, (error: ERRORDATA): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530431 this.osmVersion = null;
432 this.restService.handleError(error, 'get');
433 });
434 }
Barath Kumar R16070582021-02-08 18:19:35 +0530435
Barath Kumar R208bef22020-07-07 12:28:04 +0530436 /** Random RGB color code generator @public */
437 public generateColor(): string {
SANDHYA.JSfaf168f2024-03-07 23:08:48 +0530438 const x: number = Math.floor((new Date().getHours()) * this.colourHour);
439 const y: number = Math.floor((new Date().getMinutes()) * this.colourMin);
440 const z: number = Math.floor((new Date().getSeconds()) * this.colourMin);
Barath Kumar R208bef22020-07-07 12:28:04 +0530441 return 'rgb(' + x + ',' + y + ',' + z + ')';
442 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530443
444 /** Add custom name/tag to the dropdown @public */
445 public addCustomTag(tag: string): string {
446 return tag;
447 }
448
Barath Kumar Rd22b0942020-07-14 11:05:24 +0530449 /** Fetch file extension @public */
450 public fetchFileExtension(fileInfo: FileList): string {
451 return fileInfo[0].name.substring(fileInfo[0].name.lastIndexOf('.') + 1);
452 }
453
Barath Kumar R16070582021-02-08 18:19:35 +0530454 /** Get domain name @private */
455 public getDomainName(): Observable<TYPESECTION[]> {
456 return this.restService.getResource(environment.DOMAIN_URL).pipe(map((domains: DOMAINS): TYPESECTION[] => {
457 const domainList: TYPESECTION[] = [];
458 try {
459 let domainNames: string[] = [];
460 if (!isNullOrUndefined(domains.project_domain_name)) {
461 domainNames = domainNames.concat(domains.project_domain_name.split(','));
462 }
463 if (!isNullOrUndefined(domains.user_domain_name)) {
464 domainNames = domainNames.concat(domains.user_domain_name.split(','));
465 }
466 domainNames = Array.from(new Set(domainNames));
467 if (domainNames.length > 0) {
468 domainNames.forEach((domainName: string): void => {
469 if (!domainName.endsWith(':ro')) {
470 domainList.push({ title: domainName, value: domainName });
471 }
472 });
473 }
474 return domainList;
475 } catch (e) {
476 return domainList;
477 }
478 }));
479 }
480
SANDHYA.JS5f8c8022023-10-13 11:45:25 +0530481 /** Sorting the list based on date @public */
482 public compareFunction = (dir: number, a: string, b: string): number => {
483 const first: number = new Date(a).getTime();
484 const second: number = new Date(b).getTime();
485 if (first < second) {
486 return -1 * dir;
487 }
488 if (first > second) {
489 return dir;
490 }
491 return 0;
492 };
493
SANDHYA.JS26570112024-07-05 21:35:46 +0530494 /** Method to validate file extension and size @public */
495 public vaildataFileInfo(fileInfo: File, fileType: string): boolean {
kumaran.m3b4814a2020-05-01 19:48:54 +0530496 const extension: string = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1);
497 const packageSize: number = CONSTANTNUMBER.oneMB * environment.packageSize;
Barath Kumar Rd477b852020-07-07 15:24:05 +0530498 if (fileType === 'yaml' && (extension.toLowerCase() === 'yaml' || extension.toLowerCase() === 'yml')
499 && fileInfo.size <= packageSize) {
500 return true;
501 } else if (extension.toLowerCase() === fileType && fileInfo.size <= packageSize) {
kumaran.m3b4814a2020-05-01 19:48:54 +0530502 return true;
503 }
504 return false;
505 }
Barath Kumar R16070582021-02-08 18:19:35 +0530506
kumaran.m3b4814a2020-05-01 19:48:54 +0530507 /** Method to read file content based on type @private */
508 private readFileContent(reader: FileReader, fileInfo: File, fileType: string): void {
509 if (fileType === 'gz') {
510 reader.readAsArrayBuffer(fileInfo);
511 } else {
512 reader.readAsText(fileInfo);
513 }
514 }
Barath Kumar R16070582021-02-08 18:19:35 +0530515
kumaran.m3b4814a2020-05-01 19:48:54 +0530516 /** Method to handle http options @public */
517 private getHttpOptions(): GETAPIURLHEADER {
518 return {
519 headers: new HttpHeaders({
520 Accept: 'application/gzip, application/json',
521 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0'
522 }),
523 responseType: 'arraybuffer'
524 };
525 }
526}
SANDHYA.JSc84f1122024-06-04 21:50:03 +0530527
528/** Method to handle null or undefined @public */
529// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
530export const isNullOrUndefined = (data: any): boolean => data === null || data === undefined;
531