1 package org.openecomp.portalsdk.core.service;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Iterator;
9 import java.util.SortedSet;
10 import java.util.TreeSet;
12 import org.openecomp.portalsdk.core.command.LoginBean;
13 import org.openecomp.portalsdk.core.domain.Role;
14 import org.openecomp.portalsdk.core.domain.RoleFunction;
15 import org.openecomp.portalsdk.core.domain.User;
16 import org.openecomp.portalsdk.core.domain.UserApp;
17 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
18 import org.openecomp.portalsdk.core.menu.MenuBuilder;
19 import org.openecomp.portalsdk.core.service.support.FusionService;
20 import org.openecomp.portalsdk.core.util.SystemProperties;
21 import org.openecomp.portalsdk.core.web.support.AppUtils;
22 import org.openecomp.portalsdk.core.web.support.UserUtils;
23 import org.springframework.beans.factory.annotation.Autowired;
24 import org.springframework.transaction.annotation.Transactional;
26 import com.fasterxml.jackson.databind.ObjectMapper;
30 public class LoginServiceCentralizedImpl extends FusionService implements LoginService {
32 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(LoginServiceCentralizedImpl.class);
35 AppService appService;
38 private DataAccessService dataAccessService;
41 RestApiRequestBuilder restApiRequestBuilder;
43 @SuppressWarnings("unused")
44 private MenuBuilder menuBuilder;
47 public LoginBean findUser(LoginBean bean, String menuPropertiesFilename, HashMap additionalParams)
49 return findUser(bean, menuPropertiesFilename, additionalParams, true);
52 @SuppressWarnings("rawtypes")
53 public LoginBean findUser(LoginBean bean, String menuPropertiesFilename, HashMap additionalParams,
54 boolean matchPassword) throws Exception {
58 if (bean.getUserid() != null && bean.getUserid() != null) {
59 user = (User) findUser(bean);
62 user = (User) findUser(bean.getLoginId(), bean.getLoginPwd());
64 user = (User) findUserWithoutPwd(bean.getLoginId());
69 if (AppUtils.isApplicationLocked()
70 && !UserUtils.hasRole(user, SystemProperties.getProperty(SystemProperties.SYS_ADMIN_ROLE_ID))) {
71 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_APPLICATION_LOCKED);
74 // raise an error if the user is inactive
75 if (!user.getActive()) {
76 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_USER_INACTIVE);
79 if (!userHasActiveRoles(user)) {
80 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_USER_INACTIVE);
82 // only login the user if no errors have occurred
83 if (bean.getLoginErrorMessage() == null) {
85 // this will be a snapshot of the user's information as
86 // retrieved from the database
87 userCopy = (User) user.clone();
89 User appuser = getUser(userCopy);
91 appuser.setLastLoginDate(new Date());
93 // update the last logged in date for the user
94 // user.setLastLoginDate(new Date());
95 getDataAccessService().saveDomainObject(appuser, additionalParams);
97 // update the audit log of the user
98 // Check for the client device type and set log attributes
101 // save the above changes to the User and their audit trail
103 // create the application menu based on the user's privileges
105 Set appMenu = getMenuBuilder().getMenu(
106 SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_SET_NAME), dataAccessService);
107 bean.setMenu(appMenu != null ? appMenu : new HashSet());
108 Set businessDirectMenu = getMenuBuilder().getMenu(
109 SystemProperties.getProperty(SystemProperties.BUSINESS_DIRECT_MENU_SET_NAME),
111 bean.setBusinessDirectMenu(businessDirectMenu != null ? businessDirectMenu : new HashSet());
113 bean.setUser(userCopy);
120 private boolean userHasActiveRoles(User user) {
121 boolean hasActiveRole = false;
122 Iterator roles = user.getRoles().iterator();
123 while (roles.hasNext()) {
124 Role role = (Role) roles.next();
125 if (role.getActive()) {
126 hasActiveRole = true;
130 return hasActiveRole;
133 @SuppressWarnings("null")
134 public User findUser(LoginBean bean) throws Exception {
138 ObjectMapper mapper = new ObjectMapper();
139 HashSet<RoleFunction> rolefun = null;
141 String repsonse = restApiRequestBuilder.getViaREST("/getUser/" + bean.getUserid(), true, bean.getUserid());
143 user = mapper.readValue(repsonse, User.class);
145 @SuppressWarnings("unchecked")
146 Set<UserApp> setAppsObj = user.getUserApps();
148 Iterator<UserApp> it = setAppsObj.iterator();
149 while (it.hasNext()) {
150 Object next = it.next();
152 UserApp nextApp = mapper.convertValue(next, UserApp.class);
153 rolefun = new HashSet<>();
154 Role role = nextApp.getRole();
156 Set<RoleFunction> roleFunctionList = role.getRoleFunctions();
157 Set<RoleFunction> roleFunctionListNew = new HashSet<>();
158 Iterator<RoleFunction> itetaror = roleFunctionList.iterator();
159 while (itetaror.hasNext()) {
160 Object nextValue = itetaror.next();
161 RoleFunction roleFunction = mapper.convertValue(nextValue, RoleFunction.class);
162 roleFunctionListNew.add(roleFunction);
165 role.setRoleFunctions(roleFunctionListNew);
166 nextApp.setRole(role);
167 nextApp.getRole().getRoleFunctions();
168 SortedSet<UserApp> UserAppSet = new TreeSet<>();
169 UserAppSet.add(nextApp);
170 user.setUserApps(UserAppSet);
176 public User findUser(String loginId, String password) {
180 StringBuffer criteria = new StringBuffer();
181 criteria.append(" where login_id = '").append(loginId).append("'").append(" and login_pwd = '").append(password)
184 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
185 return (list == null || list.size() == 0) ? null : (User) list.get(0);
188 private User findUserWithoutPwd(String loginId) {
190 StringBuffer criteria = new StringBuffer();
191 criteria.append(" where login_id = '").append(loginId).append("'");
192 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
193 return (list == null || list.size() == 0) ? null : (User) list.get(0);
196 public DataAccessService getDataAccessService() {
197 return dataAccessService;
200 public void setDataAccessService(DataAccessService dataAccessService) {
201 this.dataAccessService = dataAccessService;
204 public MenuBuilder getMenuBuilder() {
205 return new MenuBuilder();
208 public void setMenuBuilder(MenuBuilder menuBuilder) {
209 this.menuBuilder = menuBuilder;
212 public User getUser(User user) {
215 StringBuffer criteria = new StringBuffer();
216 criteria.append(" where login_id = '").append(user.getLoginId()).append("'");
218 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
219 return (list == null || list.size() == 0) ? null : (User) list.get(0);