Future<EventBusMessage> processGetRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final JsonObject payload = request.getJsonPayload(); if (tenantId == null && payload == null) { log.debug("request does not contain any query parameters"); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else if (tenantId != null) { // deprecated API log.debug("retrieving tenant [{}] using deprecated variant of get tenant request", tenantId); return processGetByIdRequest(request, tenantId); } else { final String tenantIdFromPayload = getTypesafeValueForField(String.class, payload, TenantConstants.FIELD_PAYLOAD_TENANT_ID); final String subjectDn = getTypesafeValueForField(String.class, payload, TenantConstants.FIELD_PAYLOAD_SUBJECT_DN); if (tenantIdFromPayload == null && subjectDn == null) { log.debug("payload does not contain any query parameters"); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else if (tenantIdFromPayload != null) { log.debug("retrieving tenant [id: {}]", tenantIdFromPayload); return processGetByIdRequest(request, tenantIdFromPayload); } else { return processGetByCaRequest(request, subjectDn); } } }
final String tenantIdFromPayload = getTypesafeValueForField(String.class, payload, TenantConstants.FIELD_PAYLOAD_TENANT_ID); final String subjectDn = getTypesafeValueForField(String.class, payload, TenantConstants.FIELD_PAYLOAD_SUBJECT_DN);
private Future<EventBusMessage> processGetByCaRequest(final EventBusMessage request, final String subjectDn) { try { final X500Principal dn = new X500Principal(subjectDn); log.debug("retrieving tenant [subject DN: {}]", subjectDn); final Future<TenantResult<JsonObject>> getResult = Future.future(); get(dn, getResult.completer()); return getResult.map(tr -> { final EventBusMessage response = request.getResponse(tr.getStatus()) .setJsonPayload(tr.getPayload()) .setCacheDirective(tr.getCacheDirective()); if (tr.isOk() && tr.getPayload() != null) { response.setTenant(getTypesafeValueForField(String.class, tr.getPayload(), TenantConstants.FIELD_PAYLOAD_TENANT_ID)); } return response; }); } catch (final IllegalArgumentException e) { // the given subject DN is invalid log.debug("cannot parse subject DN [{}] provided by client", subjectDn); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } }
private Future<EventBusMessage> processGetByCaRequest(final EventBusMessage request, final String subjectDn, final Span span) { try { final X500Principal dn = new X500Principal(subjectDn); log.debug("retrieving tenant [subject DN: {}]", subjectDn); final Future<TenantResult<JsonObject>> getResult = Future.future(); get(dn, span, getResult.completer()); return getResult.map(tr -> { final EventBusMessage response = request.getResponse(tr.getStatus()) .setJsonPayload(tr.getPayload()) .setCacheDirective(tr.getCacheDirective()); if (tr.isOk() && tr.getPayload() != null) { final String tenantId = getTypesafeValueForField(String.class, tr.getPayload(), TenantConstants.FIELD_PAYLOAD_TENANT_ID); span.setTag(MessageHelper.APP_PROPERTY_TENANT_ID, tenantId); response.setTenant(tenantId); } return response; }); } catch (final IllegalArgumentException e) { TracingHelper.logError(span, "illegal subject DN provided by client: " + subjectDn); // the given subject DN is invalid log.debug("cannot parse subject DN [{}] provided by client", subjectDn); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } }