public OpenIDToken grant()

in authentication-server/src/main/java/org/apache/servicecomb/fence/authentication/GithubTokenGranter.java [74:112]


  public OpenIDToken grant(String code, String state, String login) {
    GithubAccessTokenResponse response = null;
    try {
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
      headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
      MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
      map.add("client_secret", GithubDynamicPropertiesManager.getGithubConfiguration().getClientSecret());
      map.add("client_id", GithubDynamicPropertiesManager.getGithubConfiguration().getClientId());
      map.add("code", code);
      map.add("state", state);
      HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
      response = githubRestTemplate.postForObject("cse://githubAuthService/login/oauth/access_token",
          request,
          GithubAccessTokenResponse.class);
    } catch (Exception e) {
      LOGGER.error("Call github error. ", e);
    }

    if (response == null || StringUtils.isEmpty(response.getAccess_token())) {
      return null;
    }

    if (StringUtils.isEmpty(login)) {
      login = "anonymous";
    }
    try {
      UserDetails userDetails = userDetailsService.loadUserByUsername(name() + ":" + login);

      OpenIDToken openIDToken = openIDTokenStore.createToken(userDetails);
      openIDToken.addAdditionalInformation(AuthenticationServerConstants.TOKEN_ADDTIONAL_INFORMATION_GITHUB_TOKEN,
          response);

      openIDTokenStore.saveToken(openIDToken);
      return openIDToken;
    } catch (UsernameNotFoundException e) {
      return null;
    }
  }