1<%@ page contentType="text/html; charset=UTF-8" %> 2<%@ page import="org.jivesoftware.openfire.pubsub.PubSubServiceInfo, 3 org.jivesoftware.openfire.pubsub.PubSubServiceInfo.listType, 4 org.jivesoftware.util.CookieUtils, 5 org.jivesoftware.util.ParamUtils, 6 org.jivesoftware.util.StringUtils, 7 org.xmpp.forms.DataForm, 8 java.util.HashMap, 9 java.util.Map" 10 errorPage="error.jsp" 11%> 12 13<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 14<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 15<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager" /> 16<% webManager.init(request, response, session, application, out ); %> 17 18<% // Get parameters // 19 boolean cancel = ParamUtils.getParameter(request,"cancel") != null; 20 boolean update = ParamUtils.getParameter(request,"update") != null; 21 Cookie csrfCookie = CookieUtils.getCookie(request, "csrf"); 22 String csrfParam = ParamUtils.getParameter(request, "csrf"); 23 24 final Map<String, String> errors = new HashMap<>(); 25 26 boolean formSubmitted = false; 27 if (csrfParam != null) { 28 formSubmitted = true; 29 } 30 31 if (update) { 32 if (csrfCookie == null || csrfParam == null || !csrfCookie.getValue().equals(csrfParam)) { 33 update = false; 34 errors.put("csrf", "CSRF Failure!"); 35 } 36 } 37 csrfParam = StringUtils.randomString(15); 38 CookieUtils.setCookie(request, response, "csrf", csrfParam, -1); 39 pageContext.setAttribute("csrf", csrfParam); 40 41 // Handle a cancel 42 if (cancel) { 43 response.sendRedirect("pubsub-node-summary.jsp"); 44 return; 45 } 46 47 final PubSubServiceInfo pubSubServiceInfo = webManager.getPubSubInfo(); 48 49 DataForm form = pubSubServiceInfo.getServiceConfigurationForm(); 50 51 // Handle a service update: 52 if (errors.isEmpty() && update) { 53 54 pubSubServiceInfo.configureService(pubSubServiceInfo.processForm(form, request, null)); 55 56 // Done, so redirect 57 response.sendRedirect("pubsub-service-summary.jsp?updateSuccess=true"); 58 return; 59 } 60 61 if (formSubmitted) { 62 form = pubSubServiceInfo.processForm(form, request, null); 63 } 64 65 Map<String,listType> listTypes = new HashMap<>(); 66 67 listTypes.put("pubsub#allowedToCreate", listType.user); 68 listTypes.put("pubsub#sysadmins", listType.user); 69 70 pubSubServiceInfo.validateAdditions(form, request, listTypes, errors); 71 72 pageContext.setAttribute("fields", form.getFields()); 73 pageContext.setAttribute("listTypes", listTypes); 74 pageContext.setAttribute("errors", errors); 75 76%> 77 78<html> 79 <head> 80 <title><fmt:message key="pubsub.service.summary.title"/></title> 81 <meta name="pageID" content="pubsub-service-summary"/> 82 </head> 83 <body> 84 85<c:choose> 86 <c:when test="${empty errors and param.updateSuccess}"> 87 <admin:infobox type="success"> 88 <fmt:message key="pubsub.service.summary.updated" /> 89 </admin:infobox> 90 </c:when> 91 <c:otherwise> 92 <c:forEach var="err" items="${errors}"> 93 <admin:infobox type="error"> 94 <c:choose> 95 <c:when test="${err.key eq 'csrf'}"><fmt:message key="global.csrf.failed" /></c:when> 96 <c:otherwise> 97 <c:if test="${not empty err.value}"> 98 <fmt:message key="admin.error"/>: <c:out value="${err.value}"/> 99 </c:if> 100 (<c:out value="${err.key}"/>) 101 </c:otherwise> 102 </c:choose> 103 </admin:infobox> 104 </c:forEach> 105 </c:otherwise> 106</c:choose> 107 108<p> 109 <fmt:message key="pubsub.service.summary.info" /> 110</p> 111 112<form action="pubsub-service-summary.jsp"> 113 <input type="hidden" name="csrf" value="${csrf}"> 114 115<fieldset> 116 <legend><fmt:message key="pubsub.node.delete.details_title" /></legend> 117 <div> 118 119 <c:set var="fields" value="${fields}" scope="request"/> 120 <c:set var="listTypes" value="${listTypes}" scope="request"/> 121 <c:set var="errors" value="${errors}" scope="request"/> 122 123 <c:import url="pubsub-form-table.jsp"> 124 <c:param name="detailPreFix" value ="pubsub.service.form.detail"/> 125 </c:import> 126 127 </div> 128</fieldset> 129 130<br><br> 131 132<input type="submit" name="update" value="<fmt:message key="global.update" />"> 133<input type="submit" name="cancel" value="<fmt:message key="global.cancel" />"> 134</form> 135 136 </body> 137</html> 138