DataStore.java
- /*
- * Copyright (C) 2020-2024 by Savoir-faire Linux
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- package net.jami.datastore.main;
- import lombok.Getter;
- import lombok.Setter;
- import net.jami.datastore.dao.ContactDao;
- import net.jami.datastore.dao.ConversationDao;
- import net.jami.datastore.dao.ConversationRequestDao;
- import net.jami.datastore.dao.DeviceDao;
- import net.jami.datastore.dao.GroupDao;
- import net.jami.datastore.dao.PolicyDao;
- import net.jami.datastore.dao.SystemDao;
- import net.jami.datastore.dao.UserDao;
- import net.jami.datastore.dao.UserGroupMappingsDao;
- import net.jami.datastore.dao.UserProfileDao;
- import net.jami.jams.common.authentication.AuthenticationSource;
- import net.jami.jams.common.authentication.AuthenticationSourceInfo;
- import net.jami.jams.common.authentication.AuthenticationSourceType;
- import net.jami.jams.common.dao.connectivity.ConnectionPool;
- import net.jami.jams.common.objects.user.User;
- import net.jami.jams.common.objects.user.UserProfile;
- import net.jami.jams.common.utils.X509Utils;
- import org.flywaydb.core.Flyway;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- @Getter
- @Setter
- public class DataStore implements AuthenticationSource {
- public static ConnectionPool connectionPool;
- private UserDao userDao;
- private GroupDao groupDao;
- private PolicyDao policyDao;
- private DeviceDao deviceDao;
- private SystemDao systemDao;
- private ContactDao contactDao;
- private ConversationDao conversationDao;
- private ConversationRequestDao conversationRequestDao;
- private UserProfileDao userProfileDao;
- private UserGroupMappingsDao userGroupMappingsDao;
- public static final Integer RESULTS_PER_PAGE = 24;
- public static Integer NUM_PAGES;
- // Implicitly connect to derby.
- public DataStore(String connectionString) {
- Flyway flyway = Flyway.configure().dataSource(connectionString, "", "").load();
- flyway.migrate();
- connectionPool = new ConnectionPool(connectionString);
- userDao = new UserDao();
- groupDao = new GroupDao();
- policyDao = new PolicyDao();
- deviceDao = new DeviceDao();
- systemDao = new SystemDao();
- contactDao = new ContactDao();
- conversationDao = new ConversationDao();
- conversationRequestDao = new ConversationRequestDao();
- userProfileDao = new UserProfileDao();
- userGroupMappingsDao = new UserGroupMappingsDao();
- }
- @Override
- public boolean createUser(User user) {
- return userDao.storeObject(user);
- }
- @Override
- public List<UserProfile> searchUserProfiles(
- String queryString, String field, Optional<Integer> page) {
- List<UserProfile> userList;
- if (queryString.equals("*")) {
- userList = userProfileDao.getAllUserProfile();
- } else {
- if (field.equals("LOGON_NAME")) {
- userList = userProfileDao.searchUsername(queryString);
- } else if (field.equals("FULL_TEXT_NAME")) {
- userList = userProfileDao.searchFullName(queryString);
- } else {
- throw new IllegalArgumentException("Invalid field");
- }
- }
- if (userList == null) userList = new ArrayList<>();
- NUM_PAGES = (Integer) userList.size() / RESULTS_PER_PAGE;
- if (userList.size() % RESULTS_PER_PAGE != 0) NUM_PAGES++;
- if (page.isPresent() && !userList.isEmpty()) {
- if (userList.size() < RESULTS_PER_PAGE) userList = userList.subList(0, userList.size());
- else if (page.get() * RESULTS_PER_PAGE > userList.size())
- userList = userList.subList((page.get() - 1) * RESULTS_PER_PAGE, userList.size());
- else
- userList =
- userList.subList(
- (page.get() - 1) * RESULTS_PER_PAGE,
- (page.get() * RESULTS_PER_PAGE));
- }
- return userList;
- }
- @Override
- public UserProfile getUserProfile(String username) {
- return userProfileDao.getByUsername(username).orElse(null);
- }
- @Override
- public boolean setUserProfile(UserProfile userProfile) {
- return userProfileDao.storeObject(userProfile);
- }
- public boolean updateUserProfile(UserProfile userProfile) {
- return userProfileDao.updateUserProfile(userProfile);
- }
- public boolean updateUserCertificate(User user) {
- return userDao.updateUserCertificate(
- user.getUsername(), X509Utils.getPEMStringFromCertificate(user.getCertificate()));
- }
- @Override
- public boolean authenticate(String username, String password) {
- return userDao.getByUsername(username)
- .map(user -> user.getPassword())
- .orElse("")
- .equals(password);
- }
- @Override
- public AuthenticationSourceInfo getInfo() {
- return new AuthenticationSourceInfo("LOCAL", AuthenticationSourceType.LOCAL);
- }
- @Override
- public boolean test() {
- return true;
- }
- @Override
- public boolean updatePassword(User user, String password) {
- return false;
- }
- }