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