Search in sources :

Example 21 with Topic

use of org.wso2.carbon.apimgt.api.model.webhooks.Topic in project carbon-apimgt by wso2.

the class KeyManagerJMSMessageListener method onMessage.

public void onMessage(Message message) {
    try {
        if (message != null) {
            if (log.isDebugEnabled()) {
                log.debug("Event received in JMS Event Receiver - " + message);
            }
            Topic jmsDestination = (Topic) message.getJMSDestination();
            if (message instanceof TextMessage) {
                String textMessage = ((TextMessage) message).getText();
                JsonNode payloadData = new ObjectMapper().readTree(textMessage).path(APIConstants.EVENT_PAYLOAD).path(APIConstants.EVENT_PAYLOAD_DATA);
                if (JMSConstants.TOPIC_KEY_MANAGER.equalsIgnoreCase(jmsDestination.getTopicName())) {
                    if (APIConstants.KeyManager.KeyManagerEvent.KEY_MANAGER_CONFIGURATION.equals(payloadData.get(APIConstants.KeyManager.KeyManagerEvent.EVENT_TYPE).asText())) {
                        String name = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.NAME).asText();
                        String organization = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.ORGANIZATION).asText();
                        String action = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.ACTION).asText();
                        String type = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.TYPE).asText();
                        String tokenType = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.TOKEN_TYPE).asText();
                        boolean enabled = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.ENABLED).asBoolean();
                        String value = payloadData.get(APIConstants.KeyManager.KeyManagerEvent.VALUE).asText();
                        if (StringUtils.isNotEmpty(value)) {
                            KeyManagerConfiguration keyManagerConfiguration = APIUtil.toKeyManagerConfiguration(value);
                            keyManagerConfiguration.setTokenType(KeyManagerConfiguration.TokenType.valueOf(tokenType.toUpperCase()));
                            keyManagerConfiguration.setEnabled(enabled);
                            keyManagerConfiguration.setName(name);
                            keyManagerConfiguration.setType(type);
                            keyManagerConfiguration.setTenantDomain(organization);
                            if (APIConstants.KeyManager.KeyManagerEvent.ACTION_ADD.equals(action)) {
                                ServiceReferenceHolder.getInstance().getKeyManagerService().addKeyManagerConfiguration(organization, name, type, keyManagerConfiguration);
                            }
                            if (APIConstants.KeyManager.KeyManagerEvent.ACTION_UPDATE.equals(action)) {
                                ServiceReferenceHolder.getInstance().getKeyManagerService().updateKeyManagerConfiguration(organization, name, type, keyManagerConfiguration);
                            }
                        }
                        if (APIConstants.KeyManager.KeyManagerEvent.ACTION_DELETE.equals(action)) {
                            ServiceReferenceHolder.getInstance().getKeyManagerService().removeKeyManagerConfiguration(organization, name);
                        }
                    }
                }
            } else {
                log.warn("Event dropped due to unsupported message type " + message.getClass());
            }
        } else {
            log.warn("Dropping the empty/null event received through jms receiver");
        }
    } catch (JMSException | JsonProcessingException e) {
        log.error("JMSException occurred when processing the received message ", e);
    } catch (APIManagementException e) {
        log.error("Error occurred while registering Key Manager", e);
    }
}
Also used : APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) JsonNode(com.fasterxml.jackson.databind.JsonNode) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) KeyManagerConfiguration(org.wso2.carbon.apimgt.api.model.KeyManagerConfiguration)

Example 22 with Topic

use of org.wso2.carbon.apimgt.api.model.webhooks.Topic in project carbon-apimgt by wso2.

the class TemplateBuilderUtil method addGqlWebSocketTopicMappings.

/**
 * This method is used to add websocket topic mappings for GraphQL subscription. Here both production and sandbox
 * endpoint urls are added under single wild card resource.
 *
 * @param api GraphQL API
 */
public static void addGqlWebSocketTopicMappings(API api) {
    org.json.JSONObject endpointConfiguration = new org.json.JSONObject(api.getEndpointConfig()).getJSONObject(APIConstants.WS_PROTOCOL);
    String sandboxEndpointUrl = !endpointConfiguration.isNull(APIConstants.API_DATA_SANDBOX_ENDPOINTS) ? endpointConfiguration.getJSONObject(APIConstants.API_DATA_SANDBOX_ENDPOINTS).getString(APIConstants.ENDPOINT_URL) : null;
    String productionEndpointUrl = !endpointConfiguration.isNull(APIConstants.API_DATA_PRODUCTION_ENDPOINTS) ? endpointConfiguration.getJSONObject(APIConstants.API_DATA_PRODUCTION_ENDPOINTS).getString(APIConstants.ENDPOINT_URL) : null;
    Map<String, String> endpoints = new HashMap<>();
    if (sandboxEndpointUrl != null) {
        endpoints.put(APIConstants.GATEWAY_ENV_TYPE_SANDBOX, sandboxEndpointUrl);
    }
    if (productionEndpointUrl != null) {
        endpoints.put(APIConstants.GATEWAY_ENV_TYPE_PRODUCTION, productionEndpointUrl);
    }
    Map<String, Map<String, String>> perTopicMappings = new HashMap<>();
    perTopicMappings.put("/*", endpoints);
    api.setWebSocketTopicMappingConfiguration(new WebSocketTopicMappingConfiguration(perTopicMappings));
    addWebsocketTopicResourceKeys(api);
}
Also used : HashMap(java.util.HashMap) WebSocketTopicMappingConfiguration(org.wso2.carbon.apimgt.api.model.WebSocketTopicMappingConfiguration) Map(java.util.Map) HashMap(java.util.HashMap)

Example 23 with Topic

use of org.wso2.carbon.apimgt.api.model.webhooks.Topic in project carbon-apimgt by wso2.

the class SolaceStoreUtils method populateSolaceTopics.

/**
 * Populate Solace Topics from the response body
 *
 * @param solaceTopicsObjectDTO Solace Topic Object DTO
 * @param permissionsObject Json Object of the body
 * @param syntax      Protocol Syntax
 */
private static void populateSolaceTopics(SolaceTopicsObjectDTO solaceTopicsObjectDTO, org.json.JSONObject permissionsObject, String syntax) {
    SolaceTopicsDTO topicsDTO = new SolaceTopicsDTO();
    if (permissionsObject.getJSONArray("publish") != null) {
        List<String> publishTopics = new ArrayList<>();
        for (int j = 0; j < permissionsObject.getJSONArray("publish").length(); j++) {
            org.json.JSONObject channelObject = permissionsObject.getJSONArray("publish").getJSONObject(j);
            for (Object x : channelObject.keySet()) {
                org.json.JSONObject channel = channelObject.getJSONObject(x.toString());
                JSONArray channelPermissions = channel.getJSONArray("permissions");
                for (int k = 0; k < channelPermissions.length(); k++) {
                    if (!publishTopics.contains(channelPermissions.getString(k))) {
                        publishTopics.add(channelPermissions.getString(k));
                    }
                }
            }
        }
        topicsDTO.setPublishTopics(publishTopics);
    }
    if (permissionsObject.getJSONArray("subscribe") != null) {
        List<String> subscribeTopics = new ArrayList<>();
        for (int j = 0; j < permissionsObject.getJSONArray("subscribe").length(); j++) {
            org.json.JSONObject channelObject = permissionsObject.getJSONArray("subscribe").getJSONObject(j);
            for (Object x : channelObject.keySet()) {
                org.json.JSONObject channel = channelObject.getJSONObject(x.toString());
                JSONArray channelPermissions = channel.getJSONArray("permissions");
                for (int k = 0; k < channelPermissions.length(); k++) {
                    if (!subscribeTopics.contains(channelPermissions.getString(k))) {
                        subscribeTopics.add(channelPermissions.getString(k));
                    }
                }
            }
        }
        topicsDTO.setSubscribeTopics(subscribeTopics);
    }
    if (SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.equalsIgnoreCase(syntax)) {
        solaceTopicsObjectDTO.setMqttSyntax(topicsDTO);
    } else {
        solaceTopicsObjectDTO.setDefaultSyntax(topicsDTO);
    }
}
Also used : ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) SolaceTopicsDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceTopicsDTO)

Example 24 with Topic

use of org.wso2.carbon.apimgt.api.model.webhooks.Topic in project carbon-apimgt by wso2.

the class SolaceStoreUtils method getSolaceDeployedEnvsInfo.

/**
 * Get SolaceDeployedEnvironmentDTO using admin APIs and map into DTOs to parse Devportal
 *
 * @param solaceEnvironment Solace environment Object
 * @param solaceOrganization Solace broker organization name
 * @param applicationUuid      Subscribed Application UUID
 * @return List of SolaceDeployedEnvironmentDTO to use in Devportal
 * @throws APIManagementException if error occurred when creating SolaceDeployedEnvironmentDTO
 */
public static List<SolaceDeployedEnvironmentDTO> getSolaceDeployedEnvsInfo(Environment solaceEnvironment, String solaceOrganization, String applicationUuid) throws APIManagementException {
    Map<String, Environment> gatewayEnvironmentMap = APIUtil.getReadOnlyGatewayEnvironments();
    // Create solace admin APIs instance
    SolaceAdminApis solaceAdminApis = new SolaceAdminApis(solaceEnvironment.getServerURL(), solaceEnvironment.getUserName(), solaceEnvironment.getPassword(), solaceEnvironment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_DEV_NAME));
    HttpResponse response = solaceAdminApis.applicationGet(solaceOrganization, applicationUuid, "default");
    List<SolaceDeployedEnvironmentDTO> solaceEnvironments = new ArrayList<>();
    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        try {
            String responseString = EntityUtils.toString(response.getEntity());
            org.json.JSONObject jsonObject = new org.json.JSONObject(responseString);
            // Get solace environments attached with the Solace application
            if (jsonObject.getJSONArray("environments") != null) {
                JSONArray environmentsArray = jsonObject.getJSONArray("environments");
                for (int i = 0; i < environmentsArray.length(); i++) {
                    SolaceDeployedEnvironmentDTO solaceDeployedEnvironmentsDTO = new SolaceDeployedEnvironmentDTO();
                    org.json.JSONObject environmentObject = environmentsArray.getJSONObject(i);
                    // Get details of Solace environment attached to the solace application
                    if (environmentObject.getString("name") != null) {
                        String environmentName = environmentObject.getString("name");
                        Environment gatewayEnvironment = gatewayEnvironmentMap.get(environmentName);
                        if (gatewayEnvironment != null) {
                            // Set Solace environment details
                            solaceDeployedEnvironmentsDTO.setEnvironmentName(gatewayEnvironment.getName());
                            solaceDeployedEnvironmentsDTO.setEnvironmentDisplayName(gatewayEnvironment.getDisplayName());
                            solaceDeployedEnvironmentsDTO.setOrganizationName(gatewayEnvironment.getAdditionalProperties().get(SolaceConstants.SOLACE_ENVIRONMENT_ORGANIZATION));
                            boolean containsMQTTProtocol = false;
                            // Get messaging protocols from the response body
                            if (environmentObject.getJSONArray("messagingProtocols") != null) {
                                List<SolaceURLsDTO> endpointUrls = new ArrayList<>();
                                JSONArray protocolsArray = environmentObject.getJSONArray("messagingProtocols");
                                for (int j = 0; j < protocolsArray.length(); j++) {
                                    SolaceURLsDTO solaceURLsDTO = new SolaceURLsDTO();
                                    String protocol = protocolsArray.getJSONObject(j).getJSONObject("protocol").getString("name");
                                    if (SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.equalsIgnoreCase(protocol)) {
                                        containsMQTTProtocol = true;
                                    }
                                    String uri = protocolsArray.getJSONObject(j).getString("uri");
                                    solaceURLsDTO.setProtocol(protocol);
                                    solaceURLsDTO.setEndpointURL(uri);
                                    endpointUrls.add(solaceURLsDTO);
                                }
                                solaceDeployedEnvironmentsDTO.setSolaceURLs(endpointUrls);
                            }
                            // Get topic permissions from the solace application response body
                            if (environmentObject.getJSONObject("permissions") != null) {
                                org.json.JSONObject permissionsObject = environmentObject.getJSONObject("permissions");
                                SolaceTopicsObjectDTO solaceTopicsObjectDTO = new SolaceTopicsObjectDTO();
                                populateSolaceTopics(solaceTopicsObjectDTO, permissionsObject, "default");
                                // Handle the special case of MQTT protocol
                                if (containsMQTTProtocol) {
                                    HttpResponse responseForMqtt = solaceAdminApis.applicationGet(solaceOrganization, applicationUuid, SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.toUpperCase());
                                    org.json.JSONObject permissionsObjectForMqtt = extractPermissionsFromSolaceApplicationGetResponse(responseForMqtt, i, gatewayEnvironmentMap);
                                    if (permissionsObjectForMqtt != null) {
                                        populateSolaceTopics(solaceTopicsObjectDTO, permissionsObjectForMqtt, SolaceConstants.MQTT_TRANSPORT_PROTOCOL_NAME.toUpperCase());
                                    }
                                }
                                solaceDeployedEnvironmentsDTO.setSolaceTopicsObject(solaceTopicsObjectDTO);
                            }
                        }
                    }
                    solaceEnvironments.add(solaceDeployedEnvironmentsDTO);
                }
            }
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        return solaceEnvironments;
    } else {
        throw new APIManagementException("Solace Environment configurations are not provided properly");
    }
}
Also used : ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) HttpResponse(org.apache.http.HttpResponse) SolaceURLsDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceURLsDTO) IOException(java.io.IOException) SolaceTopicsObjectDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceTopicsObjectDTO) SolaceAdminApis(org.wso2.carbon.apimgt.solace.SolaceAdminApis) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) Environment(org.wso2.carbon.apimgt.api.model.Environment) SolaceDeployedEnvironmentDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceDeployedEnvironmentDTO)

Example 25 with Topic

use of org.wso2.carbon.apimgt.api.model.webhooks.Topic in project carbon-apimgt by wso2.

the class AdditionalSubscriptionInfoMappingUtil method fromAdditionalSubscriptionInfoToDTO.

/**
 * Converts a AdditionalSubscriptionInfo object into AdditionalSubscriptionInfoDTO
 *
 * @param subscription SubscribedAPI object
 * @param organization Identifier of the organization
 * @return SubscriptionDTO corresponds to SubscribedAPI object
 */
public static AdditionalSubscriptionInfoDTO fromAdditionalSubscriptionInfoToDTO(SubscribedAPI subscription, String organization) throws APIManagementException {
    String username = RestApiCommonUtil.getLoggedInUsername();
    APIConsumer apiConsumer = RestApiCommonUtil.getLoggedInUserConsumer();
    AdditionalSubscriptionInfoDTO additionalSubscriptionInfoDTO = new AdditionalSubscriptionInfoDTO();
    additionalSubscriptionInfoDTO.setSubscriptionId(subscription.getUUID());
    APIIdentifier apiId = subscription.getApiId();
    API api = null;
    if (apiId != null) {
        try {
            api = apiConsumer.getLightweightAPIByUUID(apiId.getUUID(), organization);
        } catch (APIManagementException e) {
            String msg = "User :" + username + " does not have access to the API " + apiId;
            RestApiUtil.handleInternalServerError(msg, e, log);
        }
    }
    additionalSubscriptionInfoDTO.setApiId(api.getUuid());
    // Set Application information
    Application application = subscription.getApplication();
    application = apiConsumer.getApplicationByUUID(application.getUUID());
    additionalSubscriptionInfoDTO.setApplicationId(subscription.getApplication().getUUID());
    additionalSubscriptionInfoDTO.setApplicationName(application.getName());
    additionalSubscriptionInfoDTO.setIsSolaceAPI(SolaceNotifierUtils.checkWhetherAPIDeployedToSolaceUsingRevision(api));
    if (additionalSubscriptionInfoDTO.isIsSolaceAPI()) {
        // Set Solace organization details if API is a Solace API
        additionalSubscriptionInfoDTO.setSolaceOrganization(SolaceNotifierUtils.getThirdPartySolaceBrokerOrganizationNameOfAPIDeployment(api));
        Map<String, Environment> gatewayEnvironmentMap = APIUtil.getReadOnlyGatewayEnvironments();
        Environment solaceEnvironment = null;
        for (Map.Entry<String, Environment> entry : gatewayEnvironmentMap.entrySet()) {
            if (SolaceConstants.SOLACE_ENVIRONMENT.equals(entry.getValue().getProvider())) {
                solaceEnvironment = entry.getValue();
            }
        }
        if (solaceEnvironment != null) {
            List<SolaceDeployedEnvironmentDTO> solaceDeployedEnvironmentsDTOS = SolaceStoreUtils.getSolaceDeployedEnvsInfo(solaceEnvironment, additionalSubscriptionInfoDTO.getSolaceOrganization(), application.getUUID());
            List<AdditionalSubscriptionInfoSolaceDeployedEnvironmentsDTO> solaceEnvironments = new ArrayList<>();
            for (SolaceDeployedEnvironmentDTO solaceDeployedEnvironmentEntry : solaceDeployedEnvironmentsDTOS) {
                // Set Solace environment details
                AdditionalSubscriptionInfoSolaceDeployedEnvironmentsDTO solaceDeployedEnvironmentsDTO = new AdditionalSubscriptionInfoSolaceDeployedEnvironmentsDTO();
                solaceDeployedEnvironmentsDTO.setEnvironmentName(solaceDeployedEnvironmentEntry.getEnvironmentName());
                solaceDeployedEnvironmentsDTO.setEnvironmentDisplayName(solaceDeployedEnvironmentEntry.getEnvironmentDisplayName());
                solaceDeployedEnvironmentsDTO.setOrganizationName(solaceDeployedEnvironmentEntry.getOrganizationName());
                // Set Solace URLs
                List<AdditionalSubscriptionInfoSolaceURLsDTO> endpointUrls = new ArrayList<>();
                List<SolaceURLsDTO> solaceURLsDTOS = solaceDeployedEnvironmentEntry.getSolaceURLs();
                for (SolaceURLsDTO entry : solaceURLsDTOS) {
                    AdditionalSubscriptionInfoSolaceURLsDTO solaceURLsDTO = new AdditionalSubscriptionInfoSolaceURLsDTO();
                    solaceURLsDTO.setProtocol(entry.getProtocol());
                    solaceURLsDTO.setEndpointURL(entry.getEndpointURL());
                    endpointUrls.add(solaceURLsDTO);
                }
                solaceDeployedEnvironmentsDTO.setSolaceURLs(endpointUrls);
                // Set Solace Topic Objects
                solaceDeployedEnvironmentsDTO.setSolaceTopicsObject(mapSolaceTopicObjects(solaceDeployedEnvironmentEntry.getSolaceTopicsObject()));
                solaceEnvironments.add(solaceDeployedEnvironmentsDTO);
            }
            additionalSubscriptionInfoDTO.setSolaceDeployedEnvironments(solaceEnvironments);
        }
    }
    return additionalSubscriptionInfoDTO;
}
Also used : AdditionalSubscriptionInfoSolaceDeployedEnvironmentsDTO(org.wso2.carbon.apimgt.rest.api.store.v1.dto.AdditionalSubscriptionInfoSolaceDeployedEnvironmentsDTO) ArrayList(java.util.ArrayList) AdditionalSubscriptionInfoSolaceURLsDTO(org.wso2.carbon.apimgt.rest.api.store.v1.dto.AdditionalSubscriptionInfoSolaceURLsDTO) SolaceURLsDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceURLsDTO) AdditionalSubscriptionInfoSolaceURLsDTO(org.wso2.carbon.apimgt.rest.api.store.v1.dto.AdditionalSubscriptionInfoSolaceURLsDTO) AdditionalSubscriptionInfoDTO(org.wso2.carbon.apimgt.rest.api.store.v1.dto.AdditionalSubscriptionInfoDTO) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) Environment(org.wso2.carbon.apimgt.api.model.Environment) APIIdentifier(org.wso2.carbon.apimgt.api.model.APIIdentifier) API(org.wso2.carbon.apimgt.api.model.API) SubscribedAPI(org.wso2.carbon.apimgt.api.model.SubscribedAPI) APIConsumer(org.wso2.carbon.apimgt.api.APIConsumer) Application(org.wso2.carbon.apimgt.api.model.Application) Map(java.util.Map) SolaceDeployedEnvironmentDTO(org.wso2.carbon.apimgt.solace.dtos.SolaceDeployedEnvironmentDTO)

Aggregations

Test (org.testng.annotations.Test)28 SiddhiAppRuntime (org.wso2.siddhi.core.SiddhiAppRuntime)25 SiddhiManager (org.wso2.siddhi.core.SiddhiManager)25 InMemoryBroker (org.wso2.siddhi.core.util.transport.InMemoryBroker)16 InputHandler (org.wso2.siddhi.core.stream.input.InputHandler)13 Event (org.wso2.siddhi.core.event.Event)7 APIManagementException (org.wso2.carbon.apimgt.api.APIManagementException)6 HashMap (java.util.HashMap)5 Connection (java.sql.Connection)4 PreparedStatement (java.sql.PreparedStatement)4 SQLException (java.sql.SQLException)4 Timestamp (java.sql.Timestamp)4 ArrayList (java.util.ArrayList)4 Date (java.util.Date)4 LinkedHashSet (java.util.LinkedHashSet)4 JsonParser (com.google.gson.JsonParser)3 ResultSet (java.sql.ResultSet)3 HashSet (java.util.HashSet)3 Map (java.util.Map)3 APIConsumer (org.wso2.carbon.apimgt.api.APIConsumer)3