Search in sources :

Example 21 with ApiVersionBean

use of io.apiman.manager.api.beans.apis.ApiVersionBean in project apiman by apiman.

the class ActionService method retireApi.

/**
 * Retires an API that is currently published to the Gateway.
 */
public void retireApi(String orgId, String apiId, String apiVersion) throws ActionException, NotAuthorizedException {
    ApiVersionBean versionBean;
    try {
        versionBean = storage.getApiVersion(orgId, apiId, apiVersion);
    } catch (ApiVersionNotFoundException e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("ApiNotFound"));
    } catch (StorageException e) {
        throw new RuntimeException(e);
    }
    // Validate that it's ok to perform this action - API must be Published.
    if (versionBean.getStatus() != ApiStatus.Published) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("InvalidApiStatus"));
    }
    Api gatewayApi = new Api();
    gatewayApi.setOrganizationId(versionBean.getApi().getOrganization().getId());
    gatewayApi.setApiId(versionBean.getApi().getId());
    gatewayApi.setVersion(versionBean.getVersion());
    // Retire the API from all relevant gateways
    try {
        Set<ApiGatewayBean> gateways = versionBean.getGateways();
        if (gateways == null) {
            // $NON-NLS-1$
            throw new PublishingException("No gateways specified for API!");
        }
        for (ApiGatewayBean apiGatewayBean : gateways) {
            IGatewayLink gatewayLink = createGatewayLink(apiGatewayBean.getGatewayId());
            gatewayLink.retireApi(gatewayApi);
            gatewayLink.close();
        }
        versionBean.setStatus(ApiStatus.Retired);
        versionBean.setRetiredOn(new Date());
        ApiBean api = storage.getApi(orgId, apiId);
        if (api == null) {
            // $NON-NLS-1$ //$NON-NLS-2$
            throw new PublishingException("Error: could not find API - " + orgId + "=>" + apiId);
        }
        if (api.getNumPublished() == null || api.getNumPublished() == 0) {
            api.setNumPublished(0);
        } else {
            api.setNumPublished(api.getNumPublished() - 1);
        }
        storage.updateApi(api);
        storage.updateApiVersion(versionBean);
        storage.createAuditEntry(AuditUtils.apiRetired(versionBean, securityContext));
    } catch (Exception e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("RetireError"), e);
    }
    LOGGER.debug(// $NON-NLS-1$
    String.format(// $NON-NLS-1$
    "Successfully retired API %s on specified gateways: %s", versionBean.getApi().getName(), versionBean.getApi()));
}
Also used : ApiBean(io.apiman.manager.api.beans.apis.ApiBean) ApiGatewayBean(io.apiman.manager.api.beans.apis.ApiGatewayBean) PublishingException(io.apiman.gateway.engine.beans.exceptions.PublishingException) Api(io.apiman.gateway.engine.beans.Api) ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean) StorageException(io.apiman.manager.api.core.exceptions.StorageException) IGatewayLink(io.apiman.manager.api.gateway.IGatewayLink) Date(java.util.Date) ApiVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ApiVersionNotFoundException) StorageException(io.apiman.manager.api.core.exceptions.StorageException) GatewayNotFoundException(io.apiman.manager.api.rest.exceptions.GatewayNotFoundException) NotAuthorizedException(io.apiman.manager.api.rest.exceptions.NotAuthorizedException) ActionException(io.apiman.manager.api.rest.exceptions.ActionException) PlanVersionNotFoundException(io.apiman.manager.api.rest.exceptions.PlanVersionNotFoundException) PublishingException(io.apiman.gateway.engine.beans.exceptions.PublishingException) ClientVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ClientVersionNotFoundException) ApiVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ApiVersionNotFoundException)

Example 22 with ApiVersionBean

use of io.apiman.manager.api.beans.apis.ApiVersionBean in project apiman by apiman.

the class ActionService method unregisterClient.

/**
 * De-registers an client that is currently registered with the gateway.
 */
public void unregisterClient(String orgId, String clientId, String clientVersion) throws ActionException, NotAuthorizedException {
    ClientVersionBean versionBean;
    List<ContractSummaryBean> contractBeans;
    try {
        versionBean = clientAppService.getClientVersion(orgId, clientId, clientVersion);
    } catch (ClientVersionNotFoundException e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("ClientNotFound"));
    }
    try {
        contractBeans = query.getClientContracts(orgId, clientId, clientVersion).stream().peek(c -> {
            if (c.getStatus() != ContractStatus.Created) {
                LOGGER.debug("Will not try to delete contract {0} from gateway(s) as it is not in 'Created' state", c);
            }
        }).filter(c -> c.getStatus() == ContractStatus.Created).collect(Collectors.toList());
    } catch (StorageException e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("ClientNotFound"), e);
    }
    // Validate that it's ok to perform this action - client must be either registered or awaiting approval (or there's nothing to unregister)
    if (versionBean.getStatus() != ClientStatus.Registered && versionBean.getStatus() != ClientStatus.AwaitingApproval) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("InvalidClientStatus"));
    }
    Client client = new Client();
    client.setOrganizationId(versionBean.getClient().getOrganization().getId());
    client.setClientId(versionBean.getClient().getId());
    client.setVersion(versionBean.getVersion());
    // Each of those gateways must be told about the client.
    try {
        Map<String, IGatewayLink> links = new HashMap<>();
        for (ContractSummaryBean contractBean : contractBeans) {
            ApiVersionBean svb = storage.getApiVersion(contractBean.getApiOrganizationId(), contractBean.getApiId(), contractBean.getApiVersion());
            Set<ApiGatewayBean> gateways = svb.getGateways();
            if (gateways == null) {
                // $NON-NLS-1$
                throw new PublishingException("No gateways specified for API: " + svb.getApi().getName());
            }
            for (ApiGatewayBean apiGatewayBean : gateways) {
                if (!links.containsKey(apiGatewayBean.getGatewayId())) {
                    IGatewayLink gatewayLink = createGatewayLink(apiGatewayBean.getGatewayId());
                    links.put(apiGatewayBean.getGatewayId(), gatewayLink);
                }
            }
        }
        for (IGatewayLink gatewayLink : links.values()) {
            gatewayLink.unregisterClient(client);
            gatewayLink.close();
        }
    } catch (Exception e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("UnregisterError"), e);
    }
    ClientStatus oldStatus = versionBean.getStatus();
    versionBean.setStatus(ClientStatus.Retired);
    versionBean.setRetiredOn(new Date());
    clientAppService.fireClientStatusChangeEvent(versionBean, oldStatus);
    try {
        storage.updateClientVersion(versionBean);
        storage.createAuditEntry(AuditUtils.clientUnregistered(versionBean, securityContext));
    } catch (Exception e) {
        // $NON-NLS-1$
        throw ExceptionFactory.actionException(Messages.i18n.format("UnregisterError"), e);
    }
    LOGGER.debug(// $NON-NLS-1$
    String.format(// $NON-NLS-1$
    "Successfully registered Client %s on specified gateways: %s", versionBean.getClient().getName(), versionBean.getClient()));
}
Also used : ClientVersionBean(io.apiman.manager.api.beans.clients.ClientVersionBean) ContractApprovalEvent(io.apiman.manager.api.beans.events.ContractApprovalEvent) ApiGatewayBean(io.apiman.manager.api.beans.apis.ApiGatewayBean) Date(java.util.Date) ApiVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ApiVersionNotFoundException) StorageException(io.apiman.manager.api.core.exceptions.StorageException) ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean) ISecurityContext(io.apiman.manager.api.security.ISecurityContext) GatewayNotFoundException(io.apiman.manager.api.rest.exceptions.GatewayNotFoundException) IGatewayLinkFactory(io.apiman.manager.api.gateway.IGatewayLinkFactory) ApimanEventHeaders(io.apiman.manager.api.beans.events.ApimanEventHeaders) UserBean(io.apiman.manager.api.beans.idm.UserBean) Client(io.apiman.gateway.engine.beans.Client) ApiBean(io.apiman.manager.api.beans.apis.ApiBean) UserMapper(io.apiman.manager.api.beans.idm.UserMapper) IClientValidator(io.apiman.manager.api.core.IClientValidator) Map(java.util.Map) URI(java.net.URI) ApimanLoggerFactory(io.apiman.common.logging.ApimanLoggerFactory) Contract(io.apiman.gateway.engine.beans.Contract) OrganizationBean(io.apiman.manager.api.beans.orgs.OrganizationBean) Policy(io.apiman.gateway.engine.beans.Policy) Transactional(javax.transaction.Transactional) IGatewayLink(io.apiman.manager.api.gateway.IGatewayLink) EventService(io.apiman.manager.api.events.EventService) Set(java.util.Set) UUID(java.util.UUID) Streams(com.google.common.collect.Streams) Collectors(java.util.stream.Collectors) ContractStatus(io.apiman.manager.api.beans.contracts.ContractStatus) NotAuthorizedException(io.apiman.manager.api.rest.exceptions.NotAuthorizedException) List(java.util.List) IApimanLogger(io.apiman.common.logging.IApimanLogger) PolicySummaryBean(io.apiman.manager.api.beans.summary.PolicySummaryBean) ContractActionDto(io.apiman.manager.api.beans.actions.ContractActionDto) ApplicationScoped(javax.enterprise.context.ApplicationScoped) ActionException(io.apiman.manager.api.rest.exceptions.ActionException) HashMap(java.util.HashMap) ApiStatus(io.apiman.manager.api.beans.apis.ApiStatus) PolicyBean(io.apiman.manager.api.beans.policies.PolicyBean) AuditUtils(io.apiman.manager.api.rest.impl.audit.AuditUtils) ArrayList(java.util.ArrayList) ContractBean(io.apiman.manager.api.beans.contracts.ContractBean) HashSet(java.util.HashSet) Inject(javax.inject.Inject) PlanVersionNotFoundException(io.apiman.manager.api.rest.exceptions.PlanVersionNotFoundException) PublishingException(io.apiman.gateway.engine.beans.exceptions.PublishingException) IStorageQuery(io.apiman.manager.api.core.IStorageQuery) DataAccessUtilMixin(io.apiman.manager.api.rest.impl.util.DataAccessUtilMixin) PlanVersionBean(io.apiman.manager.api.beans.plans.PlanVersionBean) Iterator(java.util.Iterator) GatewayBean(io.apiman.manager.api.beans.gateways.GatewayBean) ClientStatus(io.apiman.manager.api.beans.clients.ClientStatus) ContractSummaryBean(io.apiman.manager.api.beans.summary.ContractSummaryBean) IStorage(io.apiman.manager.api.core.IStorage) ClientVersionBean(io.apiman.manager.api.beans.clients.ClientVersionBean) ClientVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ClientVersionNotFoundException) Api(io.apiman.gateway.engine.beans.Api) PolicyType(io.apiman.manager.api.beans.policies.PolicyType) Messages(io.apiman.manager.api.rest.exceptions.i18n.Messages) PlanStatus(io.apiman.manager.api.beans.plans.PlanStatus) ExceptionFactory(io.apiman.manager.api.rest.exceptions.util.ExceptionFactory) ClientStatus(io.apiman.manager.api.beans.clients.ClientStatus) ClientVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ClientVersionNotFoundException) HashMap(java.util.HashMap) IGatewayLink(io.apiman.manager.api.gateway.IGatewayLink) ApiVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ApiVersionNotFoundException) StorageException(io.apiman.manager.api.core.exceptions.StorageException) GatewayNotFoundException(io.apiman.manager.api.rest.exceptions.GatewayNotFoundException) NotAuthorizedException(io.apiman.manager.api.rest.exceptions.NotAuthorizedException) ActionException(io.apiman.manager.api.rest.exceptions.ActionException) PlanVersionNotFoundException(io.apiman.manager.api.rest.exceptions.PlanVersionNotFoundException) PublishingException(io.apiman.gateway.engine.beans.exceptions.PublishingException) ClientVersionNotFoundException(io.apiman.manager.api.rest.exceptions.ClientVersionNotFoundException) Date(java.util.Date) ApiGatewayBean(io.apiman.manager.api.beans.apis.ApiGatewayBean) PublishingException(io.apiman.gateway.engine.beans.exceptions.PublishingException) ContractSummaryBean(io.apiman.manager.api.beans.summary.ContractSummaryBean) Client(io.apiman.gateway.engine.beans.Client) StorageException(io.apiman.manager.api.core.exceptions.StorageException) ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean)

Example 23 with ApiVersionBean

use of io.apiman.manager.api.beans.apis.ApiVersionBean in project apiman by apiman.

the class ApiService method setApiDefinition.

private void setApiDefinition(String organizationId, String apiId, String version, ApiDefinitionType definitionType, InputStream data, String definitionUrl) throws StorageException {
    ApiVersionBean apiVersion = getApiVersionFromStorage(organizationId, apiId, version);
    if (apiVersion.getDefinitionType() != definitionType) {
        apiVersion.setDefinitionType(definitionType);
        storage.updateApiVersion(apiVersion);
    }
    // update the definition url silently in storage if it's a new one
    if ((definitionUrl != null && (apiVersion.getDefinitionUrl() == null || !apiVersion.getDefinitionUrl().equals(definitionUrl)))) {
        apiVersion.setDefinitionUrl(definitionUrl);
        storage.updateApiVersion(apiVersion);
    }
    storage.createAuditEntry(AuditUtils.apiDefinitionUpdated(apiVersion, securityContext));
    storage.updateApiDefinition(apiVersion, data);
    apiVersion.setModifiedOn(new Date());
    apiVersion.setModifiedBy(securityContext.getCurrentUser());
    storage.updateApiVersion(apiVersion);
    // $NON-NLS-1$
    LOGGER.debug(String.format("Stored API definition %s: %s", apiId, apiVersion));
}
Also used : ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean) UpdateApiVersionBean(io.apiman.manager.api.beans.apis.UpdateApiVersionBean) NewApiVersionBean(io.apiman.manager.api.beans.apis.NewApiVersionBean) Date(java.util.Date)

Example 24 with ApiVersionBean

use of io.apiman.manager.api.beans.apis.ApiVersionBean in project apiman by apiman.

the class ApiService method getApiPolicyChain.

public PolicyChainBean getApiPolicyChain(String organizationId, String apiId, String version, String planId) throws ApiVersionNotFoundException, PlanNotFoundException {
    // Try to get the API first - will throw an exception if not found.
    ApiVersionBean avb = getApiVersionFromStorage(organizationId, apiId, version);
    return tryAction(() -> {
        String planVersion = null;
        Set<ApiPlanBean> plans = avb.getPlans();
        if (plans != null) {
            for (ApiPlanBean apiPlanBean : plans) {
                if (apiPlanBean.getPlanId().equals(planId)) {
                    planVersion = apiPlanBean.getVersion();
                    break;
                }
            }
        }
        if (planVersion == null) {
            throw ExceptionFactory.planNotFoundException(planId);
        }
        // Hide sensitive data and set only needed data for the UI
        List<PolicySummaryBean> apiPolicies = RestHelper.hideSensitiveDataFromPolicySummaryBeanList(securityContext, query.getPolicies(organizationId, apiId, version, PolicyType.Api));
        List<PolicySummaryBean> planPolicies = RestHelper.hideSensitiveDataFromPolicySummaryBeanList(securityContext, query.getPolicies(organizationId, planId, planVersion, PolicyType.Plan));
        PolicyChainBean chain = new PolicyChainBean();
        chain.getPolicies().addAll(planPolicies);
        chain.getPolicies().addAll(apiPolicies);
        return chain;
    });
}
Also used : PolicySummaryBean(io.apiman.manager.api.beans.summary.PolicySummaryBean) ApiPlanBean(io.apiman.manager.api.beans.apis.ApiPlanBean) ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean) UpdateApiVersionBean(io.apiman.manager.api.beans.apis.UpdateApiVersionBean) NewApiVersionBean(io.apiman.manager.api.beans.apis.NewApiVersionBean) PolicyChainBean(io.apiman.manager.api.beans.policies.PolicyChainBean)

Example 25 with ApiVersionBean

use of io.apiman.manager.api.beans.apis.ApiVersionBean in project apiman by apiman.

the class ApiService method reorderApiPolicies.

public void reorderApiPolicies(String organizationId, String apiId, String version, PolicyChainBean policyChain) throws OrganizationNotFoundException, ApiVersionNotFoundException, NotAuthorizedException {
    // Make sure the API exists
    ApiVersionBean avb = getApiVersionFromStorage(organizationId, apiId, version);
    tryAction(() -> {
        List<Long> newOrder = new ArrayList<>(policyChain.getPolicies().size());
        for (PolicySummaryBean psb : policyChain.getPolicies()) {
            newOrder.add(psb.getId());
        }
        storage.reorderPolicies(PolicyType.Api, organizationId, apiId, version, newOrder);
        storage.createAuditEntry(AuditUtils.policiesReordered(avb, PolicyType.Api, securityContext));
        avb.setModifiedBy(securityContext.getCurrentUser());
        avb.setModifiedOn(new Date());
        storage.updateApiVersion(avb);
    });
}
Also used : PolicySummaryBean(io.apiman.manager.api.beans.summary.PolicySummaryBean) ArrayList(java.util.ArrayList) ApiVersionBean(io.apiman.manager.api.beans.apis.ApiVersionBean) UpdateApiVersionBean(io.apiman.manager.api.beans.apis.UpdateApiVersionBean) NewApiVersionBean(io.apiman.manager.api.beans.apis.NewApiVersionBean) Date(java.util.Date)

Aggregations

ApiVersionBean (io.apiman.manager.api.beans.apis.ApiVersionBean)68 StorageException (io.apiman.manager.api.core.exceptions.StorageException)34 Date (java.util.Date)29 NewApiVersionBean (io.apiman.manager.api.beans.apis.NewApiVersionBean)28 UpdateApiVersionBean (io.apiman.manager.api.beans.apis.UpdateApiVersionBean)28 ApiVersionNotFoundException (io.apiman.manager.api.rest.exceptions.ApiVersionNotFoundException)25 GatewayNotFoundException (io.apiman.manager.api.rest.exceptions.GatewayNotFoundException)25 NotAuthorizedException (io.apiman.manager.api.rest.exceptions.NotAuthorizedException)25 ApiGatewayBean (io.apiman.manager.api.beans.apis.ApiGatewayBean)23 ClientVersionNotFoundException (io.apiman.manager.api.rest.exceptions.ClientVersionNotFoundException)22 PlanVersionNotFoundException (io.apiman.manager.api.rest.exceptions.PlanVersionNotFoundException)22 PolicyBean (io.apiman.manager.api.beans.policies.PolicyBean)20 SystemErrorException (io.apiman.manager.api.rest.exceptions.SystemErrorException)20 ApiBean (io.apiman.manager.api.beans.apis.ApiBean)19 PlanVersionBean (io.apiman.manager.api.beans.plans.PlanVersionBean)18 GatewayAuthenticationException (io.apiman.manager.api.gateway.GatewayAuthenticationException)17 IGatewayLink (io.apiman.manager.api.gateway.IGatewayLink)16 ApiAlreadyExistsException (io.apiman.manager.api.rest.exceptions.ApiAlreadyExistsException)16 ApiDefinitionNotFoundException (io.apiman.manager.api.rest.exceptions.ApiDefinitionNotFoundException)16 ApiNotFoundException (io.apiman.manager.api.rest.exceptions.ApiNotFoundException)16