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;
}
}