From 93f0b1a11d5a7f7c44cfcb8ff5300bb68b8b8188 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 01 Oct 2011 17:30:48 -0400 Subject: [PATCH] Refactored federation servlet and utils. Started rpc servlet and utils. --- src/com/gitblit/FederationServlet.java | 122 ++++------------------------------------ 1 files changed, 13 insertions(+), 109 deletions(-) diff --git a/src/com/gitblit/FederationServlet.java b/src/com/gitblit/FederationServlet.java index 7dc5d6a..0be1066 100644 --- a/src/com/gitblit/FederationServlet.java +++ b/src/com/gitblit/FederationServlet.java @@ -15,7 +15,6 @@ */ package com.gitblit; -import java.io.BufferedReader; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; @@ -23,24 +22,16 @@ import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.gitblit.Constants.FederationRequest; -import com.gitblit.Constants.FederationToken; import com.gitblit.models.FederationModel; import com.gitblit.models.FederationProposal; -import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.FederationUtils; import com.gitblit.utils.HttpUtils; import com.gitblit.utils.StringUtils; import com.gitblit.utils.TimeUtils; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; /** * Handles federation requests. @@ -48,67 +39,25 @@ * @author James Moger * */ -public class FederationServlet extends HttpServlet { +public class FederationServlet extends JsonServlet { private static final long serialVersionUID = 1L; - - private transient Logger logger = LoggerFactory.getLogger(FederationServlet.class); public FederationServlet() { super(); } /** - * Returns an url to this servlet for the specified parameters. - * - * @param sourceURL - * the url of the source gitblit instance - * @param token - * the federation token of the source gitblit instance - * @param req - * the pull type request - */ - public static String asFederationLink(String sourceURL, String token, FederationRequest req) { - return asFederationLink(sourceURL, null, token, req, null); - } - - /** - * - * @param remoteURL - * the url of the remote gitblit instance - * @param tokenType - * the type of federation token of a gitblit instance - * @param token - * the federation token of a gitblit instance - * @param req - * the pull type request - * @param myURL - * the url of this gitblit instance - * @return - */ - public static String asFederationLink(String remoteURL, FederationToken tokenType, - String token, FederationRequest req, String myURL) { - if (remoteURL.length() > 0 && remoteURL.charAt(remoteURL.length() - 1) == '/') { - remoteURL = remoteURL.substring(0, remoteURL.length() - 1); - } - if (req == null) { - req = FederationRequest.PULL_REPOSITORIES; - } - return remoteURL + Constants.FEDERATION_PATH + "?req=" + req.name().toLowerCase() - + (token == null ? "" : ("&token=" + token)) - + (tokenType == null ? "" : ("&tokenType=" + tokenType.name().toLowerCase())) - + (myURL == null ? "" : ("&url=" + StringUtils.encodeURL(myURL))); - } - - /** - * Returns the list of repositories for federation requests. + * Processes a federation request. * * @param request * @param response * @throws javax.servlet.ServletException * @throws java.io.IOException */ - private void processRequest(javax.servlet.http.HttpServletRequest request, + + @Override + protected void processRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { FederationRequest reqType = FederationRequest.fromName(request.getParameter("req")); @@ -137,26 +86,11 @@ if (FederationRequest.PROPOSAL.equals(reqType)) { // Receive a gitblit federation proposal - BufferedReader reader = request.getReader(); - StringBuilder json = new StringBuilder(); - String line = null; - while ((line = reader.readLine()) != null) { - json.append(line); - } - reader.close(); - - // check to see if we have proposal data - if (json.length() == 0) { - logger.error(MessageFormat.format("Failed to receive proposal data from {0}", - request.getRemoteAddr())); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + FederationProposal proposal = deserialize(request, response, FederationProposal.class); + if (proposal == null) { return; } - - // deserialize the proposal - Gson gson = new Gson(); - FederationProposal proposal = gson.fromJson(json.toString(), FederationProposal.class); - + // reject proposal, if not receipt prohibited if (!GitBlit.getBoolean(Keys.federation.allowProposals, false)) { logger.error(MessageFormat.format("Rejected {0} federation proposal from {1}", @@ -193,25 +127,13 @@ String remoteId = StringUtils.decodeFromHtml(request.getParameter("url")); String identification = MessageFormat.format("{0} ({1})", remoteId, request.getRemoteAddr()); - BufferedReader reader = request.getReader(); - StringBuilder json = new StringBuilder(); - String line = null; - while ((line = reader.readLine()) != null) { - json.append(line); - } - reader.close(); - // check to see if we have repository data - if (json.length() == 0) { - logger.error(MessageFormat.format( - "Failed to receive pulled repositories list from {0}", identification)); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + // deserialize the status data + FederationModel results = deserialize(request, response, FederationModel.class); + if (results == null) { return; } - // deserialize the status data - Gson gson = new Gson(); - FederationModel results = gson.fromJson(json.toString(), FederationModel.class); // setup the last and netx pull dates results.lastPull = new Date(); int mins = TimeUtils.convertFrequencyToMinutes(results.frequency); @@ -279,25 +201,7 @@ } } - if (result != null) { - // Send JSON response - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(result); - response.getWriter().append(json); - } - } - - @Override - protected void doPost(javax.servlet.http.HttpServletRequest request, - javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, - java.io.IOException { - processRequest(request, response); - } - - @Override - protected void doGet(javax.servlet.http.HttpServletRequest request, - javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, - java.io.IOException { - processRequest(request, response); + // send the result of the request + serialize(response, result); } } -- Gitblit v1.9.1