blob: ba805e6db6eaa9130af77008dee517d979c92806 [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 */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053021import { isNullOrUndefined } from 'util';
kumaran.m3b4814a2020-05-01 19:48:54 +053022import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';
23import { EventEmitter, Injectable, Output } from '@angular/core';
24import { FormArray, FormGroup } from '@angular/forms';
25import { Router } from '@angular/router';
Barath Kumar R09cd4ec2020-07-07 16:12:32 +053026import { TranslateService } from '@ngx-translate/core';
Barath Kumar R16070582021-02-08 18:19:35 +053027import {
28 CONSTANTNUMBER,
29 DOMAINS,
30 ERRORDATA,
31 FILESETTINGS,
32 GETAPIURLHEADER,
33 PACKAGEINFO,
34 PAGERSMARTTABLE,
35 SMARTTABLECLASS,
36 TARSETTINGS,
37 TYPESECTION
38} from 'CommonModel';
kumaran.m3b4814a2020-05-01 19:48:54 +053039import { environment } from 'environment';
40import * as HttpStatus from 'http-status-codes';
41import * as untar from 'js-untar';
SANDHYA.JS1b17c432023-04-26 17:54:57 +053042import { ActiveToast, ToastrService } from 'ngx-toastr';
kumaran.m3b4814a2020-05-01 19:48:54 +053043import * as pako from 'pako';
44import { RestService } from 'RestService';
Barath Kumar R16070582021-02-08 18:19:35 +053045import { Observable } from 'rxjs';
46import { map } from 'rxjs/operators';
kumaran.m3b4814a2020-05-01 19:48:54 +053047
48/** This is added globally by the tar.js library */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053049// eslint-disable-next-line @typescript-eslint/no-explicit-any
kumaran.m3b4814a2020-05-01 19:48:54 +053050declare const Tar: any;
51
52/**
53 * An Injectable is a class adorned with the @Injectable decorator function.
54 * @Injectable takes a metadata object that tells Angular how to compile and run module code
55 */
56@Injectable({
57 providedIn: 'root'
58})
59/** Exporting a class @exports SharedService */
60export class SharedService {
61 /** call the parent using event information @private */
62 @Output() public dataEvent: EventEmitter<{}> = new EventEmitter<{}>();
63
64 /** Variables to hold regexp pattern for URL */
kumaran.m3b4814a2020-05-01 19:48:54 +053065 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.,?'\\+&%$#=~_-]+))*$/);
66
67 /** Variables to hold regexp pattern for IP Address */
68 public REGX_IP_PATTERN: RegExp = new RegExp(/^(?:(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(?!$)|$)){4}$/);
69
70 /** Variables to hold regexp pattern for Port Number */
kumaran.m3b4814a2020-05-01 19:48:54 +053071 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}))$/);
72
73 /** Variables to hold regexp pattern for DPID */
74 public REGX_DPID_PATTERN: RegExp = new RegExp(/^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}$/);
75
76 /** Variable to hold regexp pattern for password */
kumaran.m3b4814a2020-05-01 19:48:54 +053077 public REGX_PASSWORD_PATTERN: RegExp = new RegExp(/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/);
78
Barath Kumar R1245fc82021-04-16 13:34:06 +053079 /** Variables to hold regexp pattern for Latitude */
80 public REGX_LAT_PATTERN: RegExp = new RegExp(/^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,15})?))$/);
81
82 /** Variables to hold regexp pattern for Longitude */
Barath Kumar R1245fc82021-04-16 13:34:06 +053083 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})?))$/);
84
Barath Kumar R403234e2020-07-07 15:48:58 +053085 /** Variables to hold maxlength for the description @public */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053086 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
Barath Kumar R403234e2020-07-07 15:48:58 +053087 public MAX_LENGTH_DESCRIPTION: number = 500;
88
89 /** Variables to hold maxlength for the name @public */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +053090 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
Barath Kumar R403234e2020-07-07 15:48:58 +053091 public MAX_LENGTH_NAME: number = 50;
92
kumaran.m3b4814a2020-05-01 19:48:54 +053093 /** FormGroup instance added to the form @ html @public */
94 public formGroup: FormGroup;
95
96 /** Controls the go to top button on scroll @public */
97 public showGotoTop: boolean;
98
99 /** Holds OSM Version value @public */
100 public osmVersion: string;
101
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530102 /** Holds Last Login Toaster Message @public */
103 public lastLoginMessage: string;
104
105 /** Holds Failed Attempts Toaster Message @public */
106 public failedAttemptsMessage: string;
107
108 /** Holds No Of Days Toaster Message @public */
109 public daysMessage: string;
110
kumaran.m3b4814a2020-05-01 19:48:54 +0530111 /** express number for time manupulation -2 */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530112 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530113 private epochTimeMinus2: number = -2;
114
115 /** express number for time manupulation 1000 */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530116 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530117 private epochTime1000: number = 1000;
118
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530119 /** express number for time manupulation 60 */
120 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
121 private epochTime60: number = 60;
122
123 /** express number for time manupulation 24 */
124 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
125 private epochTime24: number = 24;
126
kumaran.m3b4814a2020-05-01 19:48:54 +0530127 /** Random string generator length */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530128 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530129 private randomStringLength: number = 4;
130
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530131 /** Max length of Uint8Array */
132 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
133 private unit8Array: number = 255;
134
kumaran.m3b4814a2020-05-01 19:48:54 +0530135 /** Instance of the rest service @private */
136 private restService: RestService;
137
138 /** Service holds the router information @private */
139 private router: Router;
140
Barath Kumar R208bef22020-07-07 12:28:04 +0530141 /** Random color string generator length @private */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530142 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
Barath Kumar R208bef22020-07-07 12:28:04 +0530143 private colorStringLength: number = 256;
144
kumaran.m3b4814a2020-05-01 19:48:54 +0530145 /** Check for the root directory @private */
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530146 // eslint-disable-next-line @typescript-eslint/no-magic-numbers
kumaran.m3b4814a2020-05-01 19:48:54 +0530147 private directoryCount: number = 2;
148
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530149 /** express number for time manupulation 1000 */
150 private toasterSettings: {} = {
151 enableHtml: true,
152 closeButton: true,
153 timeOut: 2000
154 };
155
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530156 /** Contains tranlsate instance @private */
157 private translateService: TranslateService;
158
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530159 /** Contains toaster instance @private */
160 private toaster: ToastrService;
161
162 constructor(restService: RestService, router: Router, translateService: TranslateService, toaster: ToastrService) {
kumaran.m3b4814a2020-05-01 19:48:54 +0530163 this.restService = restService;
164 this.router = router;
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530165 this.translateService = translateService;
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530166 this.toaster = toaster;
kumaran.m3b4814a2020-05-01 19:48:54 +0530167 }
168
169 /** convert epoch time function @public */
170 public convertEpochTime(unixtimestamp: number): string {
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530171 if (!isNullOrUndefined(unixtimestamp)) {
172 const monthsArr: string[] = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
173 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
174 const date: Date = new Date(unixtimestamp * this.epochTime1000);
175 const year: number = date.getFullYear();
176 const month: string = monthsArr[date.getMonth()];
177 const day: number = date.getDate();
178 const hours: number = date.getHours();
179 const minutes: string = '0' + date.getMinutes();
180 const seconds: string = '0' + date.getSeconds();
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530181 // eslint-disable-next-line deprecation/deprecation
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530182 return month + '-' + day + '-' + year + ' ' + hours + ':' + minutes.substr(this.epochTimeMinus2) + ':'
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530183 // eslint-disable-next-line deprecation/deprecation
Barath Kumar R09cd4ec2020-07-07 16:12:32 +0530184 + seconds.substr(this.epochTimeMinus2);
185 }
186 return this.translateService.instant('NODATE');
kumaran.m3b4814a2020-05-01 19:48:54 +0530187 }
188
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530189 /** convert epoch time function to No of days @public */
190 public converEpochToDays(date: string): number {
191 if (!isNullOrUndefined(date)) {
192 const today: Date = new Date();
193 const accountDate: Date = new Date(date);
SANDHYA.JSc6c72e32023-10-12 11:29:52 +0530194 const toasterDate: number = (accountDate.getTime() -
195 today.getTime()) / this.epochTime1000 / this.epochTime60 / this.epochTime60 / this.epochTime24;
196 if (toasterDate >= 0 || toasterDate < 1) {
197 return Math.round(toasterDate);
198 }
199 return Math.floor(toasterDate);
SANDHYA.JS1b17c432023-04-26 17:54:57 +0530200 }
201 return this.translateService.instant('N/A');
202 }
203
204 /** show toaster for password & account expiry @public */
205 public showToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
206 accountNoOfDays: string, passwordExpireMessage: string, accountExpireMessage: string,
207 passwordMessage: string, accountMessage: string): ActiveToast<string> {
208 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
209 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
210 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
211 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
212 '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage +
213 '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
214 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
215 }
216
217 /** show toaster for password expiry @public */
218 public passwordToaster(lastLogin: string, failedAttempts: string, passwordNoOfDays: string,
219 passwordExpireMessage: string, passwordMessage: string): ActiveToast<string> {
220 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
221 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
222 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
223 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
224 '</br>' + passwordExpireMessage + '&nbsp' + passwordNoOfDays + '&nbsp' + passwordMessage,
225 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
226 }
227
228 /** show toaster for account expiry @public */
229 public accountToaster(lastLogin: string, failedAttempts: string,
230 accountNoOfDays: string, accountExpireMessage: string, accountMessage: string): ActiveToast<string> {
231 this.lastLoginMessage = this.translateService.instant('PAGE.LOGIN.LASTACCESS');
232 this.failedAttemptsMessage = this.translateService.instant('PAGE.LOGIN.FAILED');
233 return this.toaster.info(this.lastLoginMessage + ':' + '&nbsp' + lastLogin +
234 '</br>' + this.failedAttemptsMessage + ':' + '&nbsp' + failedAttempts +
235 '</br>' + accountExpireMessage + '&nbsp' + accountNoOfDays + '&nbsp' + accountMessage,
236 this.translateService.instant('PAGE.LOGIN.LOGINHISTORY'), this.toasterSettings);
237 }
238
kumaran.m3b4814a2020-05-01 19:48:54 +0530239 /** Download Files function @public */
Barath Kumar R063a3f12020-12-29 16:35:09 +0530240 public downloadFiles(name: string, binaryData: Blob[], filetype: string): void {
kumaran.m3b4814a2020-05-01 19:48:54 +0530241 const downloadLink: HTMLAnchorElement = document.createElement('a');
242 downloadLink.href = window.URL.createObjectURL(new Blob(binaryData, { type: filetype }));
Barath Kumar R063a3f12020-12-29 16:35:09 +0530243 if (name !== undefined) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530244 // eslint-disable-next-line @typescript-eslint/no-explicit-any
245 const newVariable: any = window.navigator;
246 if (newVariable.msSaveOrOpenBlob) {
247 newVariable.msSaveBlob(new Blob(binaryData, { type: filetype }), 'OSM_Export_' + name + '.tar.gz');
kumaran.m3b4814a2020-05-01 19:48:54 +0530248 } else {
Barath Kumar R063a3f12020-12-29 16:35:09 +0530249 downloadLink.setAttribute('download', 'OSM_Export_' + name + '.tar.gz');
kumaran.m3b4814a2020-05-01 19:48:54 +0530250 document.body.appendChild(downloadLink);
251 downloadLink.click();
252 }
253 }
254 }
255
256 /** Call this method after delete perform action is completed in the ng-smart-table data @public */
257 public callData(): void {
258 this.dataEvent.emit();
259 }
260
261 /** Generate random string @public */
262 public randomString(): string {
263 const chars: string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
264 let result: string = '';
kumaran.m3b4814a2020-05-01 19:48:54 +0530265 for (let randomStringRef: number = this.randomStringLength; randomStringRef > 0; --randomStringRef) {
266 result += chars[Math.floor(Math.random() * chars.length)];
267 }
268 return result;
269 }
Barath Kumar R16070582021-02-08 18:19:35 +0530270
kumaran.m3b4814a2020-05-01 19:48:54 +0530271 /** Function to read uploaded file String @public */
272 public async getFileString(files: FileList, fileType: string): Promise<string | ArrayBuffer> {
273 const reader: FileReader = new FileReader();
274 return new Promise<string | ArrayBuffer>((resolve: Function, reject: Function): void => {
275 if (this.vaildataFileInfo(files[0], fileType)) {
276 this.readFileContent(reader, files[0], fileType);
277 } else {
278 reject('typeError');
279 }
280 reader.onload = (): void => {
281 if (reader.result === null) {
282 reject('contentError');
283 }
284 resolve(reader.result);
285 };
286 reader.onerror = (event: Event): void => {
287 reject('contentError');
288 };
289 });
290 }
Barath Kumar R16070582021-02-08 18:19:35 +0530291
kumaran.m3b4814a2020-05-01 19:48:54 +0530292 /** Method to handle tar and tar.gz file for shared YAML file content @public */
293 public async targzFile(packageInfo: PACKAGEINFO): Promise<string | ArrayBuffer> {
294 return new Promise<string | ArrayBuffer>((resolve: Function, reject: Function): void => {
295 const httpOptions: GETAPIURLHEADER = this.getHttpOptions();
296 let apiUrl: string = '';
297 apiUrl = packageInfo.packageType === 'nsd' ? environment.NSDESCRIPTORS_URL + '/' + packageInfo.id + '/nsd_content' :
298 environment.VNFPACKAGES_URL + '/' + packageInfo.id + '/package_content';
Barath Kumar R16070582021-02-08 18:19:35 +0530299 this.restService.getResource(apiUrl, httpOptions).subscribe((response: ArrayBuffer): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530300 try {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530301 // eslint-disable-next-line @typescript-eslint/no-explicit-any
kumaran.m3b4814a2020-05-01 19:48:54 +0530302 const tar: any = new Tar();
303 const originalInput: Uint8Array = pako.inflate(response, { to: 'Uint8Array' });
Barath Kumar R16070582021-02-08 18:19:35 +0530304 untar(originalInput.buffer).then((extractedFiles: TARSETTINGS[]): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530305 const getFoldersFiles: {}[] = extractedFiles;
306 const folderNameStr: string = extractedFiles[0].name;
Barath Kumar R16070582021-02-08 18:19:35 +0530307 getFoldersFiles.forEach((value: TARSETTINGS): void => {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530308 const fileValueObj: FILESETTINGS = this.createFileValueObject(value);
kumaran.m3b4814a2020-05-01 19:48:54 +0530309 const getRootFolder: string[] = value.name.split('/');
310 if (value.name.startsWith(folderNameStr) &&
311 (value.name.endsWith('.yaml') || value.name.endsWith('.yml')) &&
312 getRootFolder.length === this.directoryCount) {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530313 tar.append(value.name, packageInfo.descriptor, fileValueObj);
kumaran.m3b4814a2020-05-01 19:48:54 +0530314 } else {
315 if (value.type !== 'L') {
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530316 tar.append(value.name, new Uint8Array(value.buffer), fileValueObj);
kumaran.m3b4814a2020-05-01 19:48:54 +0530317 }
318 }
319 });
320 const out: Uint8Array = tar.out;
321 const originalOutput: Uint8Array = pako.gzip(out);
322 resolve(originalOutput.buffer);
Barath Kumar R16070582021-02-08 18:19:35 +0530323 }, (err: string): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530324 reject('');
325 });
326 } catch (e) {
327 reject('');
328 }
Barath Kumar R16070582021-02-08 18:19:35 +0530329 }, (error: HttpErrorResponse): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530330 if (error.status === HttpStatus.NOT_FOUND || error.status === HttpStatus.UNAUTHORIZED) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530331 this.router.navigateByUrl('404', { skipLocationChange: true }).catch((): void => {
332 // Catch Navigation Error
333 });
kumaran.m3b4814a2020-05-01 19:48:54 +0530334 } else {
335 this.restService.handleError(error, 'get');
336 reject('');
337 }
338 });
339 });
340 }
Barath Kumar R16070582021-02-08 18:19:35 +0530341
Barath Kumar Rdb1aeb02020-10-13 18:14:16 +0530342 /** Method to return the file information @public */
343 public createFileValueObject(value: TARSETTINGS): FILESETTINGS {
344 return {
345 type: value.type,
346 linkname: value.linkname,
347 owner: value.uname,
348 group: value.gname
349 };
350 }
Barath Kumar R16070582021-02-08 18:19:35 +0530351
kumaran.m3b4814a2020-05-01 19:48:54 +0530352 /** Method to check given string is JSON or not @public */
353 public checkJson(jsonString: string): boolean {
354 jsonString = jsonString.replace(/'/g, '"');
355 try {
356 JSON.parse(jsonString);
357 } catch (e) {
358 return false;
359 }
360 return true;
361 }
Barath Kumar R16070582021-02-08 18:19:35 +0530362
kumaran.m3b4814a2020-05-01 19:48:54 +0530363 /** Clean the form before submit @public */
Barath Kumar Rd477b852020-07-07 15:24:05 +0530364 public cleanForm(formGroup: FormGroup, formName?: String): void {
kumaran.m3b4814a2020-05-01 19:48:54 +0530365 Object.keys(formGroup.controls).forEach((key: string) => {
Barath Kumar Rd477b852020-07-07 15:24:05 +0530366 if ((!isNullOrUndefined((formGroup.get(key) as FormArray | FormGroup).controls)) && key !== 'config') {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530367 // eslint-disable-next-line @typescript-eslint/no-shadow
kumaran.m3b4814a2020-05-01 19:48:54 +0530368 for (const { item, index } of (formGroup.get(key).value).map((item: {}, index: number) => ({ item, index }))) {
SANDHYA.JS0a34dfa2023-04-25 23:59:41 +0530369 // eslint-disable-next-line security/detect-object-injection
kumaran.m3b4814a2020-05-01 19:48:54 +0530370 const newFormGroup: FormGroup = (formGroup.get(key) as FormArray).controls[index] as FormGroup;
371 this.cleanForm(newFormGroup);
372 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530373 } else if (formGroup.get(key).value !== undefined && formGroup.get(key).value !== null && key !== 'config') {
kumaran.m3b4814a2020-05-01 19:48:54 +0530374 if (!Array.isArray(formGroup.get(key).value)) {
375 if (typeof formGroup.get(key).value === 'string') {
376 formGroup.get(key).setValue(formGroup.get(key).value.trim());
377 }
378 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530379 } else if (key === 'config' && formName === 'vim') {
kumaran.m3b4814a2020-05-01 19:48:54 +0530380 const newFormGroup: FormGroup = formGroup.get(key) as FormGroup;
381 this.cleanForm(newFormGroup);
382 }
383 });
384 }
Barath Kumar R16070582021-02-08 18:19:35 +0530385
kumaran.m3b4814a2020-05-01 19:48:54 +0530386 /** Method to return the config of pager value for ngSmarttable @public */
387 public paginationPagerConfig(): PAGERSMARTTABLE {
388 return {
389 display: true,
390 perPage: environment.paginationNumber
391 };
392 }
Barath Kumar R16070582021-02-08 18:19:35 +0530393
kumaran.m3b4814a2020-05-01 19:48:54 +0530394 /** Method to return the class for the table for ngSmarttable @public */
395 public tableClassConfig(): SMARTTABLECLASS {
396 return {
397 class: 'table list-data'
398 };
399 }
Barath Kumar R16070582021-02-08 18:19:35 +0530400
kumaran.m3b4814a2020-05-01 19:48:54 +0530401 /** Method to return all languages name and its code @public */
402 public languageCodeList(): {}[] {
403 return [
404 { code: 'en', language: 'English' },
405 { code: 'es', language: 'Spanish' },
406 { code: 'pt', language: 'Portuguese' },
407 { code: 'de', language: 'German' }
408 ];
409 }
Barath Kumar R16070582021-02-08 18:19:35 +0530410
kumaran.m3b4814a2020-05-01 19:48:54 +0530411 /** Fetch OSM Version @public */
412 public fetchOSMVersion(): void {
Barath Kumar R16070582021-02-08 18:19:35 +0530413 this.restService.getResource(environment.OSM_VERSION_URL).subscribe((res: { version: string }): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530414 const version: string[] = res.version.split('+');
415 if (!isNullOrUndefined(version[0])) {
416 this.osmVersion = version[0];
417 } else {
418 this.osmVersion = null;
419 }
Barath Kumar R16070582021-02-08 18:19:35 +0530420 }, (error: ERRORDATA): void => {
kumaran.m3b4814a2020-05-01 19:48:54 +0530421 this.osmVersion = null;
422 this.restService.handleError(error, 'get');
423 });
424 }
Barath Kumar R16070582021-02-08 18:19:35 +0530425
Barath Kumar R208bef22020-07-07 12:28:04 +0530426 /** Random RGB color code generator @public */
427 public generateColor(): string {
428 const x: number = Math.floor(Math.random() * this.colorStringLength);
429 const y: number = Math.floor(Math.random() * this.colorStringLength);
430 const z: number = Math.floor(Math.random() * this.colorStringLength);
431 return 'rgb(' + x + ',' + y + ',' + z + ')';
432 }
Barath Kumar Rd477b852020-07-07 15:24:05 +0530433
434 /** Add custom name/tag to the dropdown @public */
435 public addCustomTag(tag: string): string {
436 return tag;
437 }
438
Barath Kumar Rd22b0942020-07-14 11:05:24 +0530439 /** Fetch file extension @public */
440 public fetchFileExtension(fileInfo: FileList): string {
441 return fileInfo[0].name.substring(fileInfo[0].name.lastIndexOf('.') + 1);
442 }
443
Barath Kumar R16070582021-02-08 18:19:35 +0530444 /** Get domain name @private */
445 public getDomainName(): Observable<TYPESECTION[]> {
446 return this.restService.getResource(environment.DOMAIN_URL).pipe(map((domains: DOMAINS): TYPESECTION[] => {
447 const domainList: TYPESECTION[] = [];
448 try {
449 let domainNames: string[] = [];
450 if (!isNullOrUndefined(domains.project_domain_name)) {
451 domainNames = domainNames.concat(domains.project_domain_name.split(','));
452 }
453 if (!isNullOrUndefined(domains.user_domain_name)) {
454 domainNames = domainNames.concat(domains.user_domain_name.split(','));
455 }
456 domainNames = Array.from(new Set(domainNames));
457 if (domainNames.length > 0) {
458 domainNames.forEach((domainName: string): void => {
459 if (!domainName.endsWith(':ro')) {
460 domainList.push({ title: domainName, value: domainName });
461 }
462 });
463 }
464 return domainList;
465 } catch (e) {
466 return domainList;
467 }
468 }));
469 }
470
kumaran.m3b4814a2020-05-01 19:48:54 +0530471 /** Method to validate file extension and size @private */
472 private vaildataFileInfo(fileInfo: File, fileType: string): boolean {
473 const extension: string = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1);
474 const packageSize: number = CONSTANTNUMBER.oneMB * environment.packageSize;
Barath Kumar Rd477b852020-07-07 15:24:05 +0530475 if (fileType === 'yaml' && (extension.toLowerCase() === 'yaml' || extension.toLowerCase() === 'yml')
476 && fileInfo.size <= packageSize) {
477 return true;
478 } else if (extension.toLowerCase() === fileType && fileInfo.size <= packageSize) {
kumaran.m3b4814a2020-05-01 19:48:54 +0530479 return true;
480 }
481 return false;
482 }
Barath Kumar R16070582021-02-08 18:19:35 +0530483
kumaran.m3b4814a2020-05-01 19:48:54 +0530484 /** Method to read file content based on type @private */
485 private readFileContent(reader: FileReader, fileInfo: File, fileType: string): void {
486 if (fileType === 'gz') {
487 reader.readAsArrayBuffer(fileInfo);
488 } else {
489 reader.readAsText(fileInfo);
490 }
491 }
Barath Kumar R16070582021-02-08 18:19:35 +0530492
kumaran.m3b4814a2020-05-01 19:48:54 +0530493 /** Method to handle http options @public */
494 private getHttpOptions(): GETAPIURLHEADER {
495 return {
496 headers: new HttpHeaders({
497 Accept: 'application/gzip, application/json',
498 'Cache-Control': 'no-cache, no-store, must-revalidate, max-age=0'
499 }),
500 responseType: 'arraybuffer'
501 };
502 }
503}