private String faqUrl() throws Exception {
    ServletRequestAttributes requestAttributes =
        (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = requestAttributes.getRequest();

    return UrlBuilder.createFaqUrl(request);
  }
  private String signUrl() throws Exception {
    ServletRequestAttributes requestAttributes =
        (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = requestAttributes.getRequest();

    return UrlBuilder.signUrl()
        .request(request)
        .claName(claName)
        .repositoryId(repositoryId)
        .pullRequestId(pullRequestId)
        .build();
  }
  @RequestMapping("/login/oauth2/github")
  public void oauth(
      ImportedSignaturesSessionAttr importedSignaturesAttr,
      HttpServletRequest request,
      HttpServletResponse response,
      @RequestParam String code,
      @RequestParam String state)
      throws Exception {
    String actualState = (String) request.getSession().getAttribute("state");
    if (actualState == null || !actualState.equals(state)) {
      throw new InvalidSecretState();
    }

    boolean admin = GitHubAuthenticationEntryPoint.isAdmin(state);

    OAuthAccessTokenParams params = new OAuthAccessTokenParams();
    params.setCallbackUrl(UrlBuilder.fromRequest(request).callbackUrl());
    params.setCode(code);
    params.setState(actualState);

    CurrentUserRequest userRequest = new CurrentUserRequest();
    userRequest.setOauthParams(params);
    userRequest.setRequestAdminAccess(admin);

    User user = gitHub.getCurrentUser(userRequest);

    User existingUser = users.findOne(user.getGitHubLogin());
    boolean isNewUser = existingUser == null;

    users.save(user);

    Authentication authentication = Login.loginAs(user);

    if (isNewUser) {
      List<IndividualSignature> individualSignatures =
          individual.findSignaturesFor(new PageRequest(0, 1), user);
      boolean signed = !individualSignatures.isEmpty();
      if (!signed) {
        List<String> organizations = gitHub.getOrganizations(user.getGitHubLogin());
        signed =
            !corporate
                .findSignatures(new PageRequest(0, 1), organizations, user.getEmails())
                .isEmpty();
      }

      if (signed) {
        importedSignaturesAttr.setValue(true);
      }
    }

    success.onAuthenticationSuccess(request, response, authentication);
  }
 private String syncUrl() throws Exception {
   ServletRequestAttributes requestAttributes =
       (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
   HttpServletRequest request = requestAttributes.getRequest();
   return UrlBuilder.createSyncUrl(request, claName, repositoryId, pullRequestId);
 }