<%@ page contentType="text/html; charset=UTF-8" %> <%-- - - Copyright (C) 2004-2008 Jive Software, 2017-2026 Ignite Realtime Foundation. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> <%@ page import="org.jivesoftware.util.*, org.jivesoftware.openfire.group.Group, org.jivesoftware.openfire.group.GroupJID, java.util.*, org.xmpp.packet.*, org.jivesoftware.openfire.muc.MultiUserChatService" errorPage="error.jsp" %> <%@ page import="java.net.URLEncoder" %> <%@ page import="java.net.URLDecoder" %> <%@ page import="java.nio.charset.StandardCharsets" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib prefix="admin" uri="admin" %> <% webManager.init(request, response, session, application, out ); %> <% // Get parameters String userJID = ParamUtils.getParameter(request,"userJID"); String[] groupNames = ParamUtils.getParameters(request, "groupNames"); boolean allowAllRegisteredUsers = ParamUtils.getBooleanParameter(request,"allowAllRegisteredUsers"); boolean add = request.getParameter("add") != null; boolean save = request.getParameter("save") != null; boolean success = request.getParameter("success") != null; boolean addsuccess = request.getParameter("addsuccess") != null; boolean deletesuccess = request.getParameter("deletesuccess") != null; boolean delete = ParamUtils.getBooleanParameter(request,"delete"); boolean openPerms = ParamUtils.getBooleanParameter(request,"openPerms"); String mucname = ParamUtils.getParameter(request,"mucname"); if (!webManager.getMultiUserChatManager().isServiceRegistered(mucname)) { // The requested service name does not exist so return to the list of the existing rooms response.sendRedirect("muc-service-summary.jsp"); return; } Cookie csrfCookie = CookieUtils.getCookie(request, "csrf"); String csrfParam = ParamUtils.getParameter(request, "csrf"); if (save || add || delete) { if (csrfCookie == null || csrfParam == null || !csrfCookie.getValue().equals(csrfParam)) { save = false; add = false; delete = false; } } csrfParam = StringUtils.randomString(15); CookieUtils.setCookie(request, response, "csrf", csrfParam, -1); pageContext.setAttribute("csrf", csrfParam); // Get muc server MultiUserChatService mucService = webManager.getMultiUserChatManager().getMultiUserChatService(mucname); // Handle a save Map errors = new HashMap<>(); if (save) { if (openPerms) { // Remove all users who have the ability to create rooms for (JID user : mucService.getUsersAllowedToCreate()) { mucService.removeUserAllowedToCreate(user); } mucService.setRoomCreationRestricted(false); // Log the event webManager.logEvent("set MUC room creation to restricted for service "+mucname, null); response.sendRedirect("muc-create-permission.jsp?success=true&mucname="+URLEncoder.encode(mucname, StandardCharsets.UTF_8)); return; } else { mucService.setRoomCreationRestricted(true); mucService.setAllRegisteredUsersAllowedToCreate(allowAllRegisteredUsers); // Log the event webManager.logEvent("set MUC room creation to not restricted for service "+mucname, null); response.sendRedirect("muc-create-permission.jsp?success=true&mucname="+URLEncoder.encode(mucname, StandardCharsets.UTF_8)); return; } } List allowedJIDs = new ArrayList<>(); try { if (userJID != null && !userJID.trim().isEmpty()) { String allowedJID; // do validation; could be a group jid if (userJID.indexOf('@') == -1) { String username = JID.escapeNode(userJID); String domain = webManager.getXMPPServer().getServerInfo().getXMPPDomain(); allowedJID = username + '@' + domain; } else { String username = JID.escapeNode(userJID.substring(0, userJID.indexOf('@'))); String rest = userJID.substring(userJID.indexOf('@')); allowedJID = username + rest.trim(); } allowedJIDs.add(GroupJID.fromString(allowedJID.trim()).asBareJID()); } if (groupNames != null) { // create a group JID for each group for (String groupName : groupNames) { GroupJID groupJID = new GroupJID(URLDecoder.decode(groupName, StandardCharsets.UTF_8)); allowedJIDs.add(groupJID); } } } catch (java.lang.IllegalArgumentException ex) { errors.put("userJID","userJID"); } if (errors.isEmpty()) { // Handle an add if (add) { mucService.addUsersAllowedToCreate(allowedJIDs); mucService.setAllRegisteredUsersAllowedToCreate(allowAllRegisteredUsers); mucService.setRoomCreationRestricted(true); // Log the event webManager.logEvent("updated MUC room creation permissions for service "+mucname, null); response.sendRedirect("muc-create-permission.jsp?addsuccess=true&mucname="+URLEncoder.encode(mucname, StandardCharsets.UTF_8)); return; } // Handle delete if (delete) { // Remove the user from the allowed list mucService.removeUserAllowedToCreate(GroupJID.fromString(userJID)); // Log the event webManager.logEvent("removed MUC room creation permission from "+userJID+" for service "+mucname, null); // done, return response.sendRedirect("muc-create-permission.jsp?deletesuccess=true&mucname="+URLEncoder.encode(mucname, StandardCharsets.UTF_8)); return; } } %> <fmt:message key="muc.create.permission.title"/>

<%= StringUtils.escapeHTMLTags(mucname) %>

<% if (!errors.isEmpty()) { if (delete) { userJID = null; // mask group jid on error } %> <% } else if (success) { %> <% } else if (addsuccess) { %> <% } else if (deletesuccess) { %> <% } %>
" />
>
>
">

">

>


" id="userJIDtf">

<% if (mucService.getUsersAllowedToCreate().isEmpty()) { %> <% } %> <% for (JID jid : mucService.getUsersAllowedToCreate()) { boolean isGroup = GroupJID.isGroup(jid); String jidDisplay = isGroup ? ((GroupJID)jid).getGroupName() : jid.toString(); %> <% } %>
User/Group Remove
<% if (isGroup) { %> " alt=""/> <% } else { %> " alt=""/> <% } %> <%= jidDisplay %> " onclick="return confirm('');" >