/** * Generate a JWT for the application the client has been configured with. * * @return A String containing the token data. * * @throws NexmoUnacceptableAuthException if no {@link JWTAuthMethod} is available */ public String generateJwt() throws NexmoUnacceptableAuthException { JWTAuthMethod authMethod = this.httpWrapper.getAuthCollection().getAuth(JWTAuthMethod.class); return authMethod.constructToken(System.currentTimeMillis() / 1000L, JWTAuthMethod.constructJTI()); }
@Test public void testApplicationIdWithCertPath() throws Exception { NexmoClient nexmoClient = new NexmoClient.Builder() .applicationId("app-id") .privateKeyPath(Paths.get(this.getClass().getResource("test/keys/application_key").getPath())) .build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(JWTAuthMethod.class).apply(requestBuilder); assertEquals(1, requestBuilder.getHeaders("Authorization").length); assertEquals("Bearer ", requestBuilder.getFirstHeader("Authorization").getValue().substring(0, 7)); }
@Test public void testApiKeyWithSignatureSecret() throws NexmoUnacceptableAuthException, NoSuchAlgorithmException { NexmoClient nexmoClient = new NexmoClient.Builder().apiKey("api-key").signatureSecret("api-secret").build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(SignatureAuthMethod.class).apply(requestBuilder); List<NameValuePair> parameters = requestBuilder.getParameters(); // This is messy but trying to generate a signature auth method and then comparing with what's on the request // could have a race condition depending on the returned timestamp. // So, we're going to generate the signature after trying to determine what the timestamp is. String timestamp = parameters .stream() .filter(pair -> "timestamp".equals(pair.getName())) .findFirst() .orElse(new BasicNameValuePair("", "")) .getValue(); String sig = MD5Util.calculateMd5("&api_key=api-key×tamp=" + timestamp + "api-secret"); assertContainsParam(parameters, "sig", sig); }
@Test public void testApplicationIdWithCertPathAsString() throws Exception { NexmoClient nexmoClient = new NexmoClient.Builder() .applicationId("app-id") .privateKeyPath(this.getClass().getResource("test/keys/application_key").getPath()) .build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(JWTAuthMethod.class).apply(requestBuilder); assertEquals(1, requestBuilder.getHeaders("Authorization").length); assertEquals("Bearer ", requestBuilder.getFirstHeader("Authorization").getValue().substring(0, 7)); }
@Test public void testApplicationIdWithCertContentsAsString() throws Exception { TestUtils testUtils = new TestUtils(); String key = Strings.fromByteArray(testUtils.loadKey("test/keys/application_key")); NexmoClient nexmoClient = new NexmoClient.Builder().applicationId("app-id").privateKeyContents(key).build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(JWTAuthMethod.class).apply(requestBuilder); assertEquals(1, requestBuilder.getHeaders("Authorization").length); assertEquals("Bearer ", requestBuilder.getFirstHeader("Authorization").getValue().substring(0, 7)); }
@Test public void testApplicationIdWithCertContentsAsBytes() throws Exception { TestUtils testUtils = new TestUtils(); byte[] keyBytes = testUtils.loadKey("test/keys/application_key"); NexmoClient nexmoClient = new NexmoClient.Builder() .applicationId("app-id") .privateKeyContents(keyBytes) .build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(JWTAuthMethod.class).apply(requestBuilder); assertEquals(1, requestBuilder.getHeaders("Authorization").length); assertEquals("Bearer ", requestBuilder.getFirstHeader("Authorization").getValue().substring(0, 7)); }
@Test public void testApiKeyWithSecret() throws NexmoUnacceptableAuthException { NexmoClient nexmoClient = new NexmoClient.Builder().apiKey("api-key").apiSecret("api-secret").build(); AuthCollection authCollection = nexmoClient.getHttpWrapper().getAuthCollection(); RequestBuilder requestBuilder = RequestBuilder.get(); authCollection.getAuth(TokenAuthMethod.class).apply(requestBuilder); List<NameValuePair> parameters = requestBuilder.getParameters(); assertContainsParam(requestBuilder.getParameters(), "api_key", "api-key"); assertContainsParam(requestBuilder.getParameters(), "api_secret", "api-secret"); }