private Future<EventBusMessage> processGetByAuthIdRequest(final EventBusMessage request, final String tenantId, final JsonObject payload, final String type, final String authId, final Span span) { log.debug("getting credentials [tenant: {}, type: {}, auth-id: {}]", tenantId, type, authId); span.setTag(TAG_CREDENTIALS_TYPE, type); span.setTag(TAG_AUTH_ID, authId); final Future<CredentialsResult<JsonObject>> result = Future.future(); get(tenantId, type, authId, payload, span, result.completer()); return result.map(res -> { final String deviceIdFromPayload = Optional.ofNullable(res.getPayload()) .map(p -> getTypesafeValueForField(String.class, p, TenantConstants.FIELD_PAYLOAD_DEVICE_ID)) .orElse(null); if (deviceIdFromPayload != null) { span.setTag(MessageHelper.APP_PROPERTY_DEVICE_ID, deviceIdFromPayload); } return request.getResponse(res.getStatus()) .setDeviceId(deviceIdFromPayload) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); }); }
/** * Invokes the <em>Get Credentials</em> operation of Hono's * <a href="https://www.eclipse.org/hono/api/Credentials-API">Credentials API</a> * on the service represented by the <em>sender</em> and <em>receiver</em> links. */ @Override public final Future<CredentialsObject> get(final String type, final String authId, final JsonObject clientContext) { Objects.requireNonNull(type); Objects.requireNonNull(authId); final Future<CredentialsResult<CredentialsObject>> responseTracker = Future.future(); final JsonObject specification = new JsonObject() .put(CredentialsConstants.FIELD_TYPE, type) .put(CredentialsConstants.FIELD_AUTH_ID, authId) .mergeIn(clientContext); createAndSendRequest(CredentialsConstants.CredentialsAction.get.toString(), specification.toBuffer(), responseTracker.completer()); return responseTracker.map(response -> { switch(response.getStatus()) { case HttpURLConnection.HTTP_OK: return response.getPayload(); case HttpURLConnection.HTTP_NOT_FOUND: throw new ClientErrorException(response.getStatus(), "no such credentials"); default: throw StatusCodeMapper.from(response); } }); } }
/** * Verifies that service returns existing credentials for proper client context. * * @param ctx The vert.x test context. */ @Test public void testGetCredentialsSucceedsForProperClientContext(final TestContext ctx) { final JsonObject clientContext = new JsonObject() .put("client-id", "gateway-one"); register(getCompleteCredentialsService(), "tenant", "device", "myId", "myType", clientContext, new JsonArray(), ctx); final Async get = ctx.async(); getCompleteCredentialsService().get("tenant", "myType", "myId", clientContext, ctx.asyncAssertSuccess(s -> { assertThat(s.getStatus(), is(HttpURLConnection.HTTP_OK)); assertThat(s.getPayload().getString(CredentialsConstants.FIELD_AUTH_ID), is("myId")); assertThat(s.getPayload().getString(CredentialsConstants.FIELD_TYPE), is("myType")); get.complete(); })); get.await(2000); }
get(tenantId, type, authId, payload, result.completer()); return result.map(res -> { final String deviceIdFromPayload = Optional.ofNullable(res.getPayload()) .map(p -> getTypesafeValueForField(String.class, p, TenantConstants.FIELD_PAYLOAD_DEVICE_ID)) return request.getResponse(res.getStatus()) .setDeviceId(deviceIdFromPayload) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); }); return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); });
/** * Verifies that the service returns existing credentials. * * @param ctx The vert.x test context. */ @Test public void testGetCredentialsSucceedsForExistingCredentials(final TestContext ctx) { register(getCompleteCredentialsService(), "tenant", "device", "myId", "myType", ctx); final Async get = ctx.async(); getCompleteCredentialsService().get("tenant", "myType", "myId", ctx.asyncAssertSuccess(s -> { assertThat(s.getStatus(), is(HttpURLConnection.HTTP_OK)); assertThat(s.getPayload().getString(CredentialsConstants.FIELD_AUTH_ID), is("myId")); assertThat(s.getPayload().getString(CredentialsConstants.FIELD_TYPE), is("myType")); get.complete(); })); get.await(); }
private Future<EventBusMessage> processGetByDeviceIdRequest(final EventBusMessage request, final String tenantId, final String type, final String deviceId, final Span span) { log.debug("getting credentials for device [tenant: {}, device-id: {}]", tenantId, deviceId); span.setTag(TAG_CREDENTIALS_TYPE, type); span.setTag(MessageHelper.APP_PROPERTY_DEVICE_ID, deviceId); final Future<CredentialsResult<JsonObject>> result = Future.future(); getAll(tenantId, deviceId, span, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); }); }