blob: 8820ce3b661936b30e79169d24eb41868d3cb6af [file] [log] [blame]
/**
******************************************************************************
* Copyright © 2017-2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/
package org.eclipse.openk.elogbook.controller;
import org.apache.log4j.Logger;
import org.eclipse.openk.elogbook.auth2.model.KeyCloakUser;
import org.eclipse.openk.elogbook.auth2.util.JwtHelper;
import org.eclipse.openk.elogbook.common.BackendConfig;
import org.eclipse.openk.elogbook.common.JsonGeneratorBase;
import org.eclipse.openk.elogbook.common.mapper.KeyCloakUserMapper;
import org.eclipse.openk.elogbook.communication.RestServiceWrapper;
import org.eclipse.openk.elogbook.exceptions.BtbException;
import org.eclipse.openk.elogbook.exceptions.BtbInternalServerError;
import org.eclipse.openk.elogbook.exceptions.BtbUnauthorized;
import org.eclipse.openk.elogbook.persistence.dao.AutoCloseEntityManager;
import org.eclipse.openk.elogbook.persistence.dao.EntityHelper;
import org.eclipse.openk.elogbook.persistence.dao.TblNotificationDao;
import org.eclipse.openk.elogbook.persistence.dao.TblUserSettingsDao;
import org.eclipse.openk.elogbook.persistence.model.TblUserSettings;
import org.eclipse.openk.elogbook.viewmodel.LoginCredentials;
import org.eclipse.openk.elogbook.viewmodel.UserAuthentication;
import javax.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
public class BackendControllerUser {
private static final Logger LOGGER = Logger.getLogger(BackendControllerUser.class.getName());
private static final String DEFAULT_SETTING_TYPE = "<default>";
private final InputDataValuator inputDataValuator = new InputDataValuator();
public List<UserAuthentication> getUsers(String accesstoken) throws BtbException {
LOGGER.debug("getUsers() is called");
RestServiceWrapper restServiceWrapper = new RestServiceWrapper(BackendConfig.getInstance().getPortalBaseURL(), false);
String url = "usersForRole/"+BackendConfig.getInstance().getApplicationAccessRole();
String keyCloakUserjson = restServiceWrapper.performGetRequest(url, accesstoken);
List<KeyCloakUser> keyCloakUserList = JwtHelper.getUserListFromJson(keyCloakUserjson);
List<UserAuthentication> userAuthenticationList = KeyCloakUserMapper.mapFromKeyCloakUserList(keyCloakUserList);
LOGGER.debug("getUsers() succeeded.");
return userAuthenticationList;
}
public UserAuthentication authenticate(String credentials) throws BtbException {
LOGGER.debug("authenticate() is called");
// valuator will throw an exception if not valid
inputDataValuator.checkCredentials(credentials);
LoginCredentials loginCredentials = JsonGeneratorBase.getGson().fromJson(credentials, LoginCredentials.class);
UserAuthentication ret = null;
for (UserAuthentication uatmp : getUsers("")) {
String existedUsername = uatmp.getUsername().toLowerCase();
String inputUsername = loginCredentials.getUserName().toLowerCase();
String exitedPassword = uatmp.getPassword();
String inputPassword = loginCredentials.getPassword();
if( existedUsername.equals(inputUsername) && exitedPassword.equals(inputPassword)){
ret = uatmp;
break;
}
}
if (ret == null) {
throw new BtbUnauthorized("Unknown User/Password");
}
LOGGER.debug("authenticate() succeeded.");
return ret;
}
public List<String> getUserSuggestionsFromContactdatabase(String token) throws BtbException {
LOGGER.debug("getUserSuggestionsFromContactdatabase() is called");
List<String> userContacts = ContactBaseDataManager.getInstance().getUserContacts(token);
LOGGER.debug("getUserSuggestionsFromContactdatabase() is finished");
return userContacts;
}
public void sentTestMail() throws BtbException {
LOGGER.debug("sentTestMail() is called");
EmailService.getInstance().sendPresenceCheckReminderMail();
LOGGER.debug("sentTestMail() is finished");
}
public List<String> getAssignedUserSuggestions() throws BtbException {
LOGGER.debug("getAssignedUserSuggestions() is called");
EntityManager emOrg = EntityHelper.getEMF().createEntityManager();
try (AutoCloseEntityManager em = new AutoCloseEntityManager(emOrg)) {
TblNotificationDao dao = new TblNotificationDao(em);
return dao.getAssignedUserSuggestions();
} finally {
LOGGER.debug("getAssignedUserSuggestions() is finished");
}
}
public String getUserSettings( String modUser ) throws BtbInternalServerError {
LOGGER.debug("getUserSettings() is called");
EntityManager emOrg = EntityHelper.getEMF().createEntityManager();
try (AutoCloseEntityManager em = new AutoCloseEntityManager(emOrg)) {
TblUserSettingsDao dao = new TblUserSettingsDao(em);
try {
Optional<TblUserSettings> us = dao.getSettingsForUser(modUser, DEFAULT_SETTING_TYPE);
return us.isPresent() ? us.get().getValue() : "{}";
} catch (Exception e) {
LOGGER.error( "Error loading usersettings" );
throw( new BtbInternalServerError("Error loading usersettings"));
}
} finally {
LOGGER.debug("getUserSettings() is finished");
}
}
public boolean storeUserSettings( String settingsToSave, String modUser ) throws BtbInternalServerError {
LOGGER.debug("storeUserSettings() is called");
EntityManager emOrg = EntityHelper.getEMF().createEntityManager();
try (AutoCloseEntityManager em = new AutoCloseEntityManager(emOrg)) {
em.getTransaction().begin();
TblUserSettingsDao dao = new TblUserSettingsDao(em);
TblUserSettings userSettingsToStore = dao.getSettingsForUser(modUser, DEFAULT_SETTING_TYPE)
.orElse(new TblUserSettings());
userSettingsToStore.setSettingType(DEFAULT_SETTING_TYPE);
userSettingsToStore.setUsername(modUser);
userSettingsToStore.setValue(settingsToSave);
try {
dao.persistInTx(userSettingsToStore);
em.getTransaction().commit();
return true;
} catch (Exception e) {
LOGGER.error( "Error storing usersettings" );
throw( new BtbInternalServerError("Error storing usersettings"));
}
} finally {
LOGGER.debug("storeUserSettings() is finished");
}
}
}