use of com.redhat.cloud.notifications.models.Endpoint in project notifications-backend by RedHatInsights.
the class EndpointResourceTest method testEndpointLimiter.
@Test
void testEndpointLimiter() {
String tenant = "limiter";
String orgId = "limiter2";
String userName = "user";
String identityHeaderValue = TestHelpers.encodeRHIdentityInfo(tenant, orgId, userName);
Header identityHeader = TestHelpers.createRHIdentityHeader(identityHeaderValue);
MockServerConfig.addMockRbacAccess(identityHeaderValue, MockServerConfig.RbacAccess.FULL_ACCESS);
addEndpoints(29, identityHeader);
// Fetch the list, page 1
Response response = given().header(identityHeader).queryParam("limit", "10").queryParam("offset", "0").when().get("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
EndpointPage endpointPage = Json.decodeValue(response.getBody().asString(), EndpointPage.class);
List<Endpoint> endpoints = endpointPage.getData();
assertEquals(10, endpoints.size());
assertEquals(29, endpointPage.getMeta().getCount());
// Fetch the list, page 3
response = given().header(identityHeader).queryParam("limit", "10").queryParam("pageNumber", "2").when().get("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
endpointPage = Json.decodeValue(response.getBody().asString(), EndpointPage.class);
endpoints = endpointPage.getData();
assertEquals(9, endpoints.size());
assertEquals(29, endpointPage.getMeta().getCount());
}
use of com.redhat.cloud.notifications.models.Endpoint in project notifications-backend by RedHatInsights.
the class EndpointResourceTest method testEndpointTypeQuery.
@ParameterizedTest
@MethodSource
void testEndpointTypeQuery(Set<EndpointType> types) {
String tenant = "limiter";
String orgId = "limiter2";
String userName = "user";
String identityHeaderValue = TestHelpers.encodeRHIdentityInfo(tenant, orgId, userName);
Header identityHeader = TestHelpers.createRHIdentityHeader(identityHeaderValue);
MockServerConfig.addMockRbacAccess(identityHeaderValue, MockServerConfig.RbacAccess.FULL_ACCESS);
// Add webhook
WebhookProperties properties = new WebhookProperties();
properties.setMethod(HttpType.POST);
properties.setDisableSslVerification(false);
properties.setSecretToken("my-super-secret-token");
properties.setUrl(getMockServerUrl());
Endpoint ep = new Endpoint();
ep.setType(EndpointType.WEBHOOK);
ep.setName("endpoint to find");
ep.setDescription("needle in the haystack");
ep.setEnabled(true);
ep.setProperties(properties);
Response response = given().header(identityHeader).when().contentType(JSON).body(Json.encode(ep)).post("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
JsonObject responsePoint = new JsonObject(response.getBody().asString());
responsePoint.mapTo(Endpoint.class);
assertNotNull(responsePoint.getString("id"));
// Add Camel
CamelProperties camelProperties = new CamelProperties();
camelProperties.setDisableSslVerification(false);
camelProperties.setSecretToken("my-super-secret-token");
camelProperties.setUrl(getMockServerUrl());
camelProperties.setExtras(new HashMap<>());
Endpoint camelEp = new Endpoint();
camelEp.setType(EndpointType.CAMEL);
camelEp.setSubType("demo");
camelEp.setName("endpoint to find");
camelEp.setDescription("needle in the haystack");
camelEp.setEnabled(true);
camelEp.setProperties(camelProperties);
response = given().header(identityHeader).when().contentType(JSON).body(Json.encode(camelEp)).post("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
responsePoint = new JsonObject(response.getBody().asString());
responsePoint.mapTo(Endpoint.class);
assertNotNull(responsePoint.getString("id"));
// Fetch the list to ensure everything was inserted correctly.
response = given().header(identityHeader).when().get("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
EndpointPage endpointPage = Json.decodeValue(response.getBody().asString(), EndpointPage.class);
List<Endpoint> endpoints = endpointPage.getData();
assertEquals(2, endpoints.size());
// Fetch the list with types
response = given().header(identityHeader).queryParam("type", types).when().get("/endpoints").then().statusCode(200).contentType(JSON).extract().response();
endpointPage = Json.decodeValue(response.getBody().asString(), EndpointPage.class);
endpoints = endpointPage.getData();
// Ensure there is only the requested types
assertEquals(types, endpoints.stream().map(Endpoint::getType).collect(Collectors.toSet()));
}
use of com.redhat.cloud.notifications.models.Endpoint in project notifications-backend by RedHatInsights.
the class EndpointResource method getEndpoints.
@GET
@Produces(APPLICATION_JSON)
@RolesAllowed(ConsoleIdentityProvider.RBAC_READ_INTEGRATIONS_ENDPOINTS)
@Parameters({ @Parameter(name = "limit", in = ParameterIn.QUERY, description = "Number of items per page. If the value is 0, it will return all elements", schema = @Schema(type = SchemaType.INTEGER)), @Parameter(name = "pageNumber", in = ParameterIn.QUERY, description = "Page number. Starts at first page (0), if not specified starts at first page.", schema = @Schema(type = SchemaType.INTEGER)) })
public EndpointPage getEndpoints(@Context SecurityContext sec, @BeanParam Query query, @QueryParam("type") List<String> targetType, @QueryParam("active") Boolean activeOnly, @QueryParam("name") String name) {
RhIdPrincipal principal = (RhIdPrincipal) sec.getUserPrincipal();
List<Endpoint> endpoints;
Long count;
if (targetType != null && targetType.size() > 0) {
Set<CompositeEndpointType> compositeType = targetType.stream().map(s -> {
try {
return CompositeEndpointType.fromString(s);
} catch (IllegalArgumentException e) {
throw new BadRequestException("Unknown endpoint type: [" + s + "]", e);
}
}).collect(Collectors.toSet());
endpoints = endpointRepository.getEndpointsPerCompositeType(principal.getAccount(), name, compositeType, activeOnly, query);
count = endpointRepository.getEndpointsCountPerCompositeType(principal.getAccount(), name, compositeType, activeOnly);
} else {
endpoints = endpointRepository.getEndpoints(principal.getAccount(), name, query);
count = endpointRepository.getEndpointsCount(principal.getAccount(), name);
}
return new EndpointPage(endpoints, new HashMap<>(), new Meta(count));
}
use of com.redhat.cloud.notifications.models.Endpoint in project notifications-backend by RedHatInsights.
the class EndpointResource method deleteEndpoint.
@DELETE
@Path("/{id}")
@RolesAllowed(ConsoleIdentityProvider.RBAC_WRITE_INTEGRATIONS_ENDPOINTS)
@APIResponse(responseCode = "204", description = "The integration has been deleted", content = @Content(schema = @Schema(type = SchemaType.STRING)))
@Transactional
public Response deleteEndpoint(@Context SecurityContext sec, @PathParam("id") UUID id) {
RhIdPrincipal principal = (RhIdPrincipal) sec.getUserPrincipal();
EndpointType endpointType = endpointRepository.getEndpointTypeById(principal.getAccount(), id);
checkSystemEndpoint(endpointType);
if (obEnabled) {
Endpoint e = endpointRepository.getEndpoint(principal.getAccount(), id);
if (e != null) {
EndpointProperties properties = e.getProperties();
if (properties instanceof CamelProperties) {
CamelProperties cp = (CamelProperties) properties;
// Special case wrt OpenBridge
if (e.getSubType().equals("slack")) {
String processorId = cp.getExtras().get(OB_PROCESSOR_ID);
if (processorId != null) {
// Should not be null under normal operations.
try {
bridgeApiService.deleteProcessor(bridge.getId(), processorId, bridgeAuth.getToken());
} catch (Exception ex) {
LOGGER.warn("Removal of OB processor failed:" + ex.getMessage());
// Nothing more we can do
}
} else {
LOGGER.warn("ProcessorId was null for endpoint " + id.toString());
}
}
}
}
}
endpointRepository.deleteEndpoint(principal.getAccount(), id);
return Response.noContent().build();
}
use of com.redhat.cloud.notifications.models.Endpoint in project notifications-backend by RedHatInsights.
the class ResourceHelpers method createEndpoint.
public Endpoint createEndpoint(String accountId, EndpointType type, String subType, String name, String description, EndpointProperties properties, Boolean enabled) {
Endpoint endpoint = new Endpoint();
endpoint.setAccountId(accountId);
endpoint.setType(type);
endpoint.setSubType(subType);
endpoint.setName(name);
endpoint.setDescription(description);
endpoint.setProperties(properties);
endpoint.setEnabled(enabled);
return endpointRepository.createEndpoint(endpoint);
}
Aggregations