package org.apereo.cas.adaptors.rest;
import org.apereo.cas.authentication.UsernamePasswordCredential;
import org.apereo.cas.authentication.principal.SimplePrincipal;
import org.apereo.cas.util.EncodingUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
/**
* This is {@link RestAuthenticationApi}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public class RestAuthenticationApi {
private final RestTemplate restTemplate;
private final String authenticationUri;
public RestAuthenticationApi(final RestTemplate restTemplate, final String authenticationUri) {
this.restTemplate = restTemplate;
this.authenticationUri = authenticationUri;
}
/**
* Authenticate and receive entity from the rest template.
*
* @param c the credential
* @return the response entity
*/
public ResponseEntity<SimplePrincipal> authenticate(final UsernamePasswordCredential c) {
final HttpEntity<SimplePrincipal> entity = new HttpEntity<>(createHeaders(c));
return restTemplate.exchange(authenticationUri, HttpMethod.POST, entity, SimplePrincipal.class);
}
/**
* Create authorization http headers.
*
* @param c the credentials
* @return the http headers
*/
public static HttpHeaders createHeaders(final UsernamePasswordCredential c) {
final HttpHeaders acceptHeaders = new HttpHeaders() {
private static final long serialVersionUID = -3529759978950667758L;
{
set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON.toString());
}
};
final String authorization = c.getUsername() + ':' + c.getPassword();
final String basic = EncodingUtils.encodeBase64(authorization.getBytes(Charset.forName("US-ASCII")));
acceptHeaders.set("Authorization", "Basic " + basic);
return acceptHeaders;
}
}