bab2249c72157b8d9c9dd898375a695b1e969e1f
[portal/sdk.git] /
1 package org.openecomp.portalsdk.core.service;
2
3 import java.util.Date;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.Set;
10
11 import org.openecomp.portalsdk.core.command.LoginBean;
12 import org.openecomp.portalsdk.core.domain.Role;
13 import org.openecomp.portalsdk.core.domain.User;
14 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
15 import org.openecomp.portalsdk.core.menu.MenuBuilder;
16 import org.openecomp.portalsdk.core.service.support.FusionService;
17 import org.openecomp.portalsdk.core.util.SystemProperties;
18 import org.openecomp.portalsdk.core.web.support.AppUtils;
19 import org.openecomp.portalsdk.core.web.support.UserUtils;
20 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.transaction.annotation.Transactional;
22
23
24 @Transactional
25 public class LoginServiceCentralizedImpl extends FusionService implements LoginService {
26
27         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(LoginServiceCentralizedImpl.class);
28
29         @Autowired
30         AppService appService;
31
32         @Autowired
33         private DataAccessService dataAccessService;
34         
35         @Autowired
36         RestApiRequestBuilder restApiRequestBuilder;
37         
38         @Autowired
39         UserService userService;
40
41         @SuppressWarnings("unused")
42         private MenuBuilder menuBuilder;
43
44         @Override
45         public LoginBean findUser(LoginBean bean, String menuPropertiesFilename, HashMap additionalParams)
46                         throws Exception {
47                 return findUser(bean, menuPropertiesFilename, additionalParams, true);
48         }
49
50         @SuppressWarnings("rawtypes")
51         public LoginBean findUser(LoginBean bean, String menuPropertiesFilename, HashMap additionalParams,
52                         boolean matchPassword) throws Exception {
53                 User user = null;
54                 User userCopy = null;
55
56                 if (bean.getUserid() != null && bean.getUserid() != null) {
57                         user = (User) findUser(bean);
58                 } else {
59                         if (matchPassword)
60                                 user = (User) findUser(bean.getLoginId(), bean.getLoginPwd());
61                         else
62                                 user = (User) findUserWithoutPwd(bean.getLoginId());
63                 }
64
65                 if (user != null) {
66
67                         if (AppUtils.isApplicationLocked()
68                                         && !UserUtils.hasRole(user, SystemProperties.getProperty(SystemProperties.SYS_ADMIN_ROLE_ID))) {
69                                 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_APPLICATION_LOCKED);
70                         }
71
72                         // raise an error if the user is inactive
73                         if (!user.getActive()) {
74                                 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_USER_INACTIVE);
75                         }
76
77                         if (!userHasActiveRoles(user)) {
78                                 bean.setLoginErrorMessage(SystemProperties.MESSAGE_KEY_LOGIN_ERROR_USER_INACTIVE);
79                         }
80                         // only login the user if no errors have occurred
81                         if (bean.getLoginErrorMessage() == null) {
82
83                                 // this will be a snapshot of the user's information as
84                                 // retrieved from the database
85                                 userCopy = (User) user.clone();
86
87                                 User appuser = getUser(userCopy);
88
89                                 appuser.setLastLoginDate(new Date());
90
91                                 // update the last logged in date for the user
92                                 // user.setLastLoginDate(new Date());
93                                 getDataAccessService().saveDomainObject(appuser, additionalParams);
94
95                                 // update the audit log of the user
96                                 // Check for the client device type and set log attributes
97                                 // appropriately
98
99                                 // save the above changes to the User and their audit trail
100
101                                 // create the application menu based on the user's privileges
102
103                                 Set appMenu = getMenuBuilder().getMenu(
104                                                 SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_SET_NAME), dataAccessService);
105                                 bean.setMenu(appMenu != null ? appMenu : new HashSet());
106                                 Set businessDirectMenu = getMenuBuilder().getMenu(
107                                                 SystemProperties.getProperty(SystemProperties.BUSINESS_DIRECT_MENU_SET_NAME),
108                                                 dataAccessService);
109                                 bean.setBusinessDirectMenu(businessDirectMenu != null ? businessDirectMenu : new HashSet());
110
111                                 bean.setUser(userCopy);
112                         }
113                 }
114
115                 return bean;
116         }
117
118         private boolean userHasActiveRoles(User user) {
119                 boolean hasActiveRole = false;
120                 Iterator roles = user.getRoles().iterator();
121                 while (roles.hasNext()) {
122                         Role role = (Role) roles.next();
123                         if (role.getActive()) {
124                                 hasActiveRole = true;
125                                 break;
126                         }
127                 }
128                 return hasActiveRole;
129         }
130
131         @SuppressWarnings("null")
132         public User findUser(LoginBean bean) throws Exception {
133                 User user = null;
134                 String repsonse = restApiRequestBuilder.getViaREST("/user/" + bean.getUserid(), true, bean.getUserid());
135                 user = userService.userMapper(repsonse);
136                 user.setId(getUserIdByOrgUserId(user.getOrgUserId()));
137                 return user;
138         }
139         
140         public Long getUserIdByOrgUserId(String orgUserId) {
141                 Map<String, String> params = new HashMap<String, String>();
142                 params.put("orgUserId", orgUserId);
143                 @SuppressWarnings("rawtypes")
144                 List list = getDataAccessService().executeNamedQuery("getUserIdByorgUserId", params, null);
145                 Long userId = null;
146                 if (list != null && !list.isEmpty())
147                         userId = (Long) list.get(0);
148                 return userId;
149         }
150         
151
152         public User findUser(String loginId, String password) {
153
154                 List list = null;
155
156                 StringBuffer criteria = new StringBuffer();
157                 criteria.append(" where login_id = '").append(loginId).append("'").append(" and login_pwd = '").append(password)
158                                 .append("'");
159
160                 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
161                 return (list == null || list.size() == 0) ? null : (User) list.get(0);
162         }
163
164         private User findUserWithoutPwd(String loginId) {
165                 List list = null;
166                 StringBuffer criteria = new StringBuffer();
167                 criteria.append(" where login_id = '").append(loginId).append("'");
168                 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
169                 return (list == null || list.size() == 0) ? null : (User) list.get(0);
170         }
171
172         public DataAccessService getDataAccessService() {
173                 return dataAccessService;
174         }
175
176         public void setDataAccessService(DataAccessService dataAccessService) {
177                 this.dataAccessService = dataAccessService;
178         }
179
180         public MenuBuilder getMenuBuilder() {
181                 return new MenuBuilder();
182         }
183
184         public void setMenuBuilder(MenuBuilder menuBuilder) {
185                 this.menuBuilder = menuBuilder;
186         }
187
188         public User getUser(User user) {
189                 List list = null;
190
191                 StringBuffer criteria = new StringBuffer();
192                 criteria.append(" where login_id = '").append(user.getLoginId()).append("'");
193
194                 list = getDataAccessService().getList(User.class, criteria.toString(), null, null);
195                 return (list == null || list.size() == 0) ? null : (User) list.get(0);
196
197         }
198
199 }