package org.jboss.resteasy.test.skeleton.key;
import org.junit.Assert;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMWriter;
import org.jboss.resteasy.security.PemUtils;
import org.jboss.resteasy.skeleton.key.RSATokenVerifier;
import org.jboss.resteasy.skeleton.key.ResourceMetadata;
import org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse;
import org.jboss.resteasy.skeleton.key.representations.SkeletonKeyToken;
import org.jboss.resteasy.skeleton.key.representations.idm.RequiredCredentialRepresentation;
import org.junit.BeforeClass;
import org.junit.Test;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.Response;
import java.io.StringWriter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PublicKey;
import java.security.Security;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class GrantTest extends SkeletonTestBase
{
@BeforeClass
public static void setupTest() throws Exception
{
setupIDM("testrealm.json");
}
@Test
public void testSuccessfulToken() throws Exception
{
Form form = new Form();
form.param(RequiredCredentialRepresentation.PASSWORD, "userpassword")
.param("client_id", "wburke");
System.out.println(realmInfo.getGrantUrl());
Response response = client.target(realmInfo.getGrantUrl()).request().post(Entity.form(form));
if (response.getStatus() != 200)
{
Assert.fail(response.readEntity(String.class));
}
AccessTokenResponse tokenResponse = response.readEntity(AccessTokenResponse.class);
Assert.assertEquals("bearer", tokenResponse.getTokenType());
ResourceMetadata metadata = new ResourceMetadata();
metadata.setRealm("test-realm");
metadata.setResourceName("Application");
metadata.setRealmKey(realmInfo.getPublicKey());
SkeletonKeyToken token = RSATokenVerifier.verifyToken(tokenResponse.getToken(), metadata);
}
@Test
public void testPem() throws Exception
{
System.out.println("*******************");
if (Security.getProvider("BC") == null) Security.addProvider(new BouncyCastleProvider());
KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
StringWriter writer = new StringWriter();
PEMWriter pemWriter = new PEMWriter(writer);
pemWriter.writeObject(keyPair.getPublic());
pemWriter.flush();
String s = writer.toString();
System.out.println(s);
s = PemUtils.removeBeginEnd(s);
PublicKey pk = PemUtils.decodePublicKey(s);
Assert.assertEquals(pk, keyPair.getPublic());
}
}