diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java index af5c998c8f43da1d8f2fb1e698edb2a4f7e48994..df800f55477f462dbc6c344fa8942a95299e6734 100644 --- a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java +++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java @@ -1,25 +1,26 @@ /* -* Copyright (C) 2020 by Savoir-faire Linux -* Authors: William Enright <william.enright@savoirfairelinux.com> -* Ndeye Anna Ndiaye <anna.ndiaye@savoirfairelinux.com> -* Johnny Flores <johnny.flores@savoirfairelinux.com> -* Mohammed Raza <mohammed.raza@savoirfairelinux.com> -* Felix Sidokhine <felix.sidokhine@savoirfairelinux.com> -* -* -* 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/>. -*/ + * Copyright (C) 2020 by Savoir-faire Linux + * Authors: William Enright <william.enright@savoirfairelinux.com> + * Ndeye Anna Ndiaye <anna.ndiaye@savoirfairelinux.com> + * Johnny Flores <johnny.flores@savoirfairelinux.com> + * Mohammed Raza <mohammed.raza@savoirfairelinux.com> + * Felix Sidokhine <felix.sidokhine@savoirfairelinux.com> + * + * + * 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.jams.ad.connector; import com.imperva.ddc.core.query.Endpoint; @@ -47,8 +48,8 @@ public class ADConnector implements AuthenticationSource { public ADConnector(String settings) { JsoniterRegistry.initCodecs(); - ADConnector.settings = JsonIterator.deserialize(settings,ActiveDirectorySettings.class); - for(int i=0; i<10;i++){ + ADConnector.settings = JsonIterator.deserialize(settings, ActiveDirectorySettings.class); + for (int i = 0; i < 10; i++) { Endpoint endpoint = new Endpoint(); endpoint.setSecuredConnection(ADConnector.settings.getIsSSL()); endpoint.setPort(ADConnector.settings.getPort()); @@ -59,19 +60,19 @@ public class ADConnector implements AuthenticationSource { log.info("Started Active Directory Connector!"); } - public static Endpoint getConnection(){ + public static Endpoint getConnection() { Endpoint endpoint = null; - while(endpoint == null){ + while (endpoint == null) { endpoint = endpoints.poll(); } - endpoint.setUserAccountName(settings.getUsername()); //* You can use the user's Distinguished Name as well + endpoint.setUserAccountName(ADConnector.settings.getRealm() + "\\" + settings.getUsername()); //* You can use the user's Distinguished Name as well endpoint.setPassword(settings.getPassword()); return endpoint; } - public static Endpoint getConnection(String username, String password){ + public static Endpoint getConnection(String username, String password) { Endpoint endpoint = null; - while(endpoint == null){ + while (endpoint == null) { endpoint = endpoints.poll(); } endpoint.setUserAccountName(ADConnector.settings.getRealm() + "\\" + username); //* You can use the user's Distinguished Name as well @@ -79,13 +80,12 @@ public class ADConnector implements AuthenticationSource { return endpoint; } - public static void returnConnection(Endpoint connection){ - connection.setUserAccountName(settings.getUsername()); + public static void returnConnection(Endpoint connection) { + connection.setUserAccountName(ADConnector.settings.getRealm() + "\\" + settings.getUsername()); connection.setPassword(settings.getPassword()); endpoints.add(connection); } - @Override public boolean createUser(User user) { return false; @@ -93,7 +93,7 @@ public class ADConnector implements AuthenticationSource { @Override public UserProfile[] getUserProfile(String queryString, String field) { - return userProfileService.getUserProfile(queryString,field); + return userProfileService.getUserProfile(queryString, field); } @Override @@ -105,8 +105,7 @@ public class ADConnector implements AuthenticationSource { public boolean authenticate(String username, String password) { try { return authenticationService.authenticateUser(username, password); - } - catch (Exception e){ + } catch (Exception e) { return false; } } @@ -125,6 +124,4 @@ public class ADConnector implements AuthenticationSource { public boolean updatePassword(User user, String password) { return false; } - - } diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/AuthenticationService.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/AuthenticationService.java index 2f008a978c104b768b373b5760536cfaebdbd206..1d7fda3e9841a521b9b629c418c365a61670e660 100644 --- a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/AuthenticationService.java +++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/AuthenticationService.java @@ -33,11 +33,6 @@ public class AuthenticationService { Endpoint endpoint = ADConnector.getConnection(username, password); - if (username.contains("cn=")) { - String marked_username = username.substring(username.indexOf("cn=") + 3, username.indexOf(",")); //ADConnector.settings.getRealm() + "\\" + ADConnector.settings.getUsername(); - endpoint = ADConnector.getConnection(marked_username, password); - } - try { ConnectionResponse connectionResponse = DirectoryConnectorService.authenticate(endpoint); return !connectionResponse.isError(); diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java index 648fb437f25acdd0d690878cd16612b67d6fdb04..101d79a726544dd48a2ffe814197de9e53c73b2c 100644 --- a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java +++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java @@ -39,6 +39,8 @@ import lombok.extern.slf4j.Slf4j; import net.jami.jams.ad.connector.ADConnector; import net.jami.jams.common.objects.user.UserProfile; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -55,14 +57,20 @@ public class UserProfileService { try{ QueryRequest queryRequest = buildRequest(endpoint); Sentence sentence = null; - if(field.equals("LOGON_NAME")){ - sentence = new QueryAssembler().addPhrase(FieldType.LOGON_NAME, PhraseOperator.CONTAINS, queryString) - .closeSentence(); + if(queryString.contains("*")) { + sentence = new QueryAssembler().addPhrase(FieldType.OBJECT_CLASS, PhraseOperator.EQUAL, ObjectType.USER.toString()).closeSentence(); } - if(field.equals("FULL_TEXT_NAME")) { - sentence = new QueryAssembler().addPhrase(FieldType.FIRST_NAME, PhraseOperator.CONTAINS, queryString) + else { + if (field.equals("LOGON_NAME")) { + + sentence = new QueryAssembler().addPhrase(FieldType.LOGON_NAME, PhraseOperator.CONTAINS, queryString) + .closeSentence(); + } + if (field.equals("FULL_TEXT_NAME")) { + sentence = new QueryAssembler().addPhrase(FieldType.FIRST_NAME, PhraseOperator.CONTAINS, queryString) .addPhrase(FieldType.LAST_NAME, PhraseOperator.CONTAINS, queryString) .closeSentence(SentenceOperator.OR); + } } queryRequest.addSearchSentence(sentence); QueryResponse queryResponse; @@ -91,7 +99,7 @@ public class UserProfileService { QueryRequest queryRequest = new QueryRequest(); queryRequest.setDirectoryType(DirectoryType.MS_ACTIVE_DIRECTORY); queryRequest.setEndpoints(new ArrayList<>() {{ add(endpoint);}}); - queryRequest.setSizeLimit(1); + queryRequest.setSizeLimit(1000); queryRequest.setTimeLimit(1000); queryRequest.setObjectType(ObjectType.USER); for(String field : fieldMap.keySet()) queryRequest.addRequestedField(field); diff --git a/jams-common/src/main/java/net/jami/jams/common/configuration/ServerConfiguration.java b/jams-common/src/main/java/net/jami/jams/common/configuration/ServerConfiguration.java deleted file mode 100644 index ebdf151697198a527491b45d2f8fe055bc16b8ef..0000000000000000000000000000000000000000 --- a/jams-common/src/main/java/net/jami/jams/common/configuration/ServerConfiguration.java +++ /dev/null @@ -1,34 +0,0 @@ -/* -* Copyright (C) 2020 by Savoir-faire Linux -* Authors: William Enright <william.enright@savoirfairelinux.com> -* Ndeye Anna Ndiaye <anna.ndiaye@savoirfairelinux.com> -* Johnny Flores <johnny.flores@savoirfairelinux.com> -* Mohammed Raza <mohammed.raza@savoirfairelinux.com> -* Felix Sidokhine <felix.sidokhine@savoirfairelinux.com> -* -* -* 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.jams.common.configuration; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class ServerConfiguration { - - private int port; - -} diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java index e7a5e8583df67e5b03410b2302eb0db3fbe90e86..01da9c32b669ba437837a280586dcffa648f063e 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java @@ -31,6 +31,8 @@ import jakarta.servlet.http.HttpServletResponse; import net.jami.jams.common.objects.user.UserProfile; import java.io.IOException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java index ab5d34c699c7336e548c0ebacc5fe342dd88d346..131bd085b6528794cadd2004a83d8a519bc5063a 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java @@ -99,7 +99,7 @@ public class ApiFilter implements Filter { if (authsuccess || isLogin) { filterChain.doFilter(servletRequest, servletResponse); } else { - response.sendError(403, "This endpoint requires setup to be complete!"); + response.sendError(403, "Your credentials are invalid!"); } } }