update sdc portal integration

Issue-ID: SDC-1749

Change-Id: Ie306076357cb572402ac80b4be9eb9c5cfa960dd
Signed-off-by: Tal Gitelman <tal.gitelman@att.com>
diff --git a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/attributes/default.rb b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/attributes/default.rb
index d1d6f64..54f7128 100644
--- a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/attributes/default.rb
+++ b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/attributes/default.rb
@@ -40,4 +40,5 @@
 #Portal
 default['ECompP']['cipher_key'] = "AGLDdG4D04BKm2IxIWEr8o=="
 default['ECompP']['portal_user'] = "Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA="
-default['ECompP']['portal_pass'] = "j85yNhyIs7zKYbR1VlwEfNhS6b7Om4l0Gx5O8931sCI="
\ No newline at end of file
+default['ECompP']['portal_pass'] = "j85yNhyIs7zKYbR1VlwEfNhS6b7Om4l0Gx5O8931sCI="
+default['ECompP']['portal_app_name'] = "Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA="
\ No newline at end of file
diff --git a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_and_key_properties.rb b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_and_key_properties.rb
index bf724de..4f99938 100644
--- a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_and_key_properties.rb
+++ b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_and_key_properties.rb
@@ -8,7 +8,8 @@
         :ecomp_rest_url      => node['ECompP']['ecomp_rest_url'],
         :ecomp_redirect_url  => node['ECompP']['ecomp_redirect_url'],
         :ecomp_portal_user  => node['ECompP']['portal_user'],
-        :ecomp_portal_pass  => node['ECompP']['portal_pass']
+        :ecomp_portal_pass  => node['ECompP']['portal_pass'],
+        :portal_app_name  => node['ECompP']['portal_app_name'],
     })
 end
 
diff --git a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/templates/default/BE-portal.properties.erb b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/templates/default/BE-portal.properties.erb
index bf58f77..d43c2fa 100644
--- a/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/templates/default/BE-portal.properties.erb
+++ b/catalog-be/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/templates/default/BE-portal.properties.erb
@@ -54,14 +54,17 @@
 ##########################################################################
 
 # Name of java class that implements the OnBoardingApiService interface.
-portal.api.impl.class = org.openecomp.sdc.be.ecomp.EcompIntImpl
+portal.api.impl.class = org.openecomp.sdc.be.ecomp.PortalRestAPICentralServiceImpl
+role_access_centralized = remote
 
 # URL of the Portal where this app is onboarded
 ecomp_redirect_url = <%= @ecomp_redirect_url %>
 
 # URL of the ECOMP Portal REST API
 ecomp_rest_url = <%= @ecomp_rest_url %>
+
 #Portal user & key
 portal_user = <%= @ecomp_portal_user %>
 portal_pass = <%= @ecomp_portal_pass %>
+portal_app_name = <%= @portal_app_name %>
 
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImpl.java b/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImpl.java
new file mode 100644
index 0000000..0dd3717
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImpl.java
@@ -0,0 +1,236 @@
+package org.openecomp.sdc.be.ecomp;
+
+import fj.data.Either;
+import org.onap.portalsdk.core.onboarding.crossapi.IPortalRestCentralService;
+import org.onap.portalsdk.core.onboarding.exception.CipherUtilException;
+import org.onap.portalsdk.core.onboarding.exception.PortalAPIException;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.onboarding.util.PortalApiProperties;
+import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.openecomp.sdc.be.config.BeEcompErrorManager;
+import org.openecomp.sdc.be.ecomp.converters.EcompUserConverter;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.be.user.UserBusinessLogic;
+import org.openecomp.sdc.common.api.Constants;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.openecomp.sdc.exception.ResponseFormat;
+import org.springframework.context.ApplicationContext;
+import org.springframework.web.context.ContextLoader;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+public final class PortalRestAPICentralServiceImpl implements IPortalRestCentralService {
+    private static final String FAILED_TO_UPDATE_USER_CREDENTIALS = "Failed to update user credentials";
+    private static final String FAILED_TO_UPDATE_USER_ROLE = "Failed to update user role";
+    private static final String FAILED_TO_DEACTIVATE_USER = "Failed to deactivate user {}";
+    private static final String FAILED_TO_DEACTIVATE_USER2 = "Failed to deactivate user";
+    private static final String FAILED_TO_EDIT_USER = "Failed to edit user";
+    private static final String EDIT_USER = "EditUser";
+    private static final String CHECK_ROLES = "checkIfSingleRoleProvided";
+    private static final String RECEIVED_NULL_FOR_ARGUMENT_LOGIN_ID = "Received null for argument loginId";
+    private static final String RECEIVED_NULL_ROLES = "Received null roles for user";
+    private static final String RECEIVED_MULTIPLE_ROLES = "Received multiple roles for user {}";
+    private static final String RECEIVED_MULTIPLE_ROLES2 = "Received multiple roles for user";
+    private static final String NULL_POINTER_RETURNED_FROM_USER_CONVERTER = "NULL pointer returned from user converter";
+    private static final String FAILED_TO_CREATE_USER = "Failed to create user {}";
+    private static final String FAILED_TO_CONVERT_USER = "Failed to convert user";
+    private static final String JH0003 = "jh0003";
+    private static final String PUSH_USER = "PushUser";
+    private static final String RECEIVED_NULL_FOR_ARGUMENT_USER = "Received null for argument user";
+    private static final Logger log = Logger.getLogger(PortalRestAPICentralServiceImpl.class);
+
+    public PortalRestAPICentralServiceImpl() {
+        log.debug("PortalRestAPICentralServiceImpl Class Instantiated");
+    }
+
+    //TODO put username password and appName into portal properties
+    @Override
+    public Map<String, String> getAppCredentials() throws PortalAPIException {
+        Map<String, String> credMap = new HashMap<>();
+        String portal_user = PortalApiProperties.getProperty(PortalPropertiesEnum.PORTAL_USER.value);
+        String password = PortalApiProperties.getProperty(PortalPropertiesEnum.PORTAL_PASS.value);
+        String appName = PortalApiProperties.getProperty(PortalPropertiesEnum.PORTAL_APP_NAME.value);
+        try {
+            credMap.put(PortalPropertiesEnum.PORTAL_USER.value, CipherUtil.decryptPKC(portal_user));
+            credMap.put(PortalPropertiesEnum.PORTAL_PASS.value, CipherUtil.decryptPKC(password));
+            credMap.put(PortalPropertiesEnum.PORTAL_APP_NAME.value, CipherUtil.decryptPKC(appName));
+        } catch (CipherUtilException e) {
+            log.debug("User authentication failed - Decryption failed", e);
+            throw new PortalAPIException("Failed to decrypt" + e.getMessage());
+        }
+
+        return credMap;
+    }
+
+    @Override
+    public void pushUser(EcompUser user) throws PortalAPIException {
+        log.debug("Start handle request of ECOMP pushUser");
+
+        if (user == null) {
+            BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, RECEIVED_NULL_FOR_ARGUMENT_USER, BeEcompErrorManager.ErrorSeverity.INFO);
+            log.debug(RECEIVED_NULL_FOR_ARGUMENT_USER);
+            throw new PortalAPIException(RECEIVED_NULL_FOR_ARGUMENT_USER);
+        }
+        checkIfSingleRoleProvided(user);
+        UserBusinessLogic userBusinessLogic = getUserBusinessLogic();
+
+        final String modifierAttId = JH0003;
+        User modifier = new User();
+        modifier.setUserId(modifierAttId);
+        log.debug("modifier id is {}", modifierAttId);
+
+        Either<User, String> newASDCUser = EcompUserConverter.convertEcompUserToUser(user);
+        if (newASDCUser.isRight()) {
+            BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, FAILED_TO_CONVERT_USER, BeEcompErrorManager.ErrorSeverity.INFO);
+            log.debug(FAILED_TO_CREATE_USER, user);
+            throw new PortalAPIException("Failed to create user " + newASDCUser.right().value());
+        } else if (newASDCUser.left().value() == null) {
+            BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, NULL_POINTER_RETURNED_FROM_USER_CONVERTER, BeEcompErrorManager.ErrorSeverity.INFO);
+            log.debug(FAILED_TO_CREATE_USER, user);
+            throw new PortalAPIException("Failed to create user " + newASDCUser.right().value());
+        }
+
+        User convertedAsdcUser = newASDCUser.left().value();
+        Either<User, ResponseFormat> createUserResponse = userBusinessLogic.createUser(modifier, convertedAsdcUser);
+
+        // ALREADY EXIST ResponseFormat
+        final String ALREADY_EXISTS_RESPONSE_ID = "SVC4006";
+
+        if (createUserResponse.isRight()) {
+            if (!createUserResponse.right().value().getMessageId().equals(ALREADY_EXISTS_RESPONSE_ID)) {
+                log.debug(FAILED_TO_CREATE_USER, user);
+                BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, FAILED_TO_CREATE_USER, BeEcompErrorManager.ErrorSeverity.ERROR);
+                throw new PortalAPIException(FAILED_TO_CREATE_USER + createUserResponse.right());
+            } else {
+                log.debug("User already exist and will be updated and reactivated {}", user);
+                Either<User, ResponseFormat> updateUserResp = userBusinessLogic.updateUserCredentials(convertedAsdcUser);
+                if(updateUserResp.isRight()){
+                    log.debug(FAILED_TO_UPDATE_USER_CREDENTIALS, user);
+                    BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, FAILED_TO_UPDATE_USER_CREDENTIALS, BeEcompErrorManager.ErrorSeverity.ERROR);
+                    throw new PortalAPIException(FAILED_TO_UPDATE_USER_CREDENTIALS + createUserResponse.right());
+                }
+                Either<User, ResponseFormat> updateUserRoleResp = userBusinessLogic.updateUserRole(modifier, convertedAsdcUser.getUserId(), convertedAsdcUser.getRole());
+                if(updateUserRoleResp.isRight()){
+                    log.debug(FAILED_TO_UPDATE_USER_ROLE, user);
+                    BeEcompErrorManager.getInstance().logInvalidInputError(PUSH_USER, FAILED_TO_UPDATE_USER_ROLE, BeEcompErrorManager.ErrorSeverity.ERROR);
+                    throw new PortalAPIException(FAILED_TO_UPDATE_USER_ROLE + createUserResponse.right());
+                }
+            }
+
+        }
+        log.debug("User created {}", user);
+    }
+
+    @Override
+    public void editUser(String loginId, EcompUser user) throws PortalAPIException {
+        log.debug("Start handle request of ECOMP editUser");
+
+        if (user == null) {
+            log.debug(RECEIVED_NULL_FOR_ARGUMENT_USER);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, RECEIVED_NULL_FOR_ARGUMENT_USER, BeEcompErrorManager.ErrorSeverity.INFO);
+            throw new PortalAPIException(RECEIVED_NULL_FOR_ARGUMENT_USER);
+        } else if (loginId == null) {
+            log.debug(RECEIVED_NULL_FOR_ARGUMENT_LOGIN_ID);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, RECEIVED_NULL_FOR_ARGUMENT_LOGIN_ID, BeEcompErrorManager.ErrorSeverity.INFO);
+            throw new PortalAPIException(RECEIVED_NULL_FOR_ARGUMENT_LOGIN_ID);
+        }
+
+        checkIfSingleRoleProvided(user);
+        UserBusinessLogic userBusinessLogic = getUserBusinessLogic();
+
+        final String modifierAttId = JH0003;
+        User modifier = new User();
+        modifier.setUserId(modifierAttId);
+        log.debug("modifier id is {}", modifierAttId);
+
+        if (user.getLoginId() != null && !user.getLoginId().equals(loginId)) {
+            log.debug("loginId and user loginId not equal");
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, "loginId and user loginId not equal", BeEcompErrorManager.ErrorSeverity.INFO);
+            throw new PortalAPIException("loginId not equals to the user loginId field");
+        } else if (user.getLoginId() == null) {
+            user.setLoginId(loginId);
+        }
+
+        Either<User, String> convertorResp = EcompUserConverter.convertEcompUserToUser(user);
+        if (convertorResp.isRight()) {
+            log.debug(FAILED_TO_CONVERT_USER);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, FAILED_TO_CONVERT_USER, BeEcompErrorManager.ErrorSeverity.INFO);
+            throw new PortalAPIException(convertorResp.right().value());
+        } else if (convertorResp.left().value() == null) {
+            log.debug(NULL_POINTER_RETURNED_FROM_USER_CONVERTER);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, NULL_POINTER_RETURNED_FROM_USER_CONVERTER, BeEcompErrorManager.ErrorSeverity.INFO);
+            throw new PortalAPIException(FAILED_TO_EDIT_USER);
+        }
+
+        User asdcUser = convertorResp.left().value();
+        Either<User, ResponseFormat> updateUserCredentialsResponse = userBusinessLogic.updateUserCredentials(asdcUser);
+
+        if (updateUserCredentialsResponse.isRight()) {
+            log.debug(FAILED_TO_UPDATE_USER_CREDENTIALS);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, FAILED_TO_UPDATE_USER_CREDENTIALS, BeEcompErrorManager.ErrorSeverity.ERROR);
+            throw new PortalAPIException(FAILED_TO_EDIT_USER + updateUserCredentialsResponse.right().value());
+        }
+
+        Either<User, ResponseFormat> deActivateUser;
+
+        if(asdcUser.getRole() == null || asdcUser.getRole().isEmpty()){
+            deActivateUser = userBusinessLogic.deActivateUser(modifier, asdcUser.getUserId());
+        } else {
+            return;
+        }
+
+        if (deActivateUser.isRight()) {
+            log.debug(FAILED_TO_DEACTIVATE_USER, asdcUser);
+            BeEcompErrorManager.getInstance().logInvalidInputError(EDIT_USER, FAILED_TO_DEACTIVATE_USER2, BeEcompErrorManager.ErrorSeverity.ERROR);
+            throw new PortalAPIException(FAILED_TO_DEACTIVATE_USER2 + deActivateUser.right().value());
+        }
+    }
+
+    @Override
+    public String getUserId(HttpServletRequest request) throws PortalAPIException {
+        return request.getHeader(Constants.USER_ID_HEADER);
+    }
+
+    private UserBusinessLogic getUserBusinessLogic() throws PortalAPIException {
+        UserBusinessLogic ubl = null;
+        try {
+            ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
+            ubl = (UserBusinessLogic) ctx.getBean("userBusinessLogic");
+        } catch (Exception e) {
+            log.debug("Failed to get user UserBusinessLogic", e);
+            BeEcompErrorManager.getInstance().logInvalidInputError("getUserBusinessLogic", "Exception thrown" + e.getMessage(), BeEcompErrorManager.ErrorSeverity.ERROR);
+            throw new PortalAPIException("SDC Internal server error");
+        }
+        return ubl;
+    }
+
+    private void checkIfSingleRoleProvided(EcompUser user) throws PortalAPIException {
+        if(user.getRoles() == null) {
+            log.debug(RECEIVED_NULL_ROLES, user);
+            BeEcompErrorManager.getInstance().logInvalidInputError(CHECK_ROLES, RECEIVED_NULL_ROLES, BeEcompErrorManager.ErrorSeverity.ERROR);
+            throw new PortalAPIException(RECEIVED_NULL_ROLES + user);
+        }else if(user.getRoles().size() > 1) {
+            log.debug(RECEIVED_MULTIPLE_ROLES, user);
+            BeEcompErrorManager.getInstance().logInvalidInputError(CHECK_ROLES, RECEIVED_MULTIPLE_ROLES2, BeEcompErrorManager.ErrorSeverity.ERROR);
+            throw new PortalAPIException(FAILED_TO_DEACTIVATE_USER2 + user);
+        }
+    }
+
+    public enum PortalPropertiesEnum{
+        PORTAL_PASS ("portal_pass"),
+        PORTAL_USER("portal_user"),
+        PORTAL_APP_NAME("portal_app_name");
+
+        private final String value;
+
+        PortalPropertiesEnum(String value) {
+            this.value = value;
+        }
+
+        public String value() {
+            return value;
+        }
+    }
+}
diff --git a/catalog-be/src/main/resources/portal.properties b/catalog-be/src/main/resources/portal.properties
index fbedd05..185a4fb 100644
--- a/catalog-be/src/main/resources/portal.properties
+++ b/catalog-be/src/main/resources/portal.properties
@@ -53,7 +53,8 @@
 ##########################################################################
 
 # Name of java class that implements the OnBoardingApiService interface.
-portal.api.impl.class = org.openecomp.sdc.be.ecomp.EcompIntImpl
+portal.api.impl.class = org.openecomp.sdc.be.ecomp.PortalRestAPICentralServiceImpl
+role_access_centralized = remote
 
 # URL of the Portal where this app is onboarded
 ecomp_redirect_url = http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm
@@ -67,6 +68,7 @@
 #Portal user & key
 portal_user = Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA=
 portal_pass = j85yNhyIs7zKYbR1VlwEfNhS6b7Om4l0Gx5O8931sCI=
+portal_app_name = Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA=
 
 # UEB Configuration
 # If key ueb_listeners_enable is set to false,
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/BaseServiceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/BaseServiceBusinessLogicTest.java
index 6ba28fe..20f7f18 100644
--- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/BaseServiceBusinessLogicTest.java
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/BaseServiceBusinessLogicTest.java
@@ -48,6 +48,7 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
+
 public abstract class BaseServiceBusinessLogicTest {
     private static final String SERVICE_CATEGORY = "Mobility";
     final ServletContext servletContext = Mockito.mock(ServletContext.class);
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImplTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImplTest.java
new file mode 100644
index 0000000..552d2dd
--- /dev/null
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/ecomp/PortalRestAPICentralServiceImplTest.java
@@ -0,0 +1,151 @@
+package org.openecomp.sdc.be.ecomp;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.portalsdk.core.onboarding.exception.PortalAPIException;
+import org.onap.portalsdk.core.restful.domain.EcompRole;
+import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.openecomp.sdc.be.user.UserBusinessLogic;
+import org.springframework.web.context.ContextLoader;
+import org.springframework.web.context.WebApplicationContext;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+public class PortalRestAPICentralServiceImplTest {
+    @Mock
+    ContextLoader conLoader;
+    @Mock
+    WebApplicationContext apContext;
+    @Mock
+    UserBusinessLogic userBusinessLogic;
+    @Mock
+    ContextLoader ctx;
+    @InjectMocks
+    PortalRestAPICentralServiceImpl testSubject;
+
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testGetAppCredentials() throws Exception {
+        Map<String, String> appCredentials = testSubject.getAppCredentials();
+        Assert.assertTrue(appCredentials.get(PortalRestAPICentralServiceImpl.PortalPropertiesEnum.PORTAL_APP_NAME.value()).equals("sdc"));
+        Assert.assertTrue(appCredentials.get(PortalRestAPICentralServiceImpl.PortalPropertiesEnum.PORTAL_USER.value()).equals("sdc"));
+        Assert.assertTrue(appCredentials.get(PortalRestAPICentralServiceImpl.PortalPropertiesEnum.PORTAL_PASS.value()).equals("asdc"));
+    }
+
+    /*@Test
+    public void testPushUser() throws Exception {
+        EcompUser user = new EcompUser();
+        Set<EcompRole> roleSet = new HashSet<>();
+        EcompRole role = new EcompRole();
+        role.setId(1L);
+        role.setName("Designer");
+        roleSet.add(role);
+        user.setRoles(roleSet);
+        testSubject.pushUser(user);
+    }*/
+
+    @Test
+    public void testPushUserNullRoles() throws Exception {
+        EcompUser user = new EcompUser();
+        try{
+            testSubject.pushUser(user);
+        } catch (PortalAPIException e){
+            Assert.assertTrue(e.getMessage().equals("Received null roles for user" + user));
+        }
+
+    }
+
+    @Test
+    public void testPushUserUserNull() throws Exception {
+        try {
+            testSubject.pushUser(null);
+        } catch (PortalAPIException e) {
+            Assert.assertTrue(e.getMessage().equals("Received null for argument user"));
+        }
+
+    }
+
+    /**
+    *
+    * Method: editUser(String loginId, EcompUser user)
+    *
+    */
+    @Test
+    public void testEditUser() throws Exception {
+    //TODO: Test goes here...
+    }
+
+    /**
+    *
+    * Method: getUserId(HttpServletRequest request)
+    *
+    */
+    @Test
+    public void testGetUserId() throws Exception {
+    //TODO: Test goes here...
+    }
+
+    /**
+    *
+    * Method: value()
+    *
+    */
+    @Test
+    public void testValue() throws Exception {
+    //TODO: Test goes here...
+    }
+
+
+    /**
+    *
+    * Method: getUserBusinessLogic()
+    *
+    */
+    @Test
+    public void testGetUserBusinessLogic() throws Exception {
+    //TODO: Test goes here...
+
+    try {
+       Method method = testSubject.getClass().getMethod("getUserBusinessLogic");
+       method.setAccessible(true);
+       method.invoke(testSubject);
+    } catch(NoSuchMethodException e) {
+    } catch(IllegalAccessException e) {
+    } catch(InvocationTargetException e) {
+    }
+    }
+
+    /**
+    *
+    * Method: checkIfSingleRoleProvided(EcompUser user)
+    *
+    */
+    @Test
+    public void testCheckIfSingleRoleProvided() throws Exception {
+    //TODO: Test goes here...
+    /*
+    try {
+       Method method = PortalRestAPICentralServiceImpl.getClass().getMethod("checkIfSingleRoleProvided", EcompUser.class);
+       method.setAccessible(true);
+       method.invoke(<Object>, <Parameters>);
+    } catch(NoSuchMethodException e) {
+    } catch(IllegalAccessException e) {
+    } catch(InvocationTargetException e) {
+    }
+    */
+    }
+
+} 
diff --git a/sdc-os-chef/environments/Template.json b/sdc-os-chef/environments/Template.json
index d738939..c998d8b 100644
--- a/sdc-os-chef/environments/Template.json
+++ b/sdc-os-chef/environments/Template.json
@@ -23,7 +23,8 @@
             "ecomp_redirect_url": "http://portal.api.simpledemo.openecomp.org:8989/ECOMPPORTAL/login.htm",
             "cipher_key": "AGLDdG4D04BKm2IxIWEr8o==",
             "portal_user": "Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA=",
-            "portal_pass": "j85yNhyIs7zKYbR1VlwEfNhS6b7Om4l0Gx5O8931sCI="
+            "portal_pass": "j85yNhyIs7zKYbR1VlwEfNhS6b7Om4l0Gx5O8931sCI=",
+            "portal_app_name": "Ipwxi2oLvDxctMA1royaRw1W0jhucLx+grHzci3ePIA="
         },
         "UEB": {
             "PublicKey": "iPIxkpAMI8qTcQj8",