diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupProfileServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupProfileServlet.java new file mode 100644 index 0000000000000000000000000000000000000000..b78615b41ccc778040880b8c766c910f416ecf79 --- /dev/null +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupProfileServlet.java @@ -0,0 +1,78 @@ +package net.jami.jams.server.servlets.api.admin.group; + +import com.jsoniter.output.JsonStream; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import net.jami.jams.common.annotations.JsonContent; +import net.jami.jams.common.annotations.ScopedServletMethod; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; +import net.jami.jams.common.objects.user.AccessLevel; +import net.jami.jams.common.objects.user.Group; +import net.jami.jams.common.objects.user.UserProfile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static net.jami.jams.server.Server.dataStore; + +@WebServlet("/api/admin/group/*") +@Slf4j +public class GroupProfileServlet extends HttpServlet { + + + @Override + @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN}) + @JsonContent + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + List<Group> groups = new ArrayList<>(); + Group singleGroup = null; + String groupName = req.getPathInfo().replace("/",""); + + if (!groupName.equals("*")) { + StatementList statementList = new StatementList(); + StatementElement st = new StatementElement("name", "=", groupName, ""); + + statementList.addStatement(st); + if (!dataStore.getGroupDao().getObjects(statementList).isEmpty()) + singleGroup = dataStore.getGroupDao().getObjects(statementList).get(0); + } else { + groups = dataStore.getGroupDao().getObjects(null); + } + + if (singleGroup != null) { + Group finalSingleGroup = singleGroup; + List<UserProfile> profiles = dataStore.getUserProfileDao().getObjects(null).stream().filter(profile -> + profile.getGroupMemberships().contains(finalSingleGroup.getName())).collect(Collectors.toList()); + + profiles.forEach(profile -> + finalSingleGroup.getGroupMembers().add(profile.getUsername())); + + resp.getOutputStream().write(JsonStream.serialize(finalSingleGroup).getBytes()); + resp.setStatus(200); + } + if (!groups.isEmpty()) { + List<UserProfile> profiles = dataStore.getUserProfileDao().getObjects(null); + for (Group group: groups) { + for (UserProfile p: profiles) { + if (p.getGroupMemberships().contains(group.getName())) + group.getGroupMembers().add(p.getUsername()); + } + } + + resp.getOutputStream().write(JsonStream.serialize(groups).getBytes()); + resp.setStatus(200); + } + else { + log.info("No existing groups were found."); + resp.setStatus(200); + } + } +} diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyProfileServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyProfileServlet.java new file mode 100644 index 0000000000000000000000000000000000000000..79964a57638de0f04d9d73c8b309c53080a9ce57 --- /dev/null +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyProfileServlet.java @@ -0,0 +1,49 @@ +package net.jami.jams.server.servlets.api.admin.group; + +import com.jsoniter.output.JsonStream; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import net.jami.jams.common.annotations.JsonContent; +import net.jami.jams.common.annotations.ScopedServletMethod; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; +import net.jami.jams.common.objects.user.AccessLevel; +import net.jami.jams.common.objects.user.Policy; + +import java.io.IOException; +import java.util.List; + +import static net.jami.jams.server.Server.dataStore; + +@WebServlet("/api/admin/policy/*") +@Slf4j +public class PolicyProfileServlet extends HttpServlet { + + + @Override + @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN}) + @JsonContent + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + List<Policy> policies; + String name = req.getPathInfo().replace("/",""); + + if (!name.equals("*")) { + StatementList statementList = new StatementList(); + StatementElement st = new StatementElement("name", "=", name, ""); + statementList.addStatement(st); + if (!dataStore.getPolicyDao().getObjects(statementList).isEmpty()) { + resp.getOutputStream().write(JsonStream.serialize(dataStore.getPolicyDao().getObjects(statementList).get(0)).getBytes()); + resp.setStatus(200); + } + } else { + policies = dataStore.getPolicyDao().getObjects(null); + resp.getOutputStream().write(JsonStream.serialize(policies).getBytes()); + resp.setStatus(200); + } + } +}