Update license; improve coverage; add docs dir
[portal.git] / ecomp-portal-BE-os / src / main / java / org / openecomp / portalapp / portal / service / UserServiceImpl.java
1 /*-
2  * ============LICENSE_START==========================================
3  * ONAP Portal
4  * ===================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  *
8  * Unless otherwise specified, all software contained herein is licensed
9  * under the Apache License, Version 2.0 (the “License”);
10  * you may not use this software except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *             http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * Unless otherwise specified, all documentation contained herein is licensed
22  * under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
23  * you may not use this documentation except in compliance with the License.
24  * You may obtain a copy of the License at
25  *
26  *             https://creativecommons.org/licenses/by/4.0/
27  *
28  * Unless required by applicable law or agreed to in writing, documentation
29  * distributed under the License is distributed on an "AS IS" BASIS,
30  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31  * See the License for the specific language governing permissions and
32  * limitations under the License.
33  *
34  * ============LICENSE_END============================================
35  *
36  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
37  */
38 package org.openecomp.portalapp.portal.service;
39
40 import java.io.BufferedReader;
41 import java.io.IOException;
42 import java.io.InputStreamReader;
43 import java.net.HttpURLConnection;
44 import java.net.URL;
45 import java.util.ArrayList;
46 import java.util.List;
47
48 import org.json.JSONArray;
49 import org.json.JSONObject;
50 import org.openecomp.portalapp.portal.domain.EPUser;
51 import org.openecomp.portalapp.portal.utils.EPSystemProperties;
52 import org.openecomp.portalsdk.core.FusionObject.Utilities;
53 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
54 import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
55 import org.openecomp.portalsdk.core.service.DataAccessService;
56 import org.openecomp.portalsdk.core.util.SystemProperties;
57 import org.springframework.beans.factory.annotation.Autowired;
58 import org.springframework.stereotype.Service;
59 import org.springframework.transaction.annotation.Transactional;
60
61 @Service("userService")
62 @Transactional
63 public class UserServiceImpl implements UserService {
64
65         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserServiceImpl.class);
66
67         @Autowired
68         private DataAccessService dataAccessService;
69
70         public DataAccessService getDataAccessService() {
71                 return dataAccessService;
72         }
73
74         public void setDataAccessService(DataAccessService dataAccessService) {
75                 this.dataAccessService = dataAccessService;
76         }
77
78         @SuppressWarnings("rawtypes")
79         @Override
80         public List getUserByUserId(String userId) {
81
82                 if (SystemProperties.getProperty(SystemProperties.AUTHENTICATION_MECHANISM).trim().equalsIgnoreCase("OIDC")) {
83                         List<EPUser> users = new ArrayList<EPUser>();
84                         List<EPUser> filterdUsers = new ArrayList<EPUser>();
85                         BufferedReader in = null;
86                         HttpURLConnection con = null;
87                         try {
88                                 String url = EPSystemProperties.getProperty(EPSystemProperties.AUTH_USER_SERVER);
89                                 URL obj = new URL(url);
90
91                                 con = (HttpURLConnection) obj.openConnection();
92
93                                 // optional default is GET
94                                 con.setRequestMethod("GET");
95                                 con.setConnectTimeout(3000);
96                                 con.setReadTimeout(8000);
97
98                                 StringBuffer response = new StringBuffer();
99
100                                 in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
101                                 String inputLine;
102                                 while ((inputLine = in.readLine()) != null)
103                                         response.append(inputLine);
104                                 JSONObject jObject = new JSONObject(response.toString()); // json
105                                 JSONArray jsonUsers = jObject.getJSONArray("response"); // get data object
106                                 for (int i = 0; i < jsonUsers.length(); i++) {
107                                         JSONObject eachObject = jsonUsers.getJSONObject(i);
108                                         EPUser eachUser = new EPUser();
109                                         eachUser.setOrgUserId(eachObject.get("id").toString());// getString("id"));
110                                         eachUser.setFirstName(eachObject.get("givenName").toString());
111                                         eachUser.setLastName(eachObject.get("familyName").toString());
112                                         eachUser.setEmail(eachObject.get("email").toString());
113                                         users.add(eachUser);
114                                 }
115
116                                 for (int i = 0; i < users.size(); i++) {
117
118                                         if (Utilities.nvl(userId).length() > 0) {
119                                                 if (!userId.equalsIgnoreCase(users.get(i).getOrgUserId())) {
120                                                         continue;
121                                                 }
122                                         }
123                                         filterdUsers.add(users.get(i));
124
125                                 }
126
127                         } catch (Exception e) {
128                                 logger.error(EELFLoggerDelegate.errorLogger, "getUserByUserId failed", e);
129                         } finally {
130                                 try {
131                                         in.close();
132                                         con.disconnect();
133                                 } catch (IOException e) {
134                                         logger.error(EELFLoggerDelegate.errorLogger, "getUserByUserId 2 failed", e);
135                                 }
136                         }
137
138                         return filterdUsers;
139
140                 } else {
141
142                         List list = null;
143                         StringBuffer criteria = new StringBuffer();
144                         criteria.append(" where org_user_id = '").append(userId).append("'");
145                         list = getDataAccessService().getList(EPUser.class, criteria.toString(), null, null);
146                         return (list == null || list.size() == 0) ? null : list;
147
148                 }
149
150         }
151
152         @SuppressWarnings("rawtypes")
153         @Override
154         public List getUserByFirstLastName(String firstName, String lastName) {
155
156                 if (!SystemProperties.getProperty(SystemProperties.AUTHENTICATION_MECHANISM).trim().equalsIgnoreCase("OIDC")) {
157
158                         List list = null;
159                         StringBuffer criteria = new StringBuffer();
160                         if (firstName != null)
161                                 criteria.append(" where first_name = '").append(firstName).append("'");
162                         if (lastName != null)
163                                 criteria.append(" where last_name = '").append(lastName).append("'");
164                         list = getDataAccessService().getList(EPUser.class, criteria.toString(), null, null);
165                         return (list == null || list.size() == 0) ? null : list;
166
167                 } else {
168
169                         List<EPUser> users = new ArrayList<EPUser>();
170                         List<EPUser> filterdUsers = new ArrayList<EPUser>();
171                         BufferedReader in = null;
172                         HttpURLConnection con = null;
173                         try {
174                                 String url = EPSystemProperties.getProperty(EPSystemProperties.AUTH_USER_SERVER);
175                                 URL obj = new URL(url);
176
177                                 con = (HttpURLConnection) obj.openConnection();
178
179                                 // optional default is GET
180                                 con.setRequestMethod("GET");
181                                 con.setConnectTimeout(3000);
182                                 con.setReadTimeout(8000);
183
184                                 StringBuffer response = new StringBuffer();
185
186                                 in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
187                                 String inputLine;
188                                 while ((inputLine = in.readLine()) != null)
189                                         response.append(inputLine);
190                                 JSONObject jObject = new JSONObject(response.toString()); // json
191                                 JSONArray jsonUsers = jObject.getJSONArray("response"); // get data object
192                                 for (int i = 0; i < jsonUsers.length(); i++) {
193                                         JSONObject eachObject = jsonUsers.getJSONObject(i);
194                                         EPUser eachUser = new EPUser();
195                                         eachUser.setOrgUserId(eachObject.get("id").toString());// getString("id"));
196                                         eachUser.setFirstName(eachObject.get("givenName").toString());
197                                         eachUser.setLastName(eachObject.get("familyName").toString());
198                                         eachUser.setEmail(eachObject.get("email").toString());
199                                         users.add(eachUser);
200                                 }
201
202                                 for (int i = 0; i < users.size(); i++) {
203
204                                         if (Utilities.nvl(firstName).length() > 0) {
205                                                 if (!firstName.equalsIgnoreCase(users.get(i).getFirstName())) {
206                                                         continue;
207                                                 }
208                                         }
209                                         if (Utilities.nvl(lastName).length() > 0) {
210                                                 if (!lastName.equalsIgnoreCase(users.get(i).getLastName())) {
211                                                         continue;
212                                                 }
213                                         }
214
215                                         filterdUsers.add(users.get(i));
216
217                                 }
218
219                         } catch (Exception e) {
220                                 logger.error(EELFLoggerDelegate.errorLogger, "getUserByFirstLastName failed", e);
221                         } finally {
222                                 try {
223                                         in.close();
224                                         con.disconnect();
225                                 } catch (IOException e) {
226                                         logger.error(EELFLoggerDelegate.errorLogger, "getUserByFirstLastName 2 failed", e);
227                                 }
228                         }
229
230                         return filterdUsers;
231                 }
232
233         }
234
235         public String saveNewUser(EPUser newUser, String checkDuplicate) throws Exception {
236                 try {
237                         List list = null;
238                         StringBuffer criteria = new StringBuffer();
239                         criteria.append(" where org_user_id = '").append(newUser.getLoginId()).append("'");
240                         list = getDataAccessService().getList(EPUser.class, criteria.toString(), null, null);
241                         if (list == null || list.size() == 0) {
242                                 newUser.setActive(true);
243                                 newUser.setOrgUserId(newUser.getLoginId());
244                                 newUser.setLoginPwd(CipherUtil.encrypt(newUser.getLoginPwd()));
245                                 getDataAccessService().saveDomainObject(newUser, null);
246                         } else {
247                                 if (checkDuplicate.equals("Yes")) {
248                                         // userId already exist in database
249                                         return "Record already exist";
250                                 } else {
251
252                                         EPUser oldUser = (EPUser) list.get(0);
253                                         oldUser.setFirstName(newUser.getFirstName());
254                                         oldUser.setLastName(newUser.getLastName());
255                                         oldUser.setMiddleInitial(newUser.getMiddleInitial());
256                                         if (!oldUser.getLoginPwd().equals(newUser.getLoginPwd()))
257                                                 oldUser.setLoginPwd(CipherUtil.encrypt(newUser.getLoginPwd()));
258                                         else
259                                                 oldUser.setLoginPwd(newUser.getLoginPwd());
260                                         getDataAccessService().saveDomainObject(oldUser, null);
261
262                                 }
263
264                         }
265
266                 } catch (Exception e) {
267                         logger.error(EELFLoggerDelegate.errorLogger, "saveNewUser failed", e);
268                         throw new Exception(e);
269                 }
270                 return "success";
271         };
272
273 }