diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/PKIServlet.java b/base/server-webapp/src/main/java/org/dogtagpki/server/PKIServlet.java index 84cc7d1775d..c2d597b59b1 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/PKIServlet.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/PKIServlet.java @@ -23,6 +23,11 @@ public PKIEngine getPKIEngine() { } public void get(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); + } + + public void post(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); } @Override @@ -37,4 +42,17 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro throw new ServletException(e); } } + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + post(request, response); + + } catch (ServletException | IOException e) { + throw e; + + } catch (Exception e) { + throw new ServletException(e); + } + } } diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/AppService.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/AppService.java similarity index 98% rename from base/server-webapp/src/main/java/org/dogtagpki/server/rest/AppService.java rename to base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/AppService.java index 171496c83e6..00834ffda9c 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/AppService.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/AppService.java @@ -3,7 +3,7 @@ // // SPDX-License-Identifier: GPL-2.0-or-later // -package org.dogtagpki.server.rest; +package org.dogtagpki.server.rest.v1; import java.io.File; import java.util.ArrayList; diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/InfoService.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/InfoService.java similarity index 97% rename from base/server-webapp/src/main/java/org/dogtagpki/server/rest/InfoService.java rename to base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/InfoService.java index c0fd446b68b..ec997593a1c 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/InfoService.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/InfoService.java @@ -16,7 +16,7 @@ // All rights reserved. // --- END COPYRIGHT BLOCK --- -package org.dogtagpki.server.rest; +package org.dogtagpki.server.rest.v1; import javax.ws.rs.core.Response; diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/LoginService.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/LoginService.java similarity index 97% rename from base/server-webapp/src/main/java/org/dogtagpki/server/rest/LoginService.java rename to base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/LoginService.java index 40f89135eb6..ec8b04165bf 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/LoginService.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/LoginService.java @@ -16,7 +16,7 @@ // All rights reserved. // --- END COPYRIGHT BLOCK --- -package org.dogtagpki.server.rest; +package org.dogtagpki.server.rest.v1; import javax.servlet.http.HttpSession; import javax.ws.rs.core.Response; diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/PKIApplication.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/PKIApplication.java similarity index 97% rename from base/server-webapp/src/main/java/org/dogtagpki/server/rest/PKIApplication.java rename to base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/PKIApplication.java index ab68ab845fd..89510dba721 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/PKIApplication.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v1/PKIApplication.java @@ -16,7 +16,7 @@ // All rights reserved. // --- END COPYRIGHT BLOCK --- -package org.dogtagpki.server.rest; +package org.dogtagpki.server.rest.v1; import java.util.LinkedHashSet; import java.util.Set; diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/AppServlet.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/AppServlet.java new file mode 100644 index 00000000000..b0a7754081c --- /dev/null +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/AppServlet.java @@ -0,0 +1,101 @@ +// +// Copyright Red Hat, Inc. +// +// SPDX-License-Identifier: GPL-2.0-or-later +// +package org.dogtagpki.server.rest.v2; + +import java.io.File; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +import javax.servlet.ServletContext; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.core.MediaType; + +import org.dogtagpki.common.AppInfo; +import org.dogtagpki.server.PKIServlet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.netscape.cmscore.apps.CMS; + +/** + * @author Marco Fargetta {@literal } + * @author Endi S. Dewata + */ +@WebServlet("/v2/apps") +public class AppServlet extends PKIServlet { + private static final long serialVersionUID = 1L; + private static Logger logger = LoggerFactory.getLogger(AppServlet.class); + + @Override + public void get(HttpServletRequest request, HttpServletResponse response) throws Exception { + + logger.info("PKI applications:"); + Collection apps = new ArrayList<>(); + + // get /conf folder + File instanceDir = new File(CMS.getInstanceDir()); + File confDir = new File(instanceDir, "conf"); + + // get all folders under /conf + File[] appConfDirs = confDir.listFiles(File::isDirectory); + Arrays.sort(appConfDirs); + + for (File appConfDir : appConfDirs) { + String id = appConfDir.getName(); + + // get app info if the app is deployed + AppInfo info = getAppInfo(request.getServletContext(), id); + if (info == null) continue; + + logger.info("- ID: {}", info.getID()); + logger.info(" Name: {}", info.getName()); + logger.info(" Path: {}", info.getPath()); + + apps.add(info); + } + + response.setContentType(MediaType.APPLICATION_JSON); + + PrintWriter out = response.getWriter(); + ObjectMapper mapper = new ObjectMapper(); + out.println(mapper.writeValueAsString(apps)); + } + + public AppInfo getAppInfo(ServletContext context, String id) { + + // get path of the application + String path = "/" + id; + + // find context of the path + ServletContext ctx = context.getContext(path); + + if (ctx == null) { + // context not available + return null; + } + + if (!path.equals(ctx.getContextPath())) { + // path belongs to a different context, + // so the application is not deployed + return null; + } + + // get display name from web.xml + String displayName = ctx.getServletContextName(); + + AppInfo info = new AppInfo(); + info.setID(id); + info.setName(displayName); + info.setPath(path); + + return info; + } +} diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/v2/InfoServlet.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/InfoServlet.java similarity index 94% rename from base/server-webapp/src/main/java/org/dogtagpki/server/v2/InfoServlet.java rename to base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/InfoServlet.java index 3c175c1e1f8..3be3eb1e8d3 100644 --- a/base/server-webapp/src/main/java/org/dogtagpki/server/v2/InfoServlet.java +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/InfoServlet.java @@ -3,7 +3,7 @@ // // SPDX-License-Identifier: GPL-2.0-or-later // -package org.dogtagpki.server.v2; +package org.dogtagpki.server.rest.v2; import java.io.PrintWriter; @@ -24,6 +24,7 @@ public class InfoServlet extends PKIServlet { private static final long serialVersionUID = 1L; + @Override public void get(HttpServletRequest request, HttpServletResponse response) throws Exception { PKIEngine engine = getPKIEngine(); diff --git a/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/LoginServlet.java b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/LoginServlet.java new file mode 100644 index 00000000000..dbdbebb555a --- /dev/null +++ b/base/server-webapp/src/main/java/org/dogtagpki/server/rest/v2/LoginServlet.java @@ -0,0 +1,37 @@ +// +// Copyright Red Hat, Inc. +// +// SPDX-License-Identifier: GPL-2.0-or-later +// +package org.dogtagpki.server.rest.v2; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.dogtagpki.server.PKIServlet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Marco Fargetta {@literal } + * @author Endi S. Dewata + */ +@WebServlet("/v2/login") +public class LoginServlet extends PKIServlet { + private static final long serialVersionUID = 1L; + private static Logger logger = LoggerFactory.getLogger(LoginServlet.class); + + + + @Override + public void post(HttpServletRequest request, HttpServletResponse response) throws Exception { + HttpSession session = request.getSession(); + logger.debug("LoginService.login(): session: {}", session.getId()); + + // mark banner displayed in this session + session.setAttribute("bannerDisplayed", "true"); + response.setStatus(HttpServletResponse.SC_NO_CONTENT);; + } +} diff --git a/base/tomcat-9.0/conf/Catalina/localhost/rewrite.config b/base/tomcat-9.0/conf/Catalina/localhost/rewrite.config index 03451429a27..3d050acff56 100644 --- a/base/tomcat-9.0/conf/Catalina/localhost/rewrite.config +++ b/base/tomcat-9.0/conf/Catalina/localhost/rewrite.config @@ -18,4 +18,4 @@ RewriteRule ^/acme/revoke-cert$ /acme/v1/revoke-cert RewriteRule ^/.well-known/est/(.*)$ /est/v1/$1 # REST APIs -RewriteRule ^/(ca|tps|tks|ocsp|kra)/rest/(.*)$ /$1/v1/$2 +RewriteRule ^/(pki|ca|tps|tks|ocsp|kra)/rest/(.*)$ /$1/v1/$2