diff --git a/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java b/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java index 4e6bdd4c712ab15594e66de578c42d371adcfe18..cf346dfc6ea936ea94e5e1d9829685b6b32db7ce 100644 --- a/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java +++ b/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java @@ -24,6 +24,8 @@ package net.jami.datastore.dao; import lombok.extern.slf4j.Slf4j; import net.jami.datastore.main.DataStore; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; import net.jami.jams.common.dao.connectivity.SQLConnection; import net.jami.jams.common.objects.user.UserProfile; @@ -84,4 +86,25 @@ public class UserProfileDao extends AbstractDao<UserProfile> { DataStore.connectionPool.returnConnection(connection); } } + + @Override + public boolean updateObject(StatementList update, StatementList constraints){ + + SQLConnection connection = DataStore.connectionPool.getConnection(); + try{ + PreparedStatement ps = connection.getConnection().prepareStatement("UPDATE local_directory SET firstname = ?, lastName = ?, email = ?, profilePicture = ?, organization = ?, phoneNumber = ?, phoneNumberExtension = ?, faxNumber = ?, mobileNumber = ? WHERE username = ?"); + for(int i=1;i<update.getStatements().size();i++){ + ps.setString(i, update.getStatements().get(i).getValue()); + } + ps.setString(update.getStatements().size(), update.getStatements().get(0).getValue()); + return ps.executeUpdate() != 0; + } + catch(Exception e){ + log.error("An error has occurred while trying to update a user profile: " + e.toString()); + return false; + } + finally { + DataStore.connectionPool.returnConnection(connection); + } + } } diff --git a/datastore/src/main/java/net/jami/datastore/main/DataStore.java b/datastore/src/main/java/net/jami/datastore/main/DataStore.java index c8db40ee40a89003739f5248f4affa7114fb8f51..60976153153285e48d65e394ad6da3862b785a02 100644 --- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java +++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java @@ -91,6 +91,24 @@ public class DataStore implements AuthenticationSource { return userProfileDao.storeObject(userProfile); } + public boolean updateUserProfile(UserProfile userProfile){ + + StatementList update = new StatementList(); + StatementList constraints = new StatementList(); + update.addStatement(new StatementElement("username","=",userProfile.getUsername(),"")); + update.addStatement(new StatementElement("firstName","=",userProfile.getFirstName(),"")); + update.addStatement(new StatementElement("lastName","=",userProfile.getLastName(),"")); + update.addStatement(new StatementElement("email","=",userProfile.getEmail(),"")); + update.addStatement(new StatementElement("profilePicture","=",userProfile.getProfilePicture(),"")); + update.addStatement(new StatementElement("organization","=",userProfile.getOrganization(),"")); + update.addStatement(new StatementElement("phoneNumber","=",userProfile.getPhoneNumber(),"")); + update.addStatement(new StatementElement("phoneNumberExtension","=",userProfile.getPhoneNumberExtension(),"")); + update.addStatement(new StatementElement("faxNumber","=",userProfile.getFaxNumber(),"")); + update.addStatement(new StatementElement("mobileNumber","=",userProfile.getMobileNumber(),"")); + + return userProfileDao.updateObject(update, constraints); + } + @Override public boolean authenticate(String username, String password) { StatementList statementList = new StatementList(); diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java index 9d277f688c4cd0edb355fa296f7f8648ca89e40a..8aa3c8e38e271c8fb83b54b74659e2f1e2faba25 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java @@ -30,14 +30,19 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import net.jami.datastore.main.DataStore; import net.jami.jams.common.authentication.AuthenticationSourceType; import net.jami.jams.common.authmodule.AuthModuleKey; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; import net.jami.jams.common.objects.user.UserProfile; import java.io.IOException; import java.util.HashMap; import static net.jami.jams.server.Server.userAuthenticationModule; +import static net.jami.jams.server.Server.dataStore; + @WebServlet("/api/admin/directory/entry") @Slf4j @@ -67,6 +72,22 @@ public class DirectoryEntryServlet extends HttpServlet { @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //Update a user's profile. + try{ + //Check if he is AD/LDAP - then return a 500, because we can't update those profile datas. + UserProfile userProfile = JsonIterator.deserialize(req.getInputStream().readAllBytes(), UserProfile.class); + StatementList select = new StatementList(); + StatementElement st = new StatementElement("username","=",userProfile.getUsername(),""); + select.addStatement(st); + if(dataStore.getUserDao().getObjects(select).get(0).getUserType() != AuthenticationSourceType.LOCAL){ + resp.sendError(500,"The user is not a local user, therefore we cannot change his data!"); + return; + } + if(dataStore.updateUserProfile(userProfile)) + resp.setStatus(200); + else resp.sendError(500,"could not update the users's profile information"); + } + catch(Exception e){} + } @Override diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UsersServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UsersServlet.java index d0ba9762ae8ed335b0db6c1abdd6f293c44d5a29..179f241dea351936e98d0fcb38018f8f3eadca86 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UsersServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/users/UsersServlet.java @@ -39,6 +39,6 @@ public class UsersServlet extends HttpServlet { //Returns a list of users. @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - resp.getOutputStream().write(JsonStream.serialize(dataStore.getDeviceDao().getObjects(null).get(0)).getBytes()); + resp.getOutputStream().write(JsonStream.serialize(dataStore.getUserDao().getObjects(null).get(0)).getBytes()); } } diff --git a/jams-server/src/main/resources/webapp/js/search.js b/jams-server/src/main/resources/webapp/js/search.js index bf89f26ce8d910865c58385fd0a90fb1bbaa24b4..1f993cf7dd57dee1c3f5fef94443c401bc5ffdbc 100644 --- a/jams-server/src/main/resources/webapp/js/search.js +++ b/jams-server/src/main/resources/webapp/js/search.js @@ -195,20 +195,20 @@ function addListenersForActions() { e.preventDefault(); var data = { - 'givenName': $('#input-givenName-update').val(), - 'sn': $('#input-sn-update').val(), - 'CN': userEdit, - 'mail': $('#input-mail-update').val(), - 'jpegPhoto': b64, - 'o': $('#input-o-update').val(), - 'facsimileTelephoneNumber': $('#input-facsimileTelephoneNumber-update').val(), - 'telephoneNumber': $('#input-telephoneNumber-update').val(), - 'extension': $('#input-extension-update').val(), - 'mobile': $('#input-mobile-update').val() + 'firstName': $('#input-givenName-update').val(), + 'lastName': $('#input-sn-update').val(), + 'username': userEdit, + 'email': $('#input-mail-update').val(), + 'profilePicture': b64, + 'organization': $('#input-o-update').val(), + 'faxNumber': $('#input-facsimileTelephoneNumber-update').val(), + 'phoneNumber': $('#input-telephoneNumber-update').val(), + 'phoneNumberExtension': $('#input-extension-update').val(), + 'mobileNumber': $('#input-mobile-update').val() } // send post request - ajaxApiCall(api_path_post_update_user, 'POST', data, null, handleUserUpdate); + ajaxApiCall(api_path_put_update_user_profile, 'PUT', data, null, handleUserUpdate); }); });