/* * Copyright (C) 2010 JFrog Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in complia * nce with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jfrog.bamboo.admin; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.ObjectMapper; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.List; /** * Exposes features of the Artifactory Server Configuration Manager service to serve plugin modules which can't reach * it. * * @author Noam Y. Tenne */ public class ArtifactoryConfigServlet extends HttpServlet { private Logger log = Logger.getLogger(ArtifactoryConfigServlet.class); private ServerConfigManager serverConfigManager; public ArtifactoryConfigServlet(ServerConfigManager serverConfigManager) { this.serverConfigManager = serverConfigManager; } /** * Requires to be provided with a server ID (param name is serverId).<br> If given with the parameter * "deployableRepos=true", it will return the list of deployable repositories for the server with the given ID.<br> * If no other parameter is provided, the server configuration of the given ID will be returned.<br> All successful * responses are returned in JSON format. */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String serverIdValue = req.getParameter("serverId"); if (StringUtils.isBlank(serverIdValue)) { resp.sendError(HttpStatus.SC_BAD_REQUEST, "Please provide a server ID."); log.error("Unable to retrieve server configuration information. No server ID was provided."); return; } long serverId; try { serverId = Long.parseLong(serverIdValue); } catch (NumberFormatException e) { resp.sendError(HttpStatus.SC_BAD_REQUEST, "Please provide a valid long-type server ID."); log.error("Unable to retrieve server configuration information. An invalid server ID was provided (" + serverIdValue + ")."); return; } ServerConfig serverConfig = serverConfigManager.getServerConfigById(serverId); if (serverConfig == null) { resp.sendError(HttpStatus.SC_NOT_FOUND, "Could not find an Artifactory server configuration with the ID " + serverId + "."); log.error("Unable to retrieve server configuration. No configuration was found with the ID " + serverId + "."); return; } String deployableReposValue = req.getParameter("deployableRepos"); String resolvingReposValue = req.getParameter("resolvingRepos"); if (StringUtils.isNotBlank(deployableReposValue) && Boolean.valueOf(deployableReposValue)) { List<String> deployableRepoList = serverConfigManager.getDeployableRepos(serverId, req, resp); returnJsonObject(resp, deployableRepoList); } else if (StringUtils.isNotBlank(resolvingReposValue) && Boolean.valueOf(resolvingReposValue)) { List<String> resolvingRepoList = serverConfigManager.getResolvingRepos(serverId, req, resp); returnJsonObject(resp, resolvingRepoList); } else { returnJsonObject(resp, serverConfig); } } /** * Sends the given object as JSON to the response * * @param resp Response to send to * @param toReturn Object to send */ private void returnJsonObject(HttpServletResponse resp, Object toReturn) throws IOException { JsonFactory jsonFactory = new JsonFactory(); ObjectMapper mapper = new ObjectMapper(); jsonFactory.setCodec(mapper); PrintWriter writer = null; try { writer = resp.getWriter(); JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(writer); jsonGenerator.writeObject(toReturn); writer.flush(); } finally { IOUtils.closeQuietly(writer); } } }