%@ page contentType="text/html; charset=UTF-8" %>
<%--
-
- Copyright (C) 2005-2008 Jive Software, 2017-2025 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.ParamUtils,
org.jivesoftware.util.StringUtils,
org.jivesoftware.util.CookieUtils,
java.net.URLEncoder"
errorPage="error.jsp"
%><%@ page import="org.xmpp.packet.JID"%>
<%@ page import="org.jivesoftware.openfire.roster.Roster" %>
<%@ page import="org.jivesoftware.openfire.roster.RosterItem" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="org.jivesoftware.openfire.group.Group" %>
<%@ page import="java.util.Collection" %>
<%@ 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" %>
<% webManager.init(request, response, session, application, out ); %>
<% // Get parameters
boolean cancel = request.getParameter("cancel") != null;
String username = ParamUtils.getParameter(request, "username");
String jid = ParamUtils.getParameter(request, "jid");
String nickname = ParamUtils.getParameter(request, "nickname");
String groups = ParamUtils.getParameter(request, "groups");
int sub = ParamUtils.getIntParameter(request, "sub", 0);
int ask = ParamUtils.getIntParameter(request, "ask", 0);
boolean save = ParamUtils.getBooleanParameter(request, "save");
// Handle a cancel
if (cancel) {
response.sendRedirect("user-roster.jsp?username=" + URLEncoder.encode(username, StandardCharsets.UTF_8));
return;
}
// Load the user's roster object
Roster roster = webManager.getRosterManager().getRoster(username);
// Load the roster item from the user's roster.
RosterItem item = roster.getRosterItem(new JID(jid));
Cookie csrfCookie = CookieUtils.getCookie(request, "csrf");
String csrfParam = ParamUtils.getParameter(request, "csrf");
if (save) {
if (csrfCookie == null || csrfParam == null || !csrfCookie.getValue().equals(csrfParam)) {
save = false;
}
}
csrfParam = StringUtils.randomString(15);
CookieUtils.setCookie(request, response, "csrf", csrfParam, -1);
pageContext.setAttribute("csrf", csrfParam);
// Handle a roster item update:
if (save) {
List groupList = new ArrayList<>();
if (groups != null) {
for (String group : groups.split(",")) {
groupList.add(group.trim());
}
}
item.setNickname(nickname);
item.setGroups(groupList);
item.setSubStatus(RosterItem.SubType.getTypeFromInt(sub));
item.setAskStatus(RosterItem.AskType.getTypeFromInt(ask));
// update the roster item
roster.updateRosterItem(item);
// Log the event
webManager.logEvent("updated roster item for "+username, "roster item:\njid = "+jid+"\nnickname = "+nickname+"\ngroupList = "+groupList);
// Done, so redirect
response.sendRedirect("user-roster.jsp?username=" + URLEncoder.encode(username, StandardCharsets.UTF_8) + "&editsuccess=true");
return;
}
%>