import-truststore-certificate.jsp 6.2 KB
Newer Older
1 2 3 4 5
<%@ page errorPage="error.jsp"%>
<%@ page import="org.jivesoftware.util.ParamUtils"%>
<%@ page import="org.jivesoftware.openfire.net.SSLConfig"%>
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
6 7
<%@ page import="org.jivesoftware.openfire.keystore.Purpose" %>
<%@ page import="org.jivesoftware.openfire.keystore.TrustStoreConfig" %>
8 9

<%@ taglib uri="admin" prefix="admin" %>
10 11
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
12 13 14 15

<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager"/>
<%  webManager.init(request, response, session, application, out ); %>

16 17 18 19
<%  final boolean save             = ParamUtils.getParameter(request, "save") != null;
    final String alias             = ParamUtils.getParameter(request, "alias");
    final String certificate       = ParamUtils.getParameter(request, "certificate");
    final String storePurposeText = ParamUtils.getParameter(request, "storePurpose");
20 21 22

    final Map<String, String> errors = new HashMap<String, String>();

23 24
    Purpose storePurpose;
    try
25
    {
26 27 28 29
        storePurpose = Purpose.valueOf( storePurposeText );
    } catch (RuntimeException ex) {
        errors.put( "storePurpose", ex.getMessage() );
        storePurpose = null;
30 31
    }

32 33 34
    if (! storePurpose.isTrustStore() ) {
        errors.put( "storePurpose", "shoud be a trust store (not an identity store)");
        storePurpose = null;
35 36
    }

37 38
    pageContext.setAttribute( "storePurpose", storePurpose );

39 40
    if (save && errors.isEmpty())
    {
41 42
        final TrustStoreConfig trustStoreConfig = (TrustStoreConfig) SSLConfig.getInstance().getStoreConfig( storePurpose );

43 44 45 46
        if (alias == null || "".equals(alias))
        {
            errors.put("missingalias", "missingalias");
        }
47
        else if (trustStoreConfig.getStore().containsAlias( alias ))
48 49 50 51 52 53 54 55 56 57 58 59 60 61
        {
            // Verify that the provided alias is not already available
            errors.put("existingalias", "existingalias");
        }
        if (certificate == null || "".equals(certificate))
        {
            errors.put("certificate", "certificate-missing");
        }

        if (errors.isEmpty())
        {
            try
            {
                // Import certificate
62
                trustStoreConfig.installCertificate( alias, certificate );
63 64

                // Log the event
65 66 67
                webManager.logEvent("imported SSL certificate in "+ storePurposeText, "alias = "+alias);

                response.sendRedirect( "security-truststore.jsp?storePurpose=" + storePurposeText + "&importsuccess=true" );
68 69 70 71 72 73 74 75 76 77 78 79 80 81
                return;
            }
            catch (Throwable e)
            {
                e.printStackTrace();
                errors.put("import", e.getMessage());
            }
        }
    }
%>

<html>
<head>
    <title>
82
        <fmt:message key="ssl.import.certificate.keystore.${connectivityType}.title"/> - <fmt:message key="ssl.certificates.truststore.${param.type}-title"/>
83
    </title>
84
    <meta name="pageID" content="security-truststore-${connectivityType}-${param.type}"/>
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
</head>
<body>

<% pageContext.setAttribute("errors", errors); %>
<c:forEach var="err" items="${errors}">
    <admin:infobox type="error">
        <c:choose>
            <c:when test="${err.key eq 'type'}">
                <fmt:message key="ssl.import.certificate.keystore.error.type"/>
            </c:when>

            <c:when test="${err.key eq 'missingalias'}">
                <fmt:message key="ssl.import.certificate.keystore.error.alias-missing"/>
            </c:when>

            <c:when test="${err.key eq 'existingalias'}">
                <fmt:message key="ssl.import.certificate.keystore.error.alias-exists"/>
            </c:when>

            <c:when test="${err.key eq 'certificate'}">
                <fmt:message key="ssl.import.certificate.keystore.error.certificate"/>
            </c:when>

            <c:when test="${err.key eq 'import'}">
                <fmt:message key="ssl.import.certificate.keystore.error.import"/>
                <c:if test="${not empty err.value}">
                    <fmt:message key="admin.error"/>: <c:out value="${err.value}"/>
                </c:if>
            </c:when>

            <c:otherwise>
                <c:if test="${not empty err.value}">
                    <fmt:message key="admin.error"/>: <c:out value="${err.value}"/>
                </c:if>
                (<c:out value="${err.key}"/>)
            </c:otherwise>
        </c:choose>
    </admin:infobox>
</c:forEach>

<c:if test="${not empty param.type}">
    <p>
        <fmt:message key="ssl.import.certificate.keystore.${param.type}-intro"/>
    </p>

    <!-- BEGIN 'Import Certificate' -->
    <form action="import-truststore-certificate.jsp?type=${param.type}" method="post" name="f">
132
        <input type="hidden" name="connectivityType" value="${connectivityType}"/>
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
        <div class="jive-contentBoxHeader">
            <fmt:message key="ssl.import.certificate.keystore.boxtitle"/>
        </div>
        <div class="jive-contentBox">
            <table cellpadding="3" cellspacing="0" border="0">
                <tbody>
                    <tr valign="top">
                        <td width="1%" nowrap class="c1">
                            <label for="alias"><fmt:message key="ssl.signing-request.alias"/></label>
                        </td>
                        <td width="99%">
                            <input type="text" size="30" maxlength="100" name="alias" id="alias" value="${param.alias}">
                        </td>
                    </tr>
                    <tr valign="top">
                        <td width="1%" nowrap class="c1">
                            <label for="certificate"><fmt:message key="ssl.import.certificate.keystore.certificate"/></label>
                        </td>
                        <td width="99%">
                            <textarea name="certificate" id="certificate" cols="80" rows="20" wrap="virtual">${param.certificate}</textarea>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
        <input type="submit" name="save" value="<fmt:message key="global.save"/>">
    </form>
    <!-- END 'Import Certificate' -->
</c:if>

</body>
</html>