use of io.apiman.gateway.engine.beans.exceptions.ClientNotFoundException in project apiman by apiman.
the class CachingEsRegistry method getContract.
/**
* @see io.apiman.gateway.engine.jdbc.EsRegistry#getContract(java.lang.String, java.lang.String, java.lang.String, java.lang.String, io.apiman.gateway.engine.async.IAsyncResultHandler)
*/
@Override
public void getContract(String apiOrganizationId, String apiId, String apiVersion, String apiKey, IAsyncResultHandler<ApiContract> handler) {
Client client = null;
Api api = null;
try {
synchronized (mutex) {
client = getClient(apiKey);
api = getApi(apiOrganizationId, apiId, apiVersion);
}
if (client == null) {
// $NON-NLS-1$
Exception error = new ClientNotFoundException(Messages.i18n.format("EsRegistry.NoClientForAPIKey", apiKey));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
if (api == null) {
throw new ApiRetiredException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"EsRegistry.ApiWasRetired", apiId, apiOrganizationId));
}
Contract matchedContract = null;
for (Contract contract : client.getContracts()) {
if (contract.matches(apiOrganizationId, apiId, apiVersion)) {
matchedContract = contract;
break;
}
}
if (matchedContract == null) {
throw new NoContractFoundException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"EsRegistry.NoContractFound", client.getClientId(), api.getApiId()));
}
ApiContract contract = new ApiContract(api, client, matchedContract.getPlan(), matchedContract.getPolicies());
handler.handle(AsyncResultImpl.create(contract));
} catch (Exception e) {
handler.handle(AsyncResultImpl.create(e, ApiContract.class));
}
}
use of io.apiman.gateway.engine.beans.exceptions.ClientNotFoundException in project apiman by apiman.
the class EsRegistry method lookupClient.
/**
* Searches for a client by its orgid:clientId:version and returns it.
* @param orgId the organization id
* @param clientId the client id
* @param version the version
*/
// Do beans need escaping or will that be done 'automatically'. Test it. Strings do, but probably only quotes?
@SuppressWarnings("nls")
private Client lookupClient(String orgId, String clientId, String version) {
String query = "{" + " \"query\": {" + " \"bool\": {" + " \"filter\": [{" + " \"term\": {" + // orgId
" \"organizationId\": \"{{organizationId}}\" " + " }" + " }," + " {" + " \"term\": {" + // clientId
" \"clientId\": \"{{clientId}}\" " + " }" + " }," + " {" + " \"term\": {" + // version
" \"version\": \"{{version}}\" " + " }" + " }" + " ]" + " }" + " }" + "}";
SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest();
searchTemplateRequest.setRequest(new SearchRequest(getIndexPrefixWithJoiner() + EsConstants.INDEX_CLIENTS));
searchTemplateRequest.setScriptType(ScriptType.INLINE);
searchTemplateRequest.setScript(query);
Map<String, Object> scriptParams = new HashMap<>();
scriptParams.put("organizationId", orgId);
scriptParams.put("clientId", clientId);
scriptParams.put("version", version);
searchTemplateRequest.setScriptParams(scriptParams);
Client client;
try {
SearchTemplateResponse response = getClient().searchTemplate(searchTemplateRequest, RequestOptions.DEFAULT);
SearchResponse searchResponse = response.getResponse();
SearchHits hits = searchResponse.getHits();
if (hits.getTotalHits().value == 0) {
throw new IOException();
}
String sourceAsString = response.getResponse().getHits().getAt(0).getSourceAsString();
client = JSON_MAPPER.readValue(sourceAsString, Client.class);
} catch (IOException e) {
// $NON-NLS-1$
throw new ClientNotFoundException(Messages.i18n.format("EsRegistry.ClientNotFound"), e);
}
return client;
}
use of io.apiman.gateway.engine.beans.exceptions.ClientNotFoundException in project apiman by apiman.
the class EsRegistry method getContract.
/**
* @see io.apiman.gateway.engine.IRegistry#getContract(java.lang.String, java.lang.String, java.lang.String, java.lang.String, io.apiman.gateway.engine.async.IAsyncResultHandler)
*/
@Override
public void getContract(String apiOrganizationId, String apiId, String apiVersion, String apiKey, IAsyncResultHandler<ApiContract> handler) {
try {
Client client = getClient(apiKey);
Api api = getApi(getApiId(apiOrganizationId, apiId, apiVersion));
if (client == null) {
// $NON-NLS-1$
Exception error = new ClientNotFoundException(Messages.i18n.format("EsRegistry.NoClientForAPIKey", apiKey));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
if (api == null) {
Exception error = new ApiRetiredException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"EsRegistry.ApiWasRetired", apiId, apiOrganizationId));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
Contract matchedContract = null;
for (Contract contract : client.getContracts()) {
if (contract.matches(apiOrganizationId, apiId, apiVersion)) {
matchedContract = contract;
break;
}
}
if (matchedContract == null) {
Exception error = new NoContractFoundException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"EsRegistry.NoContractFound", client.getClientId(), api.getApiId()));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
ApiContract contract = new ApiContract(api, client, matchedContract.getPlan(), matchedContract.getPolicies());
handler.handle(AsyncResultImpl.create(contract));
} catch (Exception e) {
handler.handle(AsyncResultImpl.create(e, ApiContract.class));
}
}
use of io.apiman.gateway.engine.beans.exceptions.ClientNotFoundException in project apiman by apiman.
the class SharedGlobalDataRegistry method getContract.
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void getContract(String apiOrganizationId, String apiId, String apiVersion, String apiKey, IAsyncResultHandler<ApiContract> handler) {
String apiIndex = getApiIndex(apiOrganizationId, apiId, apiVersion);
Future apiFuture = Future.future();
Future clientFuture = Future.future();
objectMap.get(apiIndex, apiFuture.completer());
objectMap.get(apiKey, clientFuture.completer());
CompositeFuture.all(apiFuture, clientFuture).setHandler(compositeResult -> {
if (compositeResult.succeeded()) {
Api api = (Api) apiFuture.result();
Client client = (Client) clientFuture.result();
if (api == null) {
Exception error = new ClientNotFoundException(Messages.i18n.format("InMemoryRegistry.NoClientForAPIKey", apiKey));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
} else if (client == null) {
Exception error = new ApiRetiredException(Messages.i18n.format("InMemoryRegistry.ApiWasRetired", apiId, apiOrganizationId));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
} else {
Optional<Contract> matchedOpt = client.getContracts().stream().filter(contract -> contract.matches(apiOrganizationId, apiId, apiVersion)).findFirst();
if (matchedOpt.isPresent()) {
Contract contract = matchedOpt.get();
ApiContract apiContract = new ApiContract(api, client, contract.getPlan(), contract.getPolicies());
handler.handle(AsyncResultImpl.create(apiContract));
} else {
Exception error = new NoContractFoundException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"InMemoryRegistry.NoContractFound", client.getClientId(), api.getApiId()));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
}
}
} else {
handler.handle(AsyncResultImpl.create(compositeResult.cause()));
}
});
}
use of io.apiman.gateway.engine.beans.exceptions.ClientNotFoundException in project apiman by apiman.
the class JdbcRegistry method getContract.
/**
* @see io.apiman.gateway.engine.IRegistry#getContract(java.lang.String, java.lang.String, java.lang.String, java.lang.String, io.apiman.gateway.engine.async.IAsyncResultHandler)
*/
@Override
public void getContract(String apiOrganizationId, String apiId, String apiVersion, String apiKey, IAsyncResultHandler<ApiContract> handler) {
try {
Client client = getClientInternal(apiKey);
Api api = getApiInternal(apiOrganizationId, apiId, apiVersion);
if (client == null) {
// $NON-NLS-1$
Exception error = new ClientNotFoundException(Messages.i18n.format("JdbcRegistry.NoClientForAPIKey", apiKey));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
if (api == null) {
Exception error = new ApiRetiredException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"JdbcRegistry.ApiWasRetired", apiId, apiOrganizationId));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
Contract matchedContract = null;
for (Contract contract : client.getContracts()) {
if (contract.matches(apiOrganizationId, apiId, apiVersion)) {
matchedContract = contract;
break;
}
}
if (matchedContract == null) {
Exception error = new NoContractFoundException(// $NON-NLS-1$
Messages.i18n.format(// $NON-NLS-1$
"JdbcRegistry.NoContractFound", client.getClientId(), api.getApiId()));
handler.handle(AsyncResultImpl.create(error, ApiContract.class));
return;
}
ApiContract contract = new ApiContract(api, client, matchedContract.getPlan(), matchedContract.getPolicies());
handler.handle(AsyncResultImpl.create(contract));
} catch (Exception e) {
handler.handle(AsyncResultImpl.create(e, ApiContract.class));
}
}
Aggregations