Merge "Add self release yaml files"
authorSunder Tattavarada <statta@research.att.com>
Tue, 7 Apr 2020 19:31:19 +0000 (19:31 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 7 Apr 2020 19:31:19 +0000 (19:31 +0000)
15 files changed:
deliveries/Dockerfile.be
deliveries/Dockerfile.portal
deliveries/Dockerfile.sdk
deliveries/Dockerfile.widgetms
ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/controller/UserRolesController.java
ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/service/UserRolesCommonServiceImpl.java
pom.xml
portal-FE-common/src/app/layout/components/userbar/userbar.component.html
portal-FE-common/src/app/layout/components/userbar/userbar.component.scss
portal-FE-common/src/app/layout/components/userbar/userbar.component.ts
portal-FE-common/src/app/pages/dashboard-application-catalog/dashboard-application-catalog.component.ts
portal-FE-common/src/app/pages/users/users.component.ts
portal-FE-os/src/app/pages/users/new-user-modal/new-user-modal.component.ts
portal-FE-os/src/app/shared/interceptors/header-interceptor.ts
portal-FE-os/src/app/shared/utils/utils.js

index afc3981..21bb1a2 100644 (file)
@@ -39,7 +39,9 @@ RUN cd ${PORTALCONTEXT} && unzip -q *.war && rm *.war
 
 VOLUME ${TOMCATHOME}/logs
 
+# Switch to unprivileged user
 RUN addgroup -g 1000 -S portal && adduser -u 1000 -S portal -G portal && chown -R portal:portal . && chmod -R 777 /etc/ssl/certs/java /var/
+USER portal
 
 # Switch back to root
 WORKDIR /
index f12a3e3..cce3ed0 100644 (file)
@@ -41,6 +41,10 @@ COPY ${FE_DIR} ${PORTALCONTEXT}/public
 
 VOLUME ${TOMCATHOME}/logs
 
+# Switch to unprivileged user
+RUN addgroup -g 1000 -S portal && adduser -u 1000 -S portal -G portal
+USER portal
+
 # Switch back to root
 WORKDIR /
 
index 5f96aaa..4757d8a 100644 (file)
@@ -38,6 +38,10 @@ RUN cd ${SDKCONTEXT} && unzip -q *.war && rm *.war
 
 VOLUME ${TOMCATHOME}/logs
 
+# Switch to unprivileged user
+RUN addgroup -g 1000 -S portal && adduser -u 1000 -S portal -G portal
+USER portal
+
 # Switch back to root
 WORKDIR /
 
index 82a2e4c..8f4b107 100644 (file)
@@ -14,7 +14,9 @@ RUN sh -c 'touch /app.jar'
 # Launch script
 COPY start-wms.sh /
 
+# Switch to unprivileged user
 RUN addgroup -g 1000 -S portal && adduser -u 1000 -S portal -G portal && mkdir logs / && chown -R portal:portal /start-wms.sh /tmp /etc/ssl/certs/java /logs && chmod -R 755 /start-wms.sh /etc/ssl/certs/java /logs /tmp
+USER portal
 
 # Define default command
 CMD /start-wms.sh
index 852e2bb..aa180b0 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START==========================================
  * ONAP Portal
  * ===================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
  *
  * Unless otherwise specified, all software contained herein is licensed
@@ -46,6 +46,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.cxf.transport.http.HTTPException;
 import org.onap.portalapp.controller.EPRestrictedBaseController;
+import org.onap.portalapp.portal.domain.EPApp;
 import org.onap.portalapp.portal.domain.EPRole;
 import org.onap.portalapp.portal.domain.EPUser;
 import org.onap.portalapp.portal.domain.EPUserAppCatalogRoles;
@@ -58,6 +59,7 @@ import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
 import org.onap.portalapp.portal.logging.logic.EPLogUtil;
 import org.onap.portalapp.portal.service.AdminRolesService;
 import org.onap.portalapp.portal.service.ApplicationsRestClientService;
+import org.onap.portalapp.portal.service.EPAppService;
 import org.onap.portalapp.portal.service.SearchService;
 import org.onap.portalapp.portal.service.UserRolesService;
 import org.onap.portalapp.portal.transport.AppNameIdIsAdmin;
@@ -75,6 +77,7 @@ import org.onap.portalsdk.core.domain.AuditLog;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.restful.domain.EcompRole;
 import org.onap.portalsdk.core.service.AuditService;
+import org.onap.portalsdk.core.service.DataAccessService;
 import org.onap.portalsdk.core.util.SystemProperties;
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,6 +106,8 @@ public class UserRolesController extends EPRestrictedBaseController {
     private ApplicationsRestClientService applicationsRestClientService;
     @Autowired
     private AuditService auditService;
+    @Autowired
+       private DataAccessService dataAccessService;
 
     private static final String FAILURE = "failure";
 
@@ -288,6 +293,18 @@ public class UserRolesController extends EPRestrictedBaseController {
             EcompPortalUtils.setBadPermissions(user, response, "getAppRolesForUser");
             feErrorString = EcompPortalUtils.getFEErrorString(true, response.getStatus());
         } else {
+               try {
+                       if(orgUserId!=null) {
+                               EPUser localUser  = getUserInfo(orgUserId,applicationsRestClientService);
+                               if(localUser !=null) {
+                                       if(localUser.isSystemUser()) {
+                                               isSystemUser = true;
+                                       }
+                               }
+                       }
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "isSystemUser update failed", e);
+                       }
             if ((!isSystemUser && EcompPortalUtils.legitimateUserId(orgUserId)) || isSystemUser) {
                 result = userRolesService.getAppRolesForUser(appid, orgUserId, extRequestValue, user);
                 logger.debug(EELFLoggerDelegate.debugLogger, "getAppRolesForUser: result {}, appId {}", result, appid);
@@ -572,4 +589,23 @@ public class UserRolesController extends EPRestrictedBaseController {
         }
         return isSuperAdmin;
     }
+    
+    /**
+        * 
+        * @param userId
+        * @param app
+        * @param applicationsRestClientService
+        * @return EPUser
+        * @throws HTTPException
+        */
+       protected EPUser getUserInfo(String userId, ApplicationsRestClientService applicationsRestClientService)
+                       throws HTTPException {
+               @SuppressWarnings("unchecked")
+               List<EPUser> userList = (List<EPUser>) dataAccessService
+                               .executeQuery("from EPUser where orgUserId='" + userId + "'", null);
+               if (userList != null && !userList.isEmpty())
+                       return userList.get(0);
+               else
+                       return null;
+       }
 }
index ab68882..e5ce206 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START==========================================
  * ONAP Portal
  * ===================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
  *
  * Unless otherwise specified, all software contained herein is licensed
@@ -1192,7 +1192,7 @@ public class UserRolesCommonServiceImpl  {
         * @param roleInAppUser Contains list of active roles 
         */
        @SuppressWarnings("unchecked")
-       private void updateUserRolesInExternalSystem(EPApp app, String orgUserId, List<RoleInAppForUser> roleInAppUser, boolean isPortalRequest,boolean isSystemUser,Set<EcompRole> deletedRolesByApprover,boolean isLoggedInUserRoleAdminofApp) throws Exception
+       private void updateUserRolesInExternalSystem(EPApp app, String orgUserId, List<RoleInAppForUser> roleInAppUser, boolean isPortalRequest,boolean nonHumanUserId,Set<EcompRole> deletedRolesByApprover,boolean isLoggedInUserRoleAdminofApp) throws Exception
        {
                try {
                        // check if user exists
@@ -1200,15 +1200,23 @@ public class UserRolesCommonServiceImpl  {
                        userParams.put("orgUserIdValue", orgUserId);
                        List<EPUser> userInfo = checkIfUserExists(userParams);
                        if (userInfo.isEmpty()) {
-                               createLocalUserIfNecessary(orgUserId, isSystemUser);
+                               createLocalUserIfNecessary(orgUserId, nonHumanUserId);
                        }
                        String name = "";
                        if (EPCommonSystemProperties
-                                       .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN) && !isSystemUser) {
-                               name = orgUserId
-                                               + SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+                                       .containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN) && !nonHumanUserId) {
+                               if(orgUserId.indexOf("@") ==-1) {
+                                       name = orgUserId + SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+                               }else {
+                                       name = orgUserId;
+                               }
                        } else {
                                name = orgUserId;
+                               if(nonHumanUserId && orgUserId!=null) {
+                       if(orgUserId.indexOf("@") ==-1) {
+                               name = orgUserId + SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_USER_DOMAIN);
+                       }                       
+               }
                        }
                        ObjectMapper mapper = new ObjectMapper();
                        HttpHeaders headers = EcompPortalUtils.base64encodeKeyForAAFBasicAuth();
diff --git a/pom.xml b/pom.xml
index e26a406..76dc454 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,6 @@
                <module>ecomp-portal-BE-os</module>
                <module>portal-FE-os</module>
                <module>ecomp-portal-widget-ms</module>
-               <module>portal-BE</module>
        </modules>
 
        <properties>
index 0ff5a55..898a8fb 100644 (file)
 <nav [ngStyle]="{'right': isOpen ? '18px' : '-75px' }" class="usb-item usb-item-vertical usb-item-right" id="usb-item-s2">
   <h3>Online Users</h3>
   <div *ngFor="let user of userList" style="font-size: 10px;">
-    <a [href]="user.linkQ"><img class="activeUserIcon" [src]="user.linkPic" alt="User Link"></a>
+    <a [href]="user.linkQ" *ngIf="(user.linkPicURL !='')">
+      <img class="activeUserIcon" [src]="user.linkPic" alt="User Link">
+    </a>
+    <a [href]="user.linkQ"><i *ngIf="(user.linkPicURL == '')" class="activeUserIcon default-user-icon icon ion-md-person"></i></a>
     <div class="userId-txt">{{user.userId}}</div>
   </div>
 </nav>
\ No newline at end of file
index 8180110..451adfc 100644 (file)
@@ -112,3 +112,9 @@ button {
   width: 55px;
   border-radius: 50%;
 }
+
+.default-user-icon{
+  font-size: 45px;
+  display: block;
+  color: black;
+}
\ No newline at end of file
index 661317b..2136abb 100644 (file)
@@ -88,8 +88,9 @@ export class UserbarComponent implements OnInit {
         for (var i = 0; i < maxItems; i++) {
           var data = {
             userId: _res[i],
-            linkQ: this.api.linkQ,
-            linkPic: this.api.linkPic
+            linkQ: this.sanitizer.bypassSecurityTrustResourceUrl(this.api.linkQ + _res[i]),
+            linkPic: this.api.linkPic + _res[i],
+            linkPicURL:this.api.linkPic
           }
           this.userList.push(data);
         }
index baaa4c4..be4c09e 100644 (file)
@@ -119,12 +119,16 @@ export class DashboardApplicationCatalogComponent implements OnInit {
         } else {
           resJson.index = 3;
 
-        }
-
-        this.selectedSortType = this.sortOptions[resJson.index];
+        } 
+         this.selectedSortType = this.sortOptions[resJson.index];
         //console.log(this.selectedSortType);
-        this.getAppCatalogService(data);
+      this.getAppCatalogService(data);         
       }
+         else {
+                 this.sortTypeChanged('N');
+         }
+         
+                 
     }, error => {
       console.log('getUserAppsSortTypePreference Error Object' + error.message);
     });
@@ -152,6 +156,12 @@ export class DashboardApplicationCatalogComponent implements OnInit {
 
   getAppCatalogService(userAppSortTypePref: string) {
     //console.log("getAppCatalogServices called");
+       if(!userAppSortTypePref)
+    {
+      userAppSortTypePref = "N";
+         this.selectedSortType = this.sortOptions[0];
+      //console.log("userAppSortTypePref"+userAppSortTypePref);
+    }
     this.applicationCatalogService.getAppsOrderBySortPref(userAppSortTypePref).subscribe(data => {
       //console.log("Response data" + data);
       this.appCatalogData = data;
index 23538b5..935be92 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START==========================================
  * ONAP Portal
  * ===================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
  *
  * Unless otherwise specified, all software contained herein is licensed
@@ -93,7 +93,19 @@ export class UsersComponent implements OnInit {
 
   openExistingUserModal(userData: any) {
     const modalRef = this.ngbModal.open(NewUserModalComponent);
-    modalRef.componentInstance.userTitle = `${userData.firstName}, ${userData.lastName} ` + '(' + `${userData.orgUserId}` + ')';
+    let firstName = '';
+    let lastName = '';
+    let orgUserId = '';
+    if(userData && userData.firstName && userData.firstName!=null){
+      firstName = userData.firstName;
+    }
+    if(userData && userData.lastName && userData.lastName!=null){
+      lastName = ',' + userData.lastName;
+    }
+    if(userData && userData.orgUserId && userData.orgUserId!=null){
+      orgUserId = ' (' +userData.orgUserId + ')';
+    }
+    modalRef.componentInstance.userTitle = `${firstName} ${lastName} ${orgUserId}` ;
     modalRef.componentInstance.dialogState = 2;
     modalRef.componentInstance.userModalData = userData;
     modalRef.componentInstance.disableBack = true;
index 76c14f1..e5133a9 100644 (file)
@@ -122,7 +122,7 @@ export class NewUserModalComponent implements OnInit {
   searchUserRadioChange($event: MatRadioChange) {
     if ($event.value === 'System') {
       this.searchTitleText = 'Enter System UserID';
-      this.placeholderText = 'xxxxxx@org.com';
+      this.placeholderText = 'xxxxxx or xxxxxx@org.com';
       this.isSystemUserCheck = true;
     } else {
       this.searchTitleText = 'Enter First Name, Last Name or ATTUID';
index bb76e14..10a3f95 100644 (file)
@@ -46,17 +46,22 @@ import {
 import { Observable } from 'rxjs';
 import { v4 as uuid } from 'uuid';
 import { Injectable } from '@angular/core';
-declare const getWebJunctionXSRFToken: any;
+declare const getXSRFToken: any;
 
 @Injectable()
 export class HeaderInterceptor implements HttpInterceptor {
     intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
         // Clone the request to add the new header
         // HttpHeader object immutable - copy values
+        var XSRFToken = getXSRFToken();
         const headerSettings: { [name: string]: string | string[]; } = {};
         headerSettings['X-ECOMP-RequestID'] = uuid();
         const requestType = req.params.get('requestType');
        
+       
+        if (XSRFToken && XSRFToken.name && XSRFToken.value)
+            headerSettings['X-XSRF-TOKEN'] = XSRFToken.value;
+       
         if(requestType!=null && requestType==='fileUpload'){
           //headerSettings['Content-Type'] = 'multipart/form-data';
         }else if(requestType!=null && requestType==='downloadWidgetFile'){
index 3c99f4a..95d4c68 100644 (file)
@@ -1,3 +1,23 @@
+function getXSRFToken() {      
+       var cookies = getCookies();
+       var XSRFToken = {
+                       name:'',
+                       value:''
+       };
+       //var contextRoot = getContextRoot();
+       var hasXSRFToken = false;
+       for(var name in cookies) {
+               if(name == "XSRF-TOKEN") {
+                       XSRFToken.name = name;
+                       XSRFToken.value = cookies[name];
+                       hasXSRFToken = true;
+               }
+       }
+       
+       return (hasXSRFToken==false)?null:XSRFToken;
+}
+
+
 function getCookies() {
     var cookies = { };
     if (document.cookie && document.cookie != '') {