use of org.eclipse.hono.auth.Device in project hono by eclipse.
the class SigfoxProtocolAdapter method dataHandler.
private void dataHandler(final HttpContext ctx, final UploadHandler uploadHandler) {
if (!ctx.isDeviceAuthenticated()) {
LOG.warn("Not a device");
return;
}
final Device gatewayDevice = ctx.getAuthenticatedDevice();
final String deviceTenant = gatewayDevice.getTenantId();
final String requestTenant = ctx.getRoutingContext().pathParam(SIGFOX_PARAM_TENANT);
final String deviceId = ctx.getRoutingContext().queryParams().get(SIGFOX_PARAM_DEVICE_ID);
final String strData = ctx.getRoutingContext().queryParams().get(SIGFOX_PARAM_DATA);
final Buffer data = decodeData(strData);
LOG.debug("{} handler - deviceTenant: {}, requestTenant: {}, deviceId: {}, data: {}", ctx.request().method(), deviceTenant, requestTenant, deviceId, strData);
if (requestTenant == null) {
ctx.fail(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST, "missing the tenant information in the request URL"));
return;
}
if (!requestTenant.equals(deviceTenant)) {
ctx.fail(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST, "tenant information mismatch"));
return;
}
final String contentType = (data != null) ? CONTENT_TYPE_OCTET_STREAM : EventConstants.CONTENT_TYPE_EMPTY_NOTIFICATION;
uploadHandler.upload(ctx, deviceTenant, deviceId, data, contentType);
}
use of org.eclipse.hono.auth.Device in project hono by eclipse.
the class VertxBasedMqttProtocolAdapterTest method testOnPublishedAuthenticatedMessageFailsForNonMatchingTenant.
/**
* Verifies that the adapter rejects a message published by a gateway whose tenant
* does not match the tenant specified in the topic.
*
* @param ctx The helper to use for running tests on vert.x.
*/
@Test
public void testOnPublishedAuthenticatedMessageFailsForNonMatchingTenant(final VertxTestContext ctx) {
givenAnAdapter();
// WHEN an authenticated gateway publishes a message to a topic that does not match the gateway's tenant
final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/other-tenant/4711", span, new Device("my-tenant", "gateway"));
adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
// THEN the message cannot be published
assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_FORBIDDEN);
ctx.completeNow();
}));
}
use of org.eclipse.hono.auth.Device in project hono by eclipse.
the class VertxBasedMqttProtocolAdapterTest method testOnPublishedMessageFailsForMissingDeviceId.
/**
* Verifies that the adapter fails to map a topic without a device ID received from an anonymous device.
*
* @param ctx The helper to use for running tests on vert.x.
*/
@Test
public void testOnPublishedMessageFailsForMissingDeviceId(final VertxTestContext ctx) {
givenAnAdapter();
// WHEN an anonymous device publishes a message to a topic that does not contain a device ID
final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/my-tenant", span);
adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
// THEN the message cannot be published
assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
ctx.completeNow();
}));
}
use of org.eclipse.hono.auth.Device in project hono by eclipse.
the class VertxBasedMqttProtocolAdapterTest method testMapTopicFailsForQoS2EventMessage.
/**
* Verifies that the adapter rejects QoS 2 messages published to the <em>event</em> endpoint.
*
* @param ctx The helper to use for running tests on vert.x.
*/
@Test
public void testMapTopicFailsForQoS2EventMessage(final VertxTestContext ctx) {
givenAnAdapter();
// WHEN a device publishes a message with QoS 2 to an "event" topic
final MqttPublishMessage message = newMessage(MqttQoS.EXACTLY_ONCE, EventConstants.EVENT_ENDPOINT);
adapter.mapTopic(newContext(message, span, null)).onComplete(ctx.failing(t -> {
// THEN the message cannot be mapped to a topic
assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
ctx.completeNow();
}));
}
use of org.eclipse.hono.auth.Device in project hono by eclipse.
the class VertxBasedMqttProtocolAdapterTest method testOnPublishedAuthenticatedMessageFailsForMissingDeviceId.
/**
* Verifies that the adapter fails to map a topic without a device ID received from an authenticated device.
*
* @param ctx The helper to use for running tests on vert.x.
*/
@Test
public void testOnPublishedAuthenticatedMessageFailsForMissingDeviceId(final VertxTestContext ctx) {
givenAnAdapter();
// WHEN an authenticated device publishes a message to a topic that does not contain a device ID
final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/my-tenant", span, new Device("my-tenant", "device"));
adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
// THEN the message cannot be published
assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
ctx.completeNow();
}));
}
Aggregations