Authentication support for cdt
[appc/cdt.git] / src / app / admin / admin.component.ts
1 /*
2 ============LICENSE_START==========================================
3 ===================================================================
4 Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
5 ===================================================================
6
7 Unless otherwise specified, all software contained herein is licensed
8 under the Apache License, Version 2.0 (the License);
9 you may not use this software except in compliance with the License.
10 You may obtain a copy of the License at
11
12     http://www.apache.org/licenses/LICENSE-2.0
13
14 Unless required by applicable law or agreed to in writing, software
15 distributed under the License is distributed on an "AS IS" BASIS,
16 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 See the License for the specific language governing permissions and
18 limitations under the License.
19
20 ============LICENSE_END============================================
21 */
22
23 import { Component, OnInit } from '@angular/core';
24 import { ActivatedRoute, Router } from '@angular/router';
25 import { HttpUtilService } from '../shared/services/httpUtil/http-util.service';
26 import { MappingEditorService } from '../shared/services/mapping-editor.service';
27 import { ParamShareService } from '../shared/services/paramShare.service';
28 import { environment } from '../../environments/environment';
29 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
30 import { NgProgress } from 'ngx-progressbar';
31 import { APIService } from "../shared/services/cdt.apicall";
32 import { UtilityService } from '../shared/services/utilityService/utility.service';
33 import { NotificationsService } from 'angular2-notifications';
34
35
36 @Component({ selector: 'admin', templateUrl: './admin.component.html', styleUrls: ['./admin.component.css']})
37 export class AdminComponent implements OnInit {
38     displayAnsibleServerData: Array<Object> = [];
39     ansibleServerData;
40     sortOrder = false;
41     noData = false;
42     sortBy: string;
43     filter: Object = {};
44     noDataMsg: string;
45     errorMessage = '';
46     invalid = true;
47     currentUser;
48     fileName = "ansible_admin_FQDN_Artifact_0.0.1V.json";
49
50     options = {
51         timeOut: 4000,
52         showProgressBar: true,
53         pauseOnHover: true,
54         clickToClose: true,
55         maxLength: 200
56     };
57
58     constructor (
59         private paramShareService: ParamShareService,
60         private ngProgress: NgProgress,
61         private httpUtil: HttpUtilService,
62         private router: Router,
63         private activeROute: ActivatedRoute,
64         private mappingEditorService: MappingEditorService,
65         private modalService: NgbModal,
66         private apiService:APIService,
67         private utilService: UtilityService,
68         private nService: NotificationsService
69         ) {
70     }
71
72     ngOnInit() {
73         const apiToken = sessionStorage['apiToken'];
74         this.currentUser = sessionStorage['userId'];
75
76         if(this.paramShareService.ansibleServerData) {
77             this.ansibleServerData = this.paramShareService.ansibleServerData;
78             console.log("cached ansibleServerData===>"+JSON.stringify(this.ansibleServerData));
79             this.formatRawData();
80         } else {
81             //testing
82             //this.ansibleServerData = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\": \"fqdn-value1:url\:port\",\"cloud-owner-list\":[{\"cloud-owner\": \"owner1\",\"region-id-list\": [{\"region-id\": \"regiodnid1\",\"tenant-id-list\": [\"tenantid1\",\"tenantid2\"]},{\"region-id\": \"regiondid2\",\"tenant-id-list\": [\"tenantid1\",\"tenantid2\"]}]},{\"cloud-owner\": \"owner2\",\"region-id-list\": [{\"region-id\": \"regionid1\",\"tenant-id-list\": [\"tenantid1\",\"tenantid2\"]}]}],\"description\": \"fqdn for east zone vUSP Production\",\"username\": \"albino attuid\",\"create-date\": \"\",\"modify-username\": \"Asgar\",\"modify-date\": \"10/26/2018\"}]}";
83             //this.ansibleServerData = JSON.parse(this.ansibleServerData);
84             //this.formatRawData();
85             this.getArtifacts();
86         }
87         
88     }
89
90     getArtifacts() {
91
92          const input = {
93             "input":{
94                 "design-request":{
95                     "request-id":sessionStorage['apiToken'],
96                     "action":"getArtifact",
97                     "payload":"{\"vnf-type\":\"NULL\",\"vnfc-type\":\"NULL\",\"protocol\":\"\",\"incart\":\"N\",\"action\":\"NULL\",\"artifact-name\":\""+this.fileName+"\",\"artifact-type\":\"APPC-CONFIG\",\"userID\":\"admin\"}"
98                 }
99             }
100         };
101         //const x = JSON.parse(data.input['design-request']['payload']);
102         //x.userID = sessionStorage['userId'];
103         //data.input['design-request']['payload'] = JSON.stringify(x);
104          console.log("input to payload====", JSON.stringify(input));
105
106         this.ngProgress.start();
107       
108         this.apiService.callGetArtifactsApi(input).subscribe(data => {
109           
110             if( this.utilService.checkResult(data)) {
111                 console.log("response===>"+JSON.stringify(data));
112                 this.ansibleServerData = JSON.parse(data.output.data.block).artifactInfo[0]["artifact-content"];
113                 this.ansibleServerData = JSON.parse(this.ansibleServerData);
114                 console.log("ansibleServerData===>"+JSON.stringify(this.ansibleServerData))
115                 this.paramShareService.ansibleServerData = this.ansibleServerData;
116                 this.formatRawData();
117             } 
118             this.ngProgress.done();
119         },
120         error => {
121           
122           this.nService.error('Error',
123             'Error in connecting to APPC Server', this.options );
124         });
125        
126        
127     }
128
129     formatRawData(){
130         this.displayAnsibleServerData = [this.ansibleServerData["fqdn-list"].length];
131         console.log("length==>"+this.ansibleServerData["fqdn-list"].length)
132         for(let i=0;i<this.ansibleServerData["fqdn-list"].length;i++) {
133             let fqdl = this.ansibleServerData["fqdn-list"][i];
134             this.displayAnsibleServerData[i] = {};
135             let cloudInfoArray = [];
136             let serverAndPort = fqdl["vnf-management-server-fqdn"];
137             this.displayAnsibleServerData[i]['serverandport'] = serverAndPort;
138             let splitArray = serverAndPort.split(":");
139             let regEx = new RegExp(":"+splitArray[splitArray.length-1]+"$", "g");
140             this.displayAnsibleServerData[i]['server'] = serverAndPort.replace(regEx, "");
141             this.displayAnsibleServerData[i]['port'] = "";
142             if(splitArray.length > 1) {
143                 this.displayAnsibleServerData[i]['port'] = splitArray[splitArray.length-1];
144             }
145             let clouditem = "";
146             for(let j=0; j<fqdl["cloud-owner-list"].length;j++) {
147                 let cloudOwnerItem = fqdl["cloud-owner-list"][j];
148                 let cloud = cloudOwnerItem["cloud-owner"];
149                 let cloudrow;
150                 let ownerid = cloud;
151                 
152                 for(let k=0; k<cloudOwnerItem["region-id-list"].length; k++) {
153                     let regionItem = cloudOwnerItem["region-id-list"][k];
154                     let regionrow = cloud + " / " + regionItem["region-id"];
155                     let regionid = regionItem["region-id"];
156                     console.log("regionrow : "+regionrow);
157                     for(let m=0; m<regionItem["tenant-id-list"].length; m++) {
158                         cloudrow = regionrow + " / " + regionItem["tenant-id-list"][m]+"\n";
159                         console.log("cloudrow : "+cloudrow);
160                         clouditem = clouditem + cloudrow;
161                         console.log("clouditem : "+clouditem);
162                         let tenantid = regionItem["tenant-id-list"][m];
163                         cloudInfoArray.push({"ownerid": ownerid, "regionid": regionid, "tenantid": tenantid});
164                         console.log("info===>"+JSON.stringify({"ownerid": ownerid, "regionid": regionid, "tenantid": tenantid}))
165                     }
166                 
167                 }
168                 
169             }
170             console.log("info array==>"+JSON.stringify(cloudInfoArray))
171             this.displayAnsibleServerData[i]["info"] = cloudInfoArray;
172             this.displayAnsibleServerData[i]["cloud"] = clouditem;
173             this.displayAnsibleServerData[i]["descr"] = fqdl["description"];
174             this.displayAnsibleServerData[i]["creator"] = fqdl["username"];
175             this.displayAnsibleServerData[i]["created-date"] = fqdl["create-date"];
176             this.displayAnsibleServerData[i]["modifier"] = fqdl["modify-username"];
177             this.displayAnsibleServerData[i]["modified-date"] = fqdl["modify-date"];
178
179         }
180     }
181
182
183
184     viewAnbsibleServer(selectedConfig, updateIndex) {
185         sessionStorage.setItem('updateIndex', updateIndex);
186         sessionStorage.setItem('ansibleserver', JSON.stringify(selectedConfig));
187
188         this
189             .router
190             .navigate(['../ansible-server'], {
191                 relativeTo: this.activeROute
192             });
193     }
194
195     createAnsibleServer() {
196         let newServer = {"server":"","port":"","info":[],"cloud":"","descr":"","creator":this.currentUser,"created-date":this.utilService.getDate(),"modifier":"","modified-date":""};
197         sessionStorage.setItem('ansibleserver', JSON.stringify(newServer));
198         
199         if(this.ansibleServerData) {
200             sessionStorage.setItem('updateIndex', this.ansibleServerData["fqdn-list"].length);
201         } else {
202             sessionStorage.setItem('updateIndex', '0');
203         }
204
205         this
206             .router
207             .navigate(['../ansible-server'], {
208                 relativeTo: this.activeROute
209             });
210     }
211
212    
213     saveToAppc() {
214         let artifactContent = this.utilService.appendSlashes(JSON.stringify(this.paramShareService.ansibleServerData));
215         let input = {
216                 "input": {
217                     "design-request": {
218                         "request-id": sessionStorage['apiToken'],
219                         "action": "uploadAdminArtifact",
220                         "payload": "{\"userID\": \"admin\",\"vnf-type\" : \"NULL \",\"action\" : \"NULL\",\"artifact-name\" : \""+this.fileName+"\",\"artifact-type\" : \"APPC-CONFIG\",\"artifact-version\" : \"0.1\",\"artifact-contents\":\""+artifactContent+"\"}",
221                     }
222                 }
223             }
224         let response = this.apiService.callGetArtifactsApi(input);
225         response.subscribe(response => {
226           this.utilService.processApiSubscribe(response, this.utilService.putAction, "admin artifact");
227           //this.clearCache();
228         },
229         error => this.utilService.processApiError());
230     }
231
232     // ngOnDestroy() {
233     //     console.log("destry....")
234     // }
235
236     clearCache() {
237         this.paramShareService.ansibleServerData = undefined;
238         sessionStorage.removeItem('ansibleserver');
239     }
240
241     download() {
242         if(this.ansibleServerData){
243             this.utilService.downloadArtifactToPc(JSON.stringify(this.ansibleServerData, null, '\t'), "json", this.fileName, 100)
244         }
245     }
246
247 }