@Override protected void doGet(final HttpServletRequest req, final HttpServletResponse rsp) throws IOException { if (raw != null) { rsp.setContentType("text/javascript"); rsp.setContentLength(raw.length); rsp.setDateHeader("Last-Modified", modified); CacheHeaders.setCacheable(req, rsp, 5, TimeUnit.MINUTES); try (ServletOutputStream os = rsp.getOutputStream()) { os.write(raw); } } else { CacheHeaders.setNotCacheable(rsp); rsp.sendError(HttpServletResponse.SC_NOT_FOUND); } }
@Override protected void service(final HttpServletRequest req, final HttpServletResponse rsp) throws IOException { if (req.getQueryString() == null || req.getQueryString().isEmpty()) { // No query string? They want the project list, which we don't // currently support. Return to Gerrit's own web UI. // rsp.sendRedirect(req.getContextPath() + "/"); return; } final Map<String, String> params = getParameters(req); String a = params.get("a"); if (a != null) { if (deniedActions.contains(a)) { rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } if (a.equals(PROJECT_LIST_ACTION)) { rsp.sendRedirect( req.getContextPath() + "/#" + PageLinks.ADMIN_PROJECTS + "?filter=" + Url.encode(params.get("pf") + "/")); return; } } String name = params.get("p"); if (name == null) { rsp.sendError(HttpServletResponse.SC_NOT_FOUND); return; } if (name.endsWith(".git")) { name = name.substring(0, name.length() - 4); } final Project.NameKey nameKey = new Project.NameKey(name); final ProjectControl project; try { project = projectControl.validateFor(nameKey); if (!project.allRefsAreVisible() && !project.isOwner()) { // Pretend the project doesn't exist throw new NoSuchProjectException(nameKey); } } catch (NoSuchProjectException e) { if (userProvider.get().isIdentifiedUser()) { rsp.sendError(HttpServletResponse.SC_NOT_FOUND); } else { // Allow anonymous users a chance to login. // Avoid leaking information by not distinguishing between // project not existing and no access rights. rsp.sendRedirect(getLoginRedirectUrl(req)); } return; } try (Repository repo = repoManager.openRepository(nameKey)) { CacheHeaders.setNotCacheable(rsp); exec(req, rsp, project); } catch (RepositoryNotFoundException e) { getServletContext().log("Cannot open repository", e); rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } }