>From 0aaf981af04e7f27bd444e8614b256bc37644e8a Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata@redhat.com>
Date: Wed, 15 Feb 2017 17:50:26 +0100
Subject: [PATCH] Added PKIApplication.

A new PKIApplication class has been added into /pki web application
to define common PKI REST services such as access banner.

https://fedorahosted.org/pki/ticket/2582
---
 base/server/CMakeLists.txt                         | 22 ++++++++++
 .../org/dogtagpki/server/rest/PKIApplication.java  | 50 ++++++++++++++++++++++
 base/server/share/webapps/pki/WEB-INF/web.xml      | 30 +++++++++++++
 3 files changed, 102 insertions(+)
 create mode 100644 base/server/cms/src/org/dogtagpki/server/rest/PKIApplication.java

diff --git a/base/server/CMakeLists.txt b/base/server/CMakeLists.txt
index e0669ca5c0f7d990b8ab8a10f9babf96cf36e4a3..38907e4e313506310b5e63138f6e5e32fde01a27 100644
--- a/base/server/CMakeLists.txt
+++ b/base/server/CMakeLists.txt
@@ -63,6 +63,21 @@ add_custom_command(
     COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/xml-commons-resolver.jar common/lib/xml-commons-resolver.jar
 )
 
+# Create /usr/share/pki/server/webapps/pki/WEB-INF/lib. This can be customized for different platforms in RPM spec.
+
+add_custom_target(pki-server-webapp-lib ALL)
+
+add_custom_command(
+    TARGET pki-server-webapp-lib
+    COMMAND ${CMAKE_COMMAND} -E make_directory webapp/lib
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-nsutil.jar webapp/lib/pki-nsutil.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-cmsutil.jar webapp/lib/pki-cmsutil.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-certsrv.jar webapp/lib/pki-certsrv.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-cms.jar webapp/lib/pki-cms.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-cmscore.jar webapp/lib/pki-cmscore.jar
+    COMMAND ${CMAKE_COMMAND} -E create_symlink /usr/share/java/pki/pki-cmsbundle.jar webapp/lib/pki-cmsbundle.jar
+)
+
 install(
     DIRECTORY
         ${CMAKE_CURRENT_BINARY_DIR}/common/lib/
@@ -72,6 +87,13 @@ install(
 
 install(
     DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}/webapp/lib/
+    DESTINATION
+        ${DATA_INSTALL_DIR}/server/webapps/pki/WEB-INF/lib
+)
+
+install(
+    DIRECTORY
         man/
     DESTINATION
         ${MAN_INSTALL_DIR}
diff --git a/base/server/cms/src/org/dogtagpki/server/rest/PKIApplication.java b/base/server/cms/src/org/dogtagpki/server/rest/PKIApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..d6ac7939c979d6d491f35094b689746558af1363
--- /dev/null
+++ b/base/server/cms/src/org/dogtagpki/server/rest/PKIApplication.java
@@ -0,0 +1,50 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2017 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+
+package org.dogtagpki.server.rest;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+public class PKIApplication extends Application {
+
+    private Set<Object> singletons = new LinkedHashSet<Object>();
+    private Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
+
+    public PKIApplication() {
+
+        // services
+
+        // exception mappers
+        classes.add(PKIExceptionMapper.class);
+
+        // interceptors
+        singletons.add(new MessageFormatInterceptor());
+    }
+
+    public Set<Class<?>> getClasses() {
+        return classes;
+    }
+
+    public Set<Object> getSingletons() {
+        return singletons;
+    }
+
+}
diff --git a/base/server/share/webapps/pki/WEB-INF/web.xml b/base/server/share/webapps/pki/WEB-INF/web.xml
index 9afb41825ed80bbd7c59acc8bdbdfe3edeb16f12..aacdffaee4348a36ee155e3d1b2ee989a9d6d1cf 100644
--- a/base/server/share/webapps/pki/WEB-INF/web.xml
+++ b/base/server/share/webapps/pki/WEB-INF/web.xml
@@ -5,6 +5,36 @@
 
     <display-name>PKI</display-name>
 
+    <listener>
+        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+    </listener>
+
+    <context-param>
+        <param-name>resteasy.servlet.mapping.prefix</param-name>
+        <param-value>/rest</param-value>
+    </context-param>
+
+    <context-param>
+        <param-name>resteasy.resource.method-interceptors</param-name>
+        <param-value>
+            org.jboss.resteasy.core.ResourceMethodSecurityInterceptor
+        </param-value>
+    </context-param>
+
+    <servlet>
+        <servlet-name>Resteasy</servlet-name>
+        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+        <init-param>
+            <param-name>javax.ws.rs.Application</param-name>
+            <param-value>org.dogtagpki.server.rest.PKIApplication</param-value>
+         </init-param>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>Resteasy</servlet-name>
+        <url-pattern>/rest/*</url-pattern>
+    </servlet-mapping>
+
     <security-constraint>
         <web-resource-collection>
             <web-resource-name>PKI UI</web-resource-name>
-- 
2.9.3

