Search in sources :

Example 41 with Endpoint

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());
}
Also used : Response(io.restassured.response.Response) EndpointPage(com.redhat.cloud.notifications.routers.models.EndpointPage) Header(io.restassured.http.Header) Endpoint(com.redhat.cloud.notifications.models.Endpoint) Test(org.junit.jupiter.api.Test) QuarkusTest(io.quarkus.test.junit.QuarkusTest) DbIsolatedTest(com.redhat.cloud.notifications.db.DbIsolatedTest) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 42 with Endpoint

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()));
}
Also used : Response(io.restassured.response.Response) EndpointPage(com.redhat.cloud.notifications.routers.models.EndpointPage) Header(io.restassured.http.Header) Endpoint(com.redhat.cloud.notifications.models.Endpoint) WebhookProperties(com.redhat.cloud.notifications.models.WebhookProperties) CamelProperties(com.redhat.cloud.notifications.models.CamelProperties) JsonObject(io.vertx.core.json.JsonObject) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 43 with Endpoint

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));
}
Also used : RolesAllowed(javax.annotation.security.RolesAllowed) Produces(javax.ws.rs.Produces) Endpoint(com.redhat.cloud.notifications.models.Endpoint) Path(javax.ws.rs.Path) SecurityContext(javax.ws.rs.core.SecurityContext) NotificationHistory(com.redhat.cloud.notifications.models.NotificationHistory) Valid(javax.validation.Valid) Parameters(org.eclipse.microprofile.openapi.annotations.parameters.Parameters) QueryParam(javax.ws.rs.QueryParam) Consumes(javax.ws.rs.Consumes) SchemaType(org.eclipse.microprofile.openapi.annotations.enums.SchemaType) EndpointPage(com.redhat.cloud.notifications.routers.models.EndpointPage) Map(java.util.Map) JsonObject(io.vertx.core.json.JsonObject) BadRequestException(javax.ws.rs.BadRequestException) APPLICATION_JSON(javax.ws.rs.core.MediaType.APPLICATION_JSON) APIResponse(org.eclipse.microprofile.openapi.annotations.responses.APIResponse) DELETE(javax.ws.rs.DELETE) Application(com.redhat.cloud.notifications.models.Application) CamelProperties(com.redhat.cloud.notifications.models.CamelProperties) EndpointProperties(com.redhat.cloud.notifications.models.EndpointProperties) Context(javax.ws.rs.core.Context) Transactional(javax.transaction.Transactional) RbacGroupValidator(com.redhat.cloud.notifications.auth.rbac.RbacGroupValidator) Set(java.util.Set) InternalServerErrorException(javax.ws.rs.InternalServerErrorException) UUID(java.util.UUID) NotNull(javax.validation.constraints.NotNull) Collectors(java.util.stream.Collectors) BeanParam(javax.ws.rs.BeanParam) NotFoundException(javax.ws.rs.NotFoundException) RequestEmailSubscriptionProperties(com.redhat.cloud.notifications.routers.models.RequestEmailSubscriptionProperties) List(java.util.List) Response(javax.ws.rs.core.Response) EndpointType(com.redhat.cloud.notifications.models.EndpointType) ParameterIn(org.eclipse.microprofile.openapi.annotations.enums.ParameterIn) Parameter(org.eclipse.microprofile.openapi.annotations.parameters.Parameter) RhIdPrincipal(com.redhat.cloud.notifications.auth.principal.rhid.RhIdPrincipal) TEXT_PLAIN(javax.ws.rs.core.MediaType.TEXT_PLAIN) CompositeEndpointType(com.redhat.cloud.notifications.models.CompositeEndpointType) PathParam(javax.ws.rs.PathParam) EmailSubscriptionProperties(com.redhat.cloud.notifications.models.EmailSubscriptionProperties) GET(javax.ws.rs.GET) Logger(org.jboss.logging.Logger) Constants(com.redhat.cloud.notifications.Constants) EndpointRepository(com.redhat.cloud.notifications.db.repositories.EndpointRepository) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) BridgeAuth(com.redhat.cloud.notifications.openbridge.BridgeAuth) EmailSubscriptionRepository(com.redhat.cloud.notifications.db.repositories.EmailSubscriptionRepository) ConsoleIdentityProvider(com.redhat.cloud.notifications.auth.ConsoleIdentityProvider) Content(org.eclipse.microprofile.openapi.annotations.media.Content) EmailSubscriptionType(com.redhat.cloud.notifications.models.EmailSubscriptionType) ApplicationRepository(com.redhat.cloud.notifications.db.repositories.ApplicationRepository) Meta(com.redhat.cloud.notifications.routers.models.Meta) POST(javax.ws.rs.POST) RestClient(org.eclipse.microprofile.rest.client.inject.RestClient) Schema(org.eclipse.microprofile.openapi.annotations.media.Schema) Query(com.redhat.cloud.notifications.db.Query) BridgeApiService(com.redhat.cloud.notifications.openbridge.BridgeApiService) NotificationRepository(com.redhat.cloud.notifications.db.repositories.NotificationRepository) Bridge(com.redhat.cloud.notifications.openbridge.Bridge) MAX_NOTIFICATION_HISTORY_RESULTS(com.redhat.cloud.notifications.db.repositories.NotificationRepository.MAX_NOTIFICATION_HISTORY_RESULTS) PUT(javax.ws.rs.PUT) ConfigProperty(org.eclipse.microprofile.config.inject.ConfigProperty) CompositeEndpointType(com.redhat.cloud.notifications.models.CompositeEndpointType) EndpointPage(com.redhat.cloud.notifications.routers.models.EndpointPage) Meta(com.redhat.cloud.notifications.routers.models.Meta) Endpoint(com.redhat.cloud.notifications.models.Endpoint) RhIdPrincipal(com.redhat.cloud.notifications.auth.principal.rhid.RhIdPrincipal) BadRequestException(javax.ws.rs.BadRequestException) RolesAllowed(javax.annotation.security.RolesAllowed) Parameters(org.eclipse.microprofile.openapi.annotations.parameters.Parameters) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 44 with Endpoint

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();
}
Also used : Endpoint(com.redhat.cloud.notifications.models.Endpoint) RhIdPrincipal(com.redhat.cloud.notifications.auth.principal.rhid.RhIdPrincipal) EndpointType(com.redhat.cloud.notifications.models.EndpointType) CompositeEndpointType(com.redhat.cloud.notifications.models.CompositeEndpointType) CamelProperties(com.redhat.cloud.notifications.models.CamelProperties) EndpointProperties(com.redhat.cloud.notifications.models.EndpointProperties) BadRequestException(javax.ws.rs.BadRequestException) InternalServerErrorException(javax.ws.rs.InternalServerErrorException) NotFoundException(javax.ws.rs.NotFoundException) Path(javax.ws.rs.Path) DELETE(javax.ws.rs.DELETE) RolesAllowed(javax.annotation.security.RolesAllowed) APIResponse(org.eclipse.microprofile.openapi.annotations.responses.APIResponse) Transactional(javax.transaction.Transactional)

Example 45 with Endpoint

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);
}
Also used : Endpoint(com.redhat.cloud.notifications.models.Endpoint)

Aggregations

Endpoint (com.redhat.cloud.notifications.models.Endpoint)57 Test (org.junit.jupiter.api.Test)23 JsonObject (io.vertx.core.json.JsonObject)22 QuarkusTest (io.quarkus.test.junit.QuarkusTest)20 WebhookProperties (com.redhat.cloud.notifications.models.WebhookProperties)18 DbIsolatedTest (com.redhat.cloud.notifications.db.DbIsolatedTest)15 CamelProperties (com.redhat.cloud.notifications.models.CamelProperties)14 NotificationHistory (com.redhat.cloud.notifications.models.NotificationHistory)14 Header (io.restassured.http.Header)13 List (java.util.List)13 Transactional (javax.transaction.Transactional)13 Inject (javax.inject.Inject)12 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)12 EndpointType (com.redhat.cloud.notifications.models.EndpointType)10 Collectors (java.util.stream.Collectors)10 EmailSubscriptionProperties (com.redhat.cloud.notifications.models.EmailSubscriptionProperties)9 Event (com.redhat.cloud.notifications.models.Event)9 Response (io.restassured.response.Response)9 Map (java.util.Map)9 UUID (java.util.UUID)9