use of org.platformlayer.rest.RestClientException in project platformlayer by platformlayer.
the class PlatformLayerAuthenticationClient method authenticateWithCertificate.
public PlatformlayerAuthenticationToken authenticateWithCertificate(String username, X509Certificate[] certificateChain, PrivateKey privateKey) throws PlatformlayerAuthenticationClientException {
if (username == null) {
throw new IllegalArgumentException();
}
CertificateCredentials certificateCredentials = new CertificateCredentials();
certificateCredentials.setUsername(username);
Auth auth = new Auth();
auth.setCertificateCredentials(certificateCredentials);
AuthenticateRequest request = new AuthenticateRequest();
request.setAuth(auth);
final KeyManager keyManager = new SimpleClientCertificateKeyManager(privateKey, certificateChain);
for (int i = 0; i < 2; i++) {
AuthenticateResponse response;
try {
RestfulRequest<AuthenticateResponse> httpRequest = httpClient.buildRequest(HttpMethod.POST, "api/tokens", HttpPayload.asXml(request), AuthenticateResponse.class);
httpRequest.setKeyManager(keyManager);
response = httpRequest.execute();
} catch (RestClientException e) {
throw new PlatformlayerAuthenticationClientException("Error authenticating", e);
}
if (i == 0) {
if (response == null || response.getChallenge() == null) {
return null;
}
byte[] challenge = response.getChallenge();
byte[] challengeResponse = decrypt(privateKey, challenge);
certificateCredentials.setChallengeResponse(challengeResponse);
} else {
if (response == null || response.getAccess() == null) {
return null;
}
return new PlatformlayerAuthenticationToken(response.getAccess());
}
}
return null;
}
use of org.platformlayer.rest.RestClientException in project platformlayer by platformlayer.
the class PlatformLayerAuthAdminClient method signCsr.
// This can actually be moved to the user-auth system
public List<X509Certificate> signCsr(String projectKey, CryptoKey projectSecret, String csr) {
String url = "pki/csr";
SignCertificateRequest request = new SignCertificateRequest();
request.setProject(projectKey);
request.setCsr(csr);
request.setProjectSecret(FathomdbCrypto.serialize(projectSecret));
try {
SignCertificateResponse response = doSimpleXmlRequest(HttpMethod.POST, url, request, SignCertificateResponse.class);
List<X509Certificate> certificates = Lists.newArrayList();
for (String cert : response.getCertificates()) {
certificates.addAll(CertificateUtils.fromPem(cert));
}
return certificates;
} catch (RestClientException e) {
throw new IllegalArgumentException("Error while signing certificate", e);
}
}
use of org.platformlayer.rest.RestClientException in project platformlayer by platformlayer.
the class PlatformLayerAuthAdminClient method checkServiceAccess.
public String checkServiceAccess(CertificateChainInfo chain) {
String url = "services/check";
CheckServiceAccessRequest request = new CheckServiceAccessRequest();
request.setChain(chain);
try {
CheckServiceAccessResponse response = doSimpleXmlRequest(HttpMethod.POST, url, request, CheckServiceAccessResponse.class);
return response.getServiceAccount();
} catch (RestClientException e) {
throw new IllegalArgumentException("Error while checking service access", e);
}
}
use of org.platformlayer.rest.RestClientException in project platformlayer by platformlayer.
the class PlatformLayerAuthAdminClient method validateToken.
@Override
public ProjectAuthorization validateToken(AuthenticationToken authToken, String projectId) {
// v2.0/tokens/{userToken}[?project={tenant}]
String tokenId = ((PlatformlayerAuthenticationToken) authToken).getAuthTokenValue();
tokenId = tokenId.trim();
String url = "v2.0/tokens/" + tokenId;
url += "?project=" + UrlUtils.urlEncode(projectId);
try {
ValidateTokenResponse response = doSimpleXmlRequest(HttpMethod.GET, url, null, ValidateTokenResponse.class);
ValidateAccess access = response.getAccess();
if (access == null) {
return null;
}
// ProjectValidation project = access.getProject();
// if (project == null || !Objects.equal(projectId, project.getId())) {
// return null;
// }
UserValidation userInfo = access.getUser();
if (userInfo == null) {
return null;
}
ProjectValidation projectInfo = access.getProject();
if (projectInfo == null) {
return null;
}
// List<String> roles = Lists.newArrayList();
// UserValidation userInfo = access.getUser();
// for (Role role : userInfo.getRoles()) {
// if (!role.getTenantId().equals(projectId)) {
// throw new IllegalStateException("Tenant mismatch: " + role.getTenantId() + " vs " + projectId);
// }
// roles.add(role.getName());
// }
// byte[] userSecret = userInfo.getSecret();
String userKey = userInfo.getName();
PlatformlayerUserAuthentication user = new PlatformlayerUserAuthentication(authToken, userKey);
PlatformlayerProjectAuthorization project = buildPlatformlayerProjectAuthorization(user, projectInfo);
return project;
} catch (RestClientException e) {
if (e.getHttpResponseCode() != null && e.getHttpResponseCode() == 404) {
// Not found => invalid token
return null;
}
log.warn("Error while validating token", e);
throw new IllegalArgumentException("Error while validating token", e);
}
}
use of org.platformlayer.rest.RestClientException in project platformlayer by platformlayer.
the class PlatformLayerAuthAdminClient method validateChain.
@Override
public ProjectAuthorization validateChain(X509Certificate[] chain, String projectKey) {
// v2.0/keychain[?project={projectKey}]
String url = "v2.0/keychain";
url += "?project=" + UrlUtils.urlEncode(projectKey);
CertificateChainInfo chainInfo = CertificateChains.toModel(chain);
try {
ValidateTokenResponse response = doSimpleXmlRequest(HttpMethod.POST, url, chainInfo, ValidateTokenResponse.class);
ValidateAccess access = response.getAccess();
if (access == null) {
return null;
}
UserValidation userInfo = access.getUser();
if (userInfo == null) {
return null;
}
ProjectValidation projectInfo = access.getProject();
if (projectInfo == null) {
return null;
}
String userKey = userInfo.getName();
PlatformlayerUserAuthentication user = new PlatformlayerUserAuthentication(null, userKey);
PlatformlayerProjectAuthorization project = buildPlatformlayerProjectAuthorization(user, projectInfo);
return project;
} catch (RestClientException e) {
if (e.getHttpResponseCode() != null && e.getHttpResponseCode() == 404) {
// Not found => invalid token
return null;
}
log.warn("Error while validating credentials", e);
throw new IllegalArgumentException("Error while validating credentials", e);
}
}
Aggregations