protected ModelAndView doHandle()

in commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/PublisherSettingsController.java [81:151]


  protected ModelAndView doHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) throws Exception {
    SUser user = SessionUser.getUser(request);
    if (user == null)
      return null;

    String buildTypeId = request.getParameter("id");
    if (buildTypeId != null) {
      BuildTypeIdentity buildTypeOrTemplate;
      try {
        buildTypeOrTemplate = getBuildTypeOrTemplate(buildTypeId);
      } catch (PublisherException e) {
        LOG.warn(String.format(ILLEGAL_ACCESS_WARNING, user.getUsername(), buildTypeId));
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        return null;
      }

      if (!user.isPermissionGrantedForProject(buildTypeOrTemplate.getProject().getProjectId(), Permission.EDIT_PROJECT)) {
        LOG.warn(String.format(ILLEGAL_ACCESS_WARNING, user.getUsername(), buildTypeId));
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        return null;
      }
    }

    String publisherId = request.getParameter(Constants.PUBLISHER_ID_PARAM);
    if (publisherId == null)
      return null;

    String projectId = request.getParameter("projectId");
    SProject project = myProjectManager.findProjectByExternalId(projectId);
    if (project != null) {
      if (!user.isPermissionGrantedForProject(project.getProjectId(), Permission.VIEW_PROJECT)) {
        LOG.warn(String.format(ILLEGAL_PROJECT_ACCESS_WARNING, user.getUsername(), buildTypeId));
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        return null;
      }
      request.setAttribute("projectId", project.getExternalId());
      request.setAttribute("project", project);
    }

    CommitStatusPublisherSettings settings = myPublisherManager.findSettings(publisherId);
    if (settings == null)
      return null;

    String settingsUrl = settings.getEditSettingsUrl();
    Map<String, String> params = settings.getDefaultParameters() != null ? settings.getDefaultParameters() : Collections.emptyMap();
    if (Constants.TEST_CONNECTION_YES.equals(request.getParameter(Constants.TEST_CONNECTION_PARAM))) {
      processTestConnectionRequest(request, response, settings, params);
      return null;
    }

    if (project != null) {
      settings.getSpecificAttributes(project, Collections.emptyMap()).forEach((k, v) -> request.setAttribute(k, v));
    }

    request.setAttribute("propertiesBean", new BasePropertiesBean(params));
    request.setAttribute("currentUser", SessionUser.getUser(request));
    request.setAttribute("testConnectionSupported", settings.isTestConnectionSupported());

    if (project != null && user != null) {
      List<OAuthConnectionDescriptor> oauthConnections = settings.getOAuthConnections(project, user);
      request.setAttribute("oauthConnections", oauthConnections);
      request.setAttribute("refreshTokenSupported", oauthConnections.stream().anyMatch(c -> c.getOauthProvider().isTokenRefreshSupported()));
      request.setAttribute("canEditProject", AuthUtil.hasPermissionToManageProject(mySecurityContext.getAuthorityHolder(), project.getProjectId()));
    }

    if (settingsUrl != null) {
      return new ModelAndView(settingsUrl);
    }

    return null;
  }