diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserExistsServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserExistsServlet.java new file mode 100644 index 0000000000000000000000000000000000000000..5313cd79d72265f002dc14143070480000abc62f --- /dev/null +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserExistsServlet.java @@ -0,0 +1,75 @@ +package net.jami.jams.server.servlets.api.user; + +import com.jsoniter.JsonIterator; +import com.jsoniter.any.Any; +import com.jsoniter.output.JsonStream; +import lombok.extern.slf4j.Slf4j; +import net.jami.jams.ca.JamsCA; +import net.jami.jams.common.authentication.AuthenticationSourceType; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; +import net.jami.jams.common.objects.user.User; +import net.jami.jams.server.Server; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; + +@WebServlet("/api/user/exists") +@Slf4j +public class LocalUserExistsServlet extends HttpServlet { + + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) { + resp.setHeader("Access-Control-Allow-Origin", JamsCA.serverDomain); + resp.setContentType("application/json"); + StringBuilder stringBuilder = new StringBuilder(); + + try { + int x = 0; + while (true) { + x = req.getInputStream().read(); + if(x == -1) break; + stringBuilder.append((char) x); + } + } + catch (Exception e) { + log.error("error decoding request body"); + } + + + if(stringBuilder.toString() != null) { + + Any userData = JsonIterator.deserialize(stringBuilder.toString()); + String username = userData.get("username").toString(); + try { + if (Server.dataStore.userExists(username)) { + + StatementList statementList = new StatementList(); + StatementElement statementElement = new StatementElement("username", "=", username, ""); + statementList.addStatement(statementElement); + User user = Server.dataStore.getUserDao().getObjects(statementList).get(0); + + if (user != null && user.getUserType() == AuthenticationSourceType.LOCAL) { + resp.setStatus(200); + HashMap<String, String> statusInfo = new HashMap<>(); + statusInfo.put("exists", "true"); + resp.getOutputStream().write(JsonStream.serialize(statusInfo).getBytes()); + } else { + resp.setStatus(500); + HashMap<String, String> statusInfo = new HashMap<>(); + statusInfo.put("exists", "false"); + resp.getOutputStream().write(JsonStream.serialize(statusInfo).getBytes()); + } + } + + } catch (Exception e) { + log.info(e.toString()); + resp.setStatus(500); + } + } + } +} diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserNeedsResetServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserNeedsResetServlet.java index 540de412673ffbd3c400c73bb45e97e733f94e68..9650dd8234ced5c776c648474bce2711067077cc 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserNeedsResetServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/user/LocalUserNeedsResetServlet.java @@ -11,7 +11,7 @@ import net.jami.jams.common.dao.StatementList; import net.jami.jams.common.objects.user.User; import net.jami.jams.server.Server; import net.jami.jams.server.servlets.api.install.CachedObjects; -import org.apache.catalina.webresources.CachedResource; +import net.jami.jams.common.authentication.AuthenticationSourceType; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; @@ -51,7 +51,6 @@ public class LocalUserNeedsResetServlet extends HttpServlet { if (CachedObjects.localAuthSettings != null && req.getParameterMap().containsKey("username")) { HashMap<String,String> statusInfo = new HashMap<>(); - LocalAuthSettings settings = CachedObjects.localAuthSettings; String username = req.getParameter("username"); if(Server.dataStore.userExists(username)){ @@ -60,7 +59,7 @@ public class LocalUserNeedsResetServlet extends HttpServlet { statementList.addStatement(statementElement); User user = Server.dataStore.getUserDao().getObjects(statementList).get(0); - if (user.getNeedsPasswordReset()) { + if (user != null && user.getNeedsPasswordReset() && user.getUserType() == AuthenticationSourceType.LOCAL) { // show the OTP modal char[] otp = Server.userAuthenticationModule.getOTP(req.getParameter("username")); statusInfo.put("needsReset", "true");