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