[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / controller / AppsControllerExternalRequest.java
index fa49d5b..774eb3e 100644 (file)
-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.controller;\r
-\r
-import java.util.List;\r
-\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.servlet.http.HttpServletResponse;\r
-\r
-import org.openecomp.portalapp.portal.domain.EPApp;\r
-import org.openecomp.portalapp.portal.domain.EPUser;\r
-import org.openecomp.portalapp.portal.ecomp.model.PortalRestResponse;\r
-import org.openecomp.portalapp.portal.ecomp.model.PortalRestStatusEnum;\r
-import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;\r
-import org.openecomp.portalapp.portal.service.AdminRolesService;\r
-import org.openecomp.portalapp.portal.service.EPAppService;\r
-import org.openecomp.portalapp.portal.service.PortalAdminService;\r
-import org.openecomp.portalapp.portal.service.UserService;\r
-import org.openecomp.portalapp.portal.transport.FieldsValidator;\r
-import org.openecomp.portalapp.portal.transport.OnboardingApp;\r
-import org.openecomp.portalapp.portal.utils.EcompPortalUtils;\r
-import org.openecomp.portalapp.portal.utils.PortalConstants;\r
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.context.annotation.Configuration;\r
-import org.springframework.context.annotation.EnableAspectJAutoProxy;\r
-import org.springframework.web.bind.annotation.PathVariable;\r
-import org.springframework.web.bind.annotation.RequestBody;\r
-import org.springframework.web.bind.annotation.RequestMapping;\r
-import org.springframework.web.bind.annotation.RequestMethod;\r
-import org.springframework.web.bind.annotation.ResponseBody;\r
-import org.springframework.web.bind.annotation.RestController;\r
-\r
-import io.swagger.annotations.ApiOperation;\r
-\r
-/**\r
- * Processes requests from external systems (i.e., not the front-end web UI).\r
- * First use case is ECOMP Controller, which has to create an admin and onboard\r
- * itself upon launch of a fresh Portal.\r
- * \r
- * Listens on the "auxapi" path prefix. Provides alternate implementations of\r
- * methods in several existing controllers because an EPUser object is not\r
- * available in the session for these requests.\r
- * \r
- * Checks credentials sent via HTTP Basic Authentication. The Portal's basic\r
- * HTTP authentication system requires that the user names and endpoints are\r
- * registered together.\r
- */\r
-@RestController\r
-@RequestMapping(PortalConstants.REST_AUX_API)\r
-@Configuration\r
-@EnableAspectJAutoProxy\r
-@EPAuditLog\r
-public class AppsControllerExternalRequest implements BasicAuthenticationController {\r
-\r
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsControllerExternalRequest.class);\r
-\r
-       private static final String ONBOARD_APP = "/onboardApp";\r
-\r
-       // Where is this used?\r
-       public boolean isAuxRESTfulCall() {\r
-               return true;\r
-       }\r
-\r
-       /**\r
-        * For testing whether a user is a superadmin.\r
-        */\r
-       @Autowired\r
-       private AdminRolesService adminRolesService;\r
-\r
-       /**\r
-        * For onboarding or updating an app\r
-        */\r
-       @Autowired\r
-       private EPAppService appService;\r
-\r
-       /**\r
-        * For promoting a user to Portal admin\r
-        */\r
-       @Autowired\r
-       private PortalAdminService portalAdminService;\r
-\r
-       /**\r
-        * For creating a new user\r
-        */\r
-       @Autowired\r
-       private UserService userService;\r
-\r
-       /**\r
-        * Creates a new user as a Portal administrator.\r
-        * \r
-        * <PRE>\r
-        { \r
-               "loginId" : "abc123",\r
-               "loginPwd": "",\r
-               "email":"ecomp@controller" \r
-        }\r
-        * </PRE>\r
-        * \r
-        * @param request\r
-        *            HttpServletRequest\r
-        * @param epUser\r
-        *            User details; the email and orgUserId fields are mandatory\r
-        * @param response\r
-        *            HttpServletResponse\r
-        * @return PortalRestResponse with success or failure\r
-        */\r
-       @ApiOperation(value = "Creates a new user as a Portal administrator.", response = PortalRestResponse.class)\r
-       @RequestMapping(value = "/portalAdmin", method = RequestMethod.POST, produces = "application/json")\r
-       @ResponseBody\r
-       public PortalRestResponse<String> postPortalAdmin(HttpServletRequest request, HttpServletResponse response,\r
-                       @RequestBody EPUser epUser) {\r
-               EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "request", epUser);\r
-               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();\r
-\r
-               // Check mandatory fields.\r
-               if (epUser.getEmail() == null || epUser.getEmail().trim().length() == 0 //\r
-                               || epUser.getLoginId() == null || epUser.getLoginId().trim().length() == 0 //\r
-                               || epUser.getLoginPwd() == null) {\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage("Missing required field: email, loginId, or loginPwd");\r
-                       return portalResponse;\r
-               }\r
-\r
-               try {\r
-                       // Check for existing user; create if not found.\r
-                       List<EPUser> userList = userService.getUserByUserId(epUser.getOrgUserId());\r
-                       if (userList == null || userList.size() == 0) {\r
-                               // Create user with first, last names etc.; do check for\r
-                               // duplicates.\r
-                               String userCreateResult = userService.saveNewUser(epUser, "Yes");\r
-                               if (!"success".equals(userCreateResult)) {\r
-                                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                                       portalResponse.setMessage(userCreateResult);\r
-                                       return portalResponse;\r
-                               }\r
-                       }\r
-\r
-                       // Check for Portal admin status; promote if not.\r
-                       if (adminRolesService.isSuperAdmin(epUser)) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.OK);\r
-                       } else {\r
-                               FieldsValidator fv = portalAdminService.createPortalAdmin(epUser.getOrgUserId());\r
-                               if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                                       portalResponse.setStatus(PortalRestStatusEnum.OK);\r
-                               } else {\r
-                                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                                       portalResponse.setMessage(fv.toString());\r
-                               }\r
-                       }\r
-               } catch (Exception ex) {\r
-                       // Uncaught exceptions yield 404 and an empty error page\r
-                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage(ex.toString());\r
-               }\r
-\r
-               EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "response", portalResponse);\r
-               return portalResponse;\r
-       }\r
-\r
-       /**\r
-        * Gets the specified application that is on-boarded in Portal.\r
-        * \r
-        * @param request\r
-        *            HttpServletRequest\r
-        * @param appId\r
-        *            Application ID to get\r
-        * @param response\r
-        *            httpServletResponse\r
-        * @return OnboardingApp objects\r
-        */\r
-       @ApiOperation(value = "Gets the specified application that is on-boarded in Portal.", response = OnboardingApp.class)\r
-       @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.GET, produces = "application/json")\r
-       @ResponseBody\r
-       public OnboardingApp getOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,\r
-                       @PathVariable("appId") Long appId) {\r
-               EPApp epApp = appService.getApp(appId);\r
-               OnboardingApp obApp = new OnboardingApp();\r
-               appService.createOnboardingFromApp(epApp, obApp);\r
-               EcompPortalUtils.logAndSerializeObject(logger, "getOnboardAppExternal", "response", obApp);\r
-               return obApp;\r
-       }\r
-\r
-       /**\r
-        * Adds a new application to Portal. The My Logins App Owner in the request\r
-        * must be the organization user ID of a person who is a Portal\r
-        * administrator.\r
-        * \r
-        * <pre>\r
-        * { \r
-               "myLoginsAppOwner" : "abc123",\r
-               "name": "dashboard",\r
-               "url": "http://k8s/something",\r
-               "restUrl" : "http://aic.att.com",\r
-               "restrictedApp" : true,\r
-               "isOpen" : true,\r
-               "isEnabled": false\r
-               }\r
-        * </pre>\r
-        * \r
-        * @param request\r
-        *            HttpServletRequest\r
-        * @param response\r
-        *            httpServletResponse\r
-        * @param newOnboardApp\r
-        *            Message with details about the app to add\r
-        * @return PortalRestResponse\r
-        */\r
-       @ApiOperation(value = "Adds a new application to Portal.", response = PortalRestResponse.class)\r
-       @RequestMapping(value = { ONBOARD_APP }, method = RequestMethod.POST, produces = "application/json")\r
-       @ResponseBody\r
-       public PortalRestResponse<String> postOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,\r
-                       @RequestBody OnboardingApp newOnboardApp) {\r
-               EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "request", newOnboardApp);\r
-               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();\r
-\r
-               // Validate fields\r
-               if (newOnboardApp.id != null) {\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage("Unexpected field: id");\r
-                       return portalResponse;\r
-               }\r
-               if (newOnboardApp.name == null || newOnboardApp.name.trim().length() == 0 //\r
-                               || newOnboardApp.url == null || newOnboardApp.url.trim().length() == 0 //\r
-                               || newOnboardApp.restUrl == null || newOnboardApp.restUrl.trim().length() == 0\r
-                               || newOnboardApp.myLoginsAppOwner == null || newOnboardApp.myLoginsAppOwner.trim().length() == 0\r
-                               || newOnboardApp.restrictedApp == null //\r
-                               || newOnboardApp.isOpen == null //\r
-                               || newOnboardApp.isEnabled == null) {\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage(\r
-                                       "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");\r
-                       return portalResponse;\r
-               }\r
-\r
-               try {\r
-                       List<EPUser> userList = userService.getUserByUserId(newOnboardApp.myLoginsAppOwner);\r
-                       if (userList == null || userList.size() != 1) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage("Failed to find user: " + newOnboardApp.myLoginsAppOwner);\r
-                               return portalResponse;\r
-                       }\r
-\r
-                       EPUser epUser = userList.get(0);\r
-                       // Check for Portal admin status\r
-                       if (! adminRolesService.isSuperAdmin(epUser)) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());\r
-                               return portalResponse;                          \r
-                       }\r
-                               \r
-                       newOnboardApp.normalize();\r
-                       FieldsValidator fv = appService.addOnboardingApp(newOnboardApp, epUser);\r
-                       if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.OK);\r
-                       } else {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage(fv.toString());\r
-                       }\r
-               } catch (Exception ex) {\r
-                       // Uncaught exceptions yield 404 and an empty error page\r
-                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage(ex.toString());\r
-               }\r
-               EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "response", portalResponse);\r
-               return portalResponse;\r
-       }\r
-\r
-       /**\r
-        * Updates information about an on-boarded application in Portal. The My\r
-        * Logins App Owner in the request must be the organization user ID of a\r
-        * person who is a Portal administrator.\r
-        * <pre>\r
-          { \r
-               "id" : 123,\r
-               "myLoginsAppOwner" : "abc123",\r
-               "name": "dashboard",\r
-               "url": "http://k8s/something",\r
-               "restUrl" : "http://aic.att.com",\r
-               "restrictedApp" : true,\r
-               "isOpen" : true,\r
-               "isEnabled": false\r
-               }\r
-               </pre>\r
-        * @param request\r
-        *            HttpServletRequest\r
-        * @param response\r
-        *            httpServletResponse\r
-        * @param appId\r
-        *            application id\r
-        * @param oldOnboardApp\r
-        *            Message with details about the app to add\r
-        * @return PortalRestResponse\r
-        */\r
-       @ApiOperation(value = "Updates information about an on-boarded application in Portal.", response = PortalRestResponse.class)\r
-       @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.PUT, produces = "application/json")\r
-       @ResponseBody\r
-       public PortalRestResponse<String> putOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,\r
-                       @PathVariable("appId") Long appId, @RequestBody OnboardingApp oldOnboardApp) {\r
-               EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "request", oldOnboardApp);\r
-               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();\r
-               // Validate fields.\r
-               if (oldOnboardApp.id == null || !appId.equals(oldOnboardApp.id)) {\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage("Unexpected value for field: id");\r
-                       return portalResponse;\r
-               }\r
-               if (oldOnboardApp.name == null || oldOnboardApp.name.trim().length() == 0 //\r
-                               || oldOnboardApp.url == null || oldOnboardApp.url.trim().length() == 0 //\r
-                               || oldOnboardApp.restUrl == null || oldOnboardApp.restUrl.trim().length() == 0\r
-                               || oldOnboardApp.myLoginsAppOwner == null || oldOnboardApp.myLoginsAppOwner.trim().length() == 0\r
-                               || oldOnboardApp.restrictedApp == null //\r
-                               || oldOnboardApp.isOpen == null //\r
-                               || oldOnboardApp.isEnabled == null) {\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage(\r
-                                       "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");\r
-                       return portalResponse;\r
-               }\r
-\r
-               try {\r
-                       List<EPUser> userList = userService.getUserByUserId(oldOnboardApp.myLoginsAppOwner);\r
-                       if (userList == null || userList.size() != 1) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage("Failed to find user: " + oldOnboardApp.myLoginsAppOwner);\r
-                               return portalResponse;\r
-                       }\r
-\r
-                       EPUser epUser = userList.get(0);\r
-                       // Check for Portal admin status\r
-                       if (! adminRolesService.isSuperAdmin(epUser)) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());\r
-                               return portalResponse;                          \r
-                       }\r
-\r
-                       oldOnboardApp.normalize();\r
-                       FieldsValidator fv = appService.modifyOnboardingApp(oldOnboardApp, epUser);\r
-                       if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.OK);\r
-                       } else {\r
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                               portalResponse.setMessage(fv.toString());\r
-                       }\r
-               } catch (Exception ex) {\r
-                       // Uncaught exceptions yield 404 and an empty error page\r
-                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);\r
-                       portalResponse.setMessage(ex.toString());\r
-               }\r
-               EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "response", portalResponse);\r
-               return portalResponse;\r
-       }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalapp.portal.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalapp.portal.domain.EPApp;
+import org.openecomp.portalapp.portal.domain.EPUser;
+import org.openecomp.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.openecomp.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
+import org.openecomp.portalapp.portal.service.AdminRolesService;
+import org.openecomp.portalapp.portal.service.EPAppService;
+import org.openecomp.portalapp.portal.service.PortalAdminService;
+import org.openecomp.portalapp.portal.service.UserService;
+import org.openecomp.portalapp.portal.transport.FieldsValidator;
+import org.openecomp.portalapp.portal.transport.OnboardingApp;
+import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
+import org.openecomp.portalapp.portal.utils.PortalConstants;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * Processes requests from external systems (i.e., not the front-end web UI).
+ * First use case is ECOMP Controller, which has to create an admin and onboard
+ * itself upon launch of a fresh Portal.
+ * 
+ * Listens on the "auxapi" path prefix. Provides alternate implementations of
+ * methods in several existing controllers because an EPUser object is not
+ * available in the session for these requests.
+ * 
+ * Checks credentials sent via HTTP Basic Authentication. The Portal's basic
+ * HTTP authentication system requires that the user names and endpoints are
+ * registered together.
+ */
+@RestController
+@RequestMapping(PortalConstants.REST_AUX_API)
+@Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppsControllerExternalRequest implements BasicAuthenticationController {
+
+       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsControllerExternalRequest.class);
+
+       private static final String ONBOARD_APP = "/onboardApp";
+
+       // Where is this used?
+       public boolean isAuxRESTfulCall() {
+               return true;
+       }
+
+       /**
+        * For testing whether a user is a superadmin.
+        */
+       @Autowired
+       private AdminRolesService adminRolesService;
+
+       /**
+        * For onboarding or updating an app
+        */
+       @Autowired
+       private EPAppService appService;
+
+       /**
+        * For promoting a user to Portal admin
+        */
+       @Autowired
+       private PortalAdminService portalAdminService;
+
+       /**
+        * For creating a new user
+        */
+       @Autowired
+       private UserService userService;
+
+       /**
+        * Creates a new user as a Portal administrator.
+        * 
+        * <PRE>
+        { 
+               "loginId" : "abc123",
+               "loginPwd": "",
+               "email":"ecomp@controller" 
+        }
+        * </PRE>
+        * 
+        * @param request
+        *            HttpServletRequest
+        * @param epUser
+        *            User details; the email and orgUserId fields are mandatory
+        * @param response
+        *            HttpServletResponse
+        * @return PortalRestResponse with success or failure
+        */
+       @ApiOperation(value = "Creates a new user as a Portal administrator.", response = PortalRestResponse.class)
+       @RequestMapping(value = "/portalAdmin", method = RequestMethod.POST, produces = "application/json")
+       @ResponseBody
+       public PortalRestResponse<String> postPortalAdmin(HttpServletRequest request, HttpServletResponse response,
+                       @RequestBody EPUser epUser) {
+               EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "request", epUser);
+               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+
+               // Check mandatory fields.
+               if (epUser.getEmail() == null || epUser.getEmail().trim().length() == 0 //
+                               || epUser.getLoginId() == null || epUser.getLoginId().trim().length() == 0 //
+                               || epUser.getLoginPwd() == null) {
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage("Missing required field: email, loginId, or loginPwd");
+                       return portalResponse;
+               }
+
+               try {
+                       // Check for existing user; create if not found.
+                       List<EPUser> userList = userService.getUserByUserId(epUser.getOrgUserId());
+                       if (userList == null || userList.size() == 0) {
+                               // Create user with first, last names etc.; do check for
+                               // duplicates.
+                               String userCreateResult = userService.saveNewUser(epUser, "Yes");
+                               if (!"success".equals(userCreateResult)) {
+                                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                                       portalResponse.setMessage(userCreateResult);
+                                       return portalResponse;
+                               }
+                       }
+
+                       // Check for Portal admin status; promote if not.
+                       if (adminRolesService.isSuperAdmin(epUser)) {
+                               portalResponse.setStatus(PortalRestStatusEnum.OK);
+                       } else {
+                               FieldsValidator fv = portalAdminService.createPortalAdmin(epUser.getOrgUserId());
+                               if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                                       portalResponse.setStatus(PortalRestStatusEnum.OK);
+                               } else {
+                                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                                       portalResponse.setMessage(fv.toString());
+                               }
+                       }
+               } catch (Exception ex) {
+                       // Uncaught exceptions yield 404 and an empty error page
+                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage(ex.toString());
+               }
+
+               EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "response", portalResponse);
+               return portalResponse;
+       }
+
+       /**
+        * Gets the specified application that is on-boarded in Portal.
+        * 
+        * @param request
+        *            HttpServletRequest
+        * @param appId
+        *            Application ID to get
+        * @param response
+        *            httpServletResponse
+        * @return OnboardingApp objects
+        */
+       @ApiOperation(value = "Gets the specified application that is on-boarded in Portal.", response = OnboardingApp.class)
+       @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.GET, produces = "application/json")
+       @ResponseBody
+       public OnboardingApp getOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+                       @PathVariable("appId") Long appId) {
+               EPApp epApp = appService.getApp(appId);
+               OnboardingApp obApp = new OnboardingApp();
+               appService.createOnboardingFromApp(epApp, obApp);
+               EcompPortalUtils.logAndSerializeObject(logger, "getOnboardAppExternal", "response", obApp);
+               return obApp;
+       }
+
+       /**
+        * Adds a new application to Portal. The My Logins App Owner in the request
+        * must be the organization user ID of a person who is a Portal
+        * administrator.
+        * 
+        * <pre>
+        * { 
+               "myLoginsAppOwner" : "abc123",
+               "name": "dashboard",
+               "url": "http://k8s/something",
+               "restUrl" : "http://aic.att.com",
+               "restrictedApp" : true,
+               "isOpen" : true,
+               "isEnabled": false
+               }
+        * </pre>
+        * 
+        * @param request
+        *            HttpServletRequest
+        * @param response
+        *            httpServletResponse
+        * @param newOnboardApp
+        *            Message with details about the app to add
+        * @return PortalRestResponse
+        */
+       @ApiOperation(value = "Adds a new application to Portal.", response = PortalRestResponse.class)
+       @RequestMapping(value = { ONBOARD_APP }, method = RequestMethod.POST, produces = "application/json")
+       @ResponseBody
+       public PortalRestResponse<String> postOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+                       @RequestBody OnboardingApp newOnboardApp) {
+               EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "request", newOnboardApp);
+               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+
+               // Validate fields
+               if (newOnboardApp.id != null) {
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage("Unexpected field: id");
+                       return portalResponse;
+               }
+               if (newOnboardApp.name == null || newOnboardApp.name.trim().length() == 0 //
+                               || newOnboardApp.url == null || newOnboardApp.url.trim().length() == 0 //
+                               || newOnboardApp.restUrl == null || newOnboardApp.restUrl.trim().length() == 0
+                               || newOnboardApp.myLoginsAppOwner == null || newOnboardApp.myLoginsAppOwner.trim().length() == 0
+                               || newOnboardApp.restrictedApp == null //
+                               || newOnboardApp.isOpen == null //
+                               || newOnboardApp.isEnabled == null) {
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage(
+                                       "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
+                       return portalResponse;
+               }
+
+               try {
+                       List<EPUser> userList = userService.getUserByUserId(newOnboardApp.myLoginsAppOwner);
+                       if (userList == null || userList.size() != 1) {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("Failed to find user: " + newOnboardApp.myLoginsAppOwner);
+                               return portalResponse;
+                       }
+
+                       EPUser epUser = userList.get(0);
+                       // Check for Portal admin status
+                       if (! adminRolesService.isSuperAdmin(epUser)) {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());
+                               return portalResponse;                          
+                       }
+                               
+                       newOnboardApp.normalize();
+                       FieldsValidator fv = appService.addOnboardingApp(newOnboardApp, epUser);
+                       if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                               portalResponse.setStatus(PortalRestStatusEnum.OK);
+                       } else {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage(fv.toString());
+                       }
+               } catch (Exception ex) {
+                       // Uncaught exceptions yield 404 and an empty error page
+                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage(ex.toString());
+               }
+               EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "response", portalResponse);
+               return portalResponse;
+       }
+
+       /**
+        * Updates information about an on-boarded application in Portal. The My
+        * Logins App Owner in the request must be the organization user ID of a
+        * person who is a Portal administrator.
+        * <pre>
+          { 
+               "id" : 123,
+               "myLoginsAppOwner" : "abc123",
+               "name": "dashboard",
+               "url": "http://k8s/something",
+               "restUrl" : "http://aic.att.com",
+               "restrictedApp" : true,
+               "isOpen" : true,
+               "isEnabled": false
+               }
+               </pre>
+        * @param request
+        *            HttpServletRequest
+        * @param response
+        *            httpServletResponse
+        * @param appId
+        *            application id
+        * @param oldOnboardApp
+        *            Message with details about the app to add
+        * @return PortalRestResponse
+        */
+       @ApiOperation(value = "Updates information about an on-boarded application in Portal.", response = PortalRestResponse.class)
+       @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.PUT, produces = "application/json")
+       @ResponseBody
+       public PortalRestResponse<String> putOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
+                       @PathVariable("appId") Long appId, @RequestBody OnboardingApp oldOnboardApp) {
+               EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "request", oldOnboardApp);
+               PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+               // Validate fields.
+               if (oldOnboardApp.id == null || !appId.equals(oldOnboardApp.id)) {
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage("Unexpected value for field: id");
+                       return portalResponse;
+               }
+               if (oldOnboardApp.name == null || oldOnboardApp.name.trim().length() == 0 //
+                               || oldOnboardApp.url == null || oldOnboardApp.url.trim().length() == 0 //
+                               || oldOnboardApp.restUrl == null || oldOnboardApp.restUrl.trim().length() == 0
+                               || oldOnboardApp.myLoginsAppOwner == null || oldOnboardApp.myLoginsAppOwner.trim().length() == 0
+                               || oldOnboardApp.restrictedApp == null //
+                               || oldOnboardApp.isOpen == null //
+                               || oldOnboardApp.isEnabled == null) {
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage(
+                                       "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
+                       return portalResponse;
+               }
+
+               try {
+                       List<EPUser> userList = userService.getUserByUserId(oldOnboardApp.myLoginsAppOwner);
+                       if (userList == null || userList.size() != 1) {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("Failed to find user: " + oldOnboardApp.myLoginsAppOwner);
+                               return portalResponse;
+                       }
+
+                       EPUser epUser = userList.get(0);
+                       // Check for Portal admin status
+                       if (! adminRolesService.isSuperAdmin(epUser)) {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("User lacks Portal admin role: " + epUser.getLoginId());
+                               return portalResponse;                          
+                       }
+
+                       oldOnboardApp.normalize();
+                       FieldsValidator fv = appService.modifyOnboardingApp(oldOnboardApp, epUser);
+                       if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                               portalResponse.setStatus(PortalRestStatusEnum.OK);
+                       } else {
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage(fv.toString());
+                       }
+               } catch (Exception ex) {
+                       // Uncaught exceptions yield 404 and an empty error page
+                       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                       portalResponse.setMessage(ex.toString());
+               }
+               EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "response", portalResponse);
+               return portalResponse;
+       }
+
+}