diff options
Diffstat (limited to 'id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/usermanagement/FileBasedUserConfiguration.java')
-rw-r--r-- | id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/usermanagement/FileBasedUserConfiguration.java | 370 |
1 files changed, 370 insertions, 0 deletions
diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/usermanagement/FileBasedUserConfiguration.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/usermanagement/FileBasedUserConfiguration.java new file mode 100644 index 000000000..b1bba7289 --- /dev/null +++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/config/usermanagement/FileBasedUserConfiguration.java @@ -0,0 +1,370 @@ +package at.gv.egovernment.moa.id.configuration.config.usermanagement; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.collections4.map.HashedMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.components.configuration.api.Configuration; +import at.gv.egiz.components.configuration.api.ConfigurationException; +import at.gv.egiz.components.configuration.file.PropertiesBasedConfiguration; +import at.gv.egovernment.moa.id.commons.db.dao.config.UserDatabase; +import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; +import at.gv.egovernment.moa.id.commons.utils.KeyValueUtils; +import at.gv.egovernment.moa.util.MiscUtil; + + +public class FileBasedUserConfiguration + implements UserConfiguration { + + private static final Logger logger = LoggerFactory.getLogger(FileBasedUserConfiguration.class); + public static final String CONFIG_FILE_PROPERTY = "user.properties"; + + private Configuration userconfig; + + public FileBasedUserConfiguration() { + String cfgFile = System.getProperty(CONFIG_FILE_PROPERTY); + if(cfgFile == null) { + throw new RuntimeException("Please configure " + CONFIG_FILE_PROPERTY + " to provide user database"); + } + + try { + userconfig = new PropertiesBasedConfiguration(new File(cfgFile)); + + } catch (IOException | ConfigurationException e) { + logger.error("Failed to build configuration in user modul!"); + throw new RuntimeException(e); + + } + } + + /** + * + * @return + */ + public List<UserDatabase> getAllUsers() { + logger.trace("Get All Users from database."); + + // select userdatabase from UserDatabase userdatabase + List<UserDatabase> result = new ArrayList<UserDatabase>(); + try { + String[] userIDs = userconfig.getConfigurationIdNextLevel(UserDatabase.PREFIX); + for (String userID : userIDs) { + String[] userKeys = userconfig.findConfigurationId(UserDatabase.PREFIX + "." + userID + ".*"); + Map<String, String> keyValue = new HashMap<String, String>(); + if (userKeys.length > 0) { + for (String key : userKeys) { + keyValue.put( + KeyValueUtils.removePrefixFromKey( + key, UserDatabase.PREFIX + "." + userID + "."), + userconfig.getStringValue(key)); + } + UserDatabase userDAO = new UserDatabase(keyValue); + userDAO.setHjid(userID); + result.add(userDAO); + } + } + + if (result.size() == 0) { + logger.trace("No entries found."); + return null; + } + + return result; + + } catch (ConfigurationException e) { + logger.error("Access UserDatabase FAILED", e); + return null; + + } + } + + /** + * + * @return + */ + public List<UserDatabase> getAllOpenUsersRequests() { + logger.trace("Get all new Users from Database"); + + // select userdatabase from UserDatabase userdatabase + // where userdatabase.userRequestTokken is not null + // and userdatabase.isAdminRequest = '1' and userdatabase.isMailAddressVerified = '0' + List<UserDatabase> result = new ArrayList<UserDatabase>(); + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + // TODO check result of query "... userdatabase.userRequestTokken is not null" if Tokken is null -> (null, "NULL", "", ... ?) + if ((user.getUserRequestTokken() != null && !user.getUserRequestTokken().isEmpty() && !user.getUserRequestTokken().equals("NULL")) + && (user.isIsAdminRequest()) && (!user.isIsMailAddressVerified())) { + result.add(user); + } + } + + if (result.size() == 0) { + logger.trace("No entries found."); + return null; + } + + return result; + } + + /** + * + * @param tokken + * @return + */ + public UserDatabase getNewUserWithTokken(String tokken) { + logger.trace("Getting Userinformation with Tokken " + tokken + " from database."); + + // select userdatabase from UserDatabase userdatabase where userdatabase.userRequestTokken = :tokken + UserDatabase result = null; + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + if (user.getUserRequestTokken() != null && + user.getUserRequestTokken().equals(tokken)) { + result = user; + break; + } + } + + return result; + } + + /** + * + * @param id + * @return + */ + public UserDatabase getUsersWithOADBID(long id) { + logger.trace("Getting Userinformation with OADBID " + id + " from database."); + + // select userdatabase from UserDatabase userdatabase + // inner join userdatabase.onlineApplication oa where oa.hjid = :id + UserDatabase result = null; + List<UserDatabase> allUsers = getAllUsers(); + + boolean quit = false; + for (UserDatabase user : nullGuard(allUsers)) { + + for (String oa : user.getOnlineApplication()) { + + if (oa.equals(String.valueOf(id))) { + result = user; + quit = true; + break; + } + } + + if (quit) { + break; + } + } + + return result; + } + + /** + * + * @param id + * @return + */ + public UserDatabase getUserWithID(long id) { + logger.trace("Getting Userinformation with ID " + id + " from database."); + + // select userdatabase from UserDatabase userdatabase where userdatabase.hjid = :id + UserDatabase result = null; + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + if (user.getHjid().equals(String.valueOf(id))) { + result = user; + break; + } + } + + return result; + } + + /** + * + * @param username + * @return + */ + public UserDatabase getUserWithUserName(String username) { + logger.trace("Getting Userinformation with ID " + username + " from database."); + + // select userdatabase from UserDatabase userdatabase where userdatabase.username = :username + UserDatabase result = null; + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + if (user.getUsername().equals(username)) { + result = user; + break; + } + } + + return result; + } + + /** + * + * @param bpkwbpk + * @return + */ + public UserDatabase getUserWithUserBPKWBPK(String bpkwbpk) { + logger.trace("Getting Userinformation with ID " + bpkwbpk + " from database."); + + // select userdatabase from UserDatabase userdatabase where userdatabase.bpk = :bpk + UserDatabase result = null; + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + if (user.getBpk() != null && + user.getBpk().equals(bpkwbpk)) { + result = user; + break; + } + } + + return result; + } + + /** + * @return + */ + public List<UserDatabase> getAllNewUsers() { + List<UserDatabase> result = new ArrayList<UserDatabase>(); + List<UserDatabase> allUsers = getAllUsers(); + + for (UserDatabase user : nullGuard(allUsers)) { + // TODO check result of query "... userdatabase.userRequestTokken is not null" if Tokken is null -> (null, "NULL", "", ... ?) + if (((user.getUserRequestTokken() == null || user.getUserRequestTokken().isEmpty() || user.getUserRequestTokken().equals("NULL"))) + && (user.isIsAdminRequest()) && (user.isIsMailAddressVerified())) { + result.add(user); + } + } + + if (result.size() == 0) { + logger.trace("No entries found."); + return null; + } + + return result; + } + + + /** + * @param user + */ + public void saveOrUpdate(UserDatabase user) throws MOADatabaseException{ + List<UserDatabase> allUsers = getAllUsers(); + + if (allUsers == null) { + Set<Entry<String, String>> keySet = user.getKeyValuePairs().entrySet(); + for (Entry<String, String> el : keySet) { + try { + if (MiscUtil.isNotEmpty(el.getValue())) { + userconfig.setStringValue(UserDatabase.PREFIX + ".0." + el.getKey(), + el.getValue()); + } + + } catch (ConfigurationException e) { + logger.error("Can not store Userentry with key: " + UserDatabase.PREFIX + ".0." + el.getKey(), e); + } + + } + + + } else { + boolean isUpdated = false; + for (UserDatabase dbUser : allUsers) { + if (dbUser.getHjid().equals(user.getHjid())) { + logger.debug("User is already stored -> start update process ..."); + Set<Entry<String, String>> keySet = user.getKeyValuePairs().entrySet(); + for (Entry<String, String> el : keySet) { + try { + if (MiscUtil.isNotEmpty(el.getValue())) + userconfig.setStringValue(UserDatabase.PREFIX + "." + user.getHjid() + "." + el.getKey(), + el.getValue()); + + } catch (ConfigurationException e) { + logger.error("Can not store Userentry with key: " + UserDatabase.PREFIX + "." + user.getHjid() + "." + el.getKey(), e); + } + + } + isUpdated = true; + break; + } + } + if (!isUpdated) { + try { + String[] temp = userconfig.findConfigurationId(UserDatabase.PREFIX + ".*." + UserDatabase.ISACTIVE); + int newID = KeyValueUtils.findNextFreeListCounter(temp, UserDatabase.PREFIX); + + logger.debug("Add new User with ID:" + String.valueOf(newID)); + Set<Entry<String, String>> keySet = user.getKeyValuePairs().entrySet(); + for (Entry<String, String> el : keySet) { + try { + if (MiscUtil.isNotEmpty(el.getValue())) + userconfig.setStringValue(UserDatabase.PREFIX + "." + String.valueOf(newID) + "." + el.getKey(), + el.getValue()); + + } catch (ConfigurationException e) { + logger.error("Can not store Userentry with key: " + UserDatabase.PREFIX + "." + String.valueOf(newID) + "." + el.getKey(), e); + } + + } + } catch (ConfigurationException e) { + logger.error("Access UserDatabase FAILED", e); + + } + } + } + + try { + userconfig.synchronize(); + + } catch (ConfigurationException e) { + logger.error("Access UserDatabase FAILED", e); + } + + } + + /** + * @param dbuser + */ + public void delete(UserDatabase dbuser) { + try { + logger.debug("Delete User with ID: " + dbuser.getHjid()); + userconfig.deleteIds(UserDatabase.PREFIX + "." + dbuser.getHjid() + "*"); + userconfig.synchronize(); + + } catch (ConfigurationException e) { + logger.error("Access UserManagement Database FAILED!", e); + + } + + } + + @SuppressWarnings("unchecked") + public static <T extends Iterable<?>> T nullGuard(T item) { + if (item == null) { + return (T) Collections.emptyList(); + } else { + return item; + } + + } + +} |