From 94e1df617ad52b07ef2e58d6d5804edc53fe0883 Mon Sep 17 00:00:00 2001 From: pasindu Date: Fri, 9 Jun 2023 02:55:20 +0530 Subject: [PATCH] Get apiApplication registration to single method and fix generateApplicationKeys --- .../APIManagementProviderServiceImpl.java | 60 +++++--- .../rest/api/ConsumerRESTAPIServices.java | 34 ++-- .../rest/api/ConsumerRESTAPIServicesImpl.java | 145 ++++++++++-------- .../api/bean/APIMConsumer/ApplicationKey.java | 138 +++++++++++++++++ .../rest/api/dto/ApiApplicationInfo.java | 61 ++++++++ 5 files changed, 331 insertions(+), 107 deletions(-) create mode 100644 components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/bean/APIMConsumer/ApplicationKey.java create mode 100644 components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/dto/ApiApplicationInfo.java diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/src/main/java/io/entgra/device/mgt/core/apimgt/application/extension/APIManagementProviderServiceImpl.java b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/src/main/java/io/entgra/device/mgt/core/apimgt/application/extension/APIManagementProviderServiceImpl.java index ba57bb3045..18e706f8fc 100644 --- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/src/main/java/io/entgra/device/mgt/core/apimgt/application/extension/APIManagementProviderServiceImpl.java +++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.application.extension/src/main/java/io/entgra/device/mgt/core/apimgt/application/extension/APIManagementProviderServiceImpl.java @@ -21,8 +21,10 @@ package io.entgra.device.mgt.core.apimgt.application.extension; import io.entgra.device.mgt.core.apimgt.extension.rest.api.APIApplicationServices; import io.entgra.device.mgt.core.apimgt.extension.rest.api.ConsumerRESTAPIServices; import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIInfo; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.ApplicationKey; import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Subscription; import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.APIApplicationKey; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.ApiApplicationInfo; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.APIServicesException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.BadRequestException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.UnexpectedResponseException; @@ -111,21 +113,10 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe ConsumerRESTAPIServices consumerRESTAPIServices = APIApplicationManagerExtensionDataHolder.getInstance().getConsumerRESTAPIServices(); - APIApplicationKey apiApplicationKey; - io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.AccessTokenInfo accessTokenInfo; - try { - apiApplicationKey = apiApplicationServices.generateAndRetrieveApplicationKeys(username, password); - accessTokenInfo = apiApplicationServices.generateAccessTokenFromRegisteredApplication( - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); - } catch (APIServicesException e) { - String errorMsg = "Error occurred while generating the API application"; - log.error(errorMsg, e); - throw new APIManagerException(errorMsg, e); - } - + ApiApplicationInfo applicationInfo = applicationInfo(apiApplicationServices, username, password); try { io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Application[] applications = - consumerRESTAPIServices.getAllApplications(apiApplicationKey, accessTokenInfo, applicationName); + consumerRESTAPIServices.getAllApplications(applicationInfo, applicationName); io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Application application = null; List uniqueApiList = new ArrayList<>(); @@ -140,7 +131,7 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe if (!"carbon.super".equals(tenantDomain)) { headerParams.put("X-WSO2-Tenant", "carbon.super"); } - apiInfos = consumerRESTAPIServices.getAllApis(apiApplicationKey, accessTokenInfo, queryParams, headerParams); + apiInfos = consumerRESTAPIServices.getAllApis(applicationInfo, queryParams, headerParams); uniqueApiList.addAll(List.of(apiInfos)); Set taggedAPISet = new HashSet<>(uniqueApiList); @@ -151,7 +142,7 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe if (applications.length == 0) { application = new io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Application(); application.setName(applicationName); - application = consumerRESTAPIServices.createApplication(apiApplicationKey, accessTokenInfo, application); + application = consumerRESTAPIServices.createApplication(applicationInfo, application); List subscriptions = new ArrayList<>(); for (APIInfo apiInfo : uniqueApiList) { @@ -160,14 +151,13 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe subscription.setApplicationId(application.getApplicationId()); subscriptions.add(subscription); } - consumerRESTAPIServices.createSubscriptions(apiApplicationKey, accessTokenInfo, subscriptions); + consumerRESTAPIServices.createSubscriptions(applicationInfo, subscriptions); } else { if (applications.length == 1) { Optional applicationOpt = Arrays.stream(applications).findFirst(); application = applicationOpt.get(); - Subscription[] subscriptions = consumerRESTAPIServices.getAllSubscriptions(apiApplicationKey, accessTokenInfo, - application.getApplicationId()); + Subscription[] subscriptions = consumerRESTAPIServices.getAllSubscriptions(applicationInfo, application.getApplicationId()); for (Subscription subscription : subscriptions) { if (uniqueApiList.contains(subscription.getApiInfo())) { uniqueApiList.remove(subscription.getApiInfo()); @@ -184,7 +174,7 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe subscription.setApplicationId(application.getApplicationId()); subscriptionList.add(subscription); } - consumerRESTAPIServices.createSubscriptions(apiApplicationKey, accessTokenInfo, subscriptionList); + consumerRESTAPIServices.createSubscriptions(applicationInfo, subscriptionList); } else { String msg = "Found more than one application for application name: " + applicationName; log.error(msg); @@ -199,9 +189,7 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe } else{ //todo this method has to br modified and return different object, this is not mapped with the // response. - io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIKey apiKey = - consumerRESTAPIServices.generateApplicationKeys(apiApplicationKey, accessTokenInfo, - application.getApplicationId()); + ApplicationKey applicationKey = consumerRESTAPIServices.generateApplicationKeys(applicationInfo, application); return null; } } else{ @@ -560,4 +548,32 @@ Otherwise, Generate Application Keys and return them } return info; } + + private ApiApplicationInfo applicationInfo(APIApplicationServices apiApplicationServices, String username, String password) + throws APIManagerException { + + APIApplicationKey apiApplicationKey; + io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.AccessTokenInfo accessTokenInfo; + try { + if (username == null && password == null) { + apiApplicationKey = apiApplicationServices.createAndRetrieveApplicationCredentials(); + } else { + apiApplicationKey = apiApplicationServices.generateAndRetrieveApplicationKeys(username, password); + } + accessTokenInfo = apiApplicationServices.generateAccessTokenFromRegisteredApplication( + apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + } catch (APIServicesException e) { + String errorMsg = "Error occurred while generating the API application"; + log.error(errorMsg, e); + throw new APIManagerException(errorMsg, e); + } + + ApiApplicationInfo applicationInfo = null; + applicationInfo.setClientId(apiApplicationKey.getClientId()); + applicationInfo.setClientSecret(apiApplicationKey.getClientSecret()); + applicationInfo.setAccess_token(accessTokenInfo.getAccess_token()); + applicationInfo.setRefresh_token(accessTokenInfo.getRefresh_token()); + + return applicationInfo; + } } diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServices.java b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServices.java index e908e60ffd..fc90c14463 100644 --- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServices.java +++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServices.java @@ -18,13 +18,8 @@ package io.entgra.device.mgt.core.apimgt.extension.rest.api; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIInfo; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIKey; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Application; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Subscription; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.KeyManager; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.APIApplicationKey; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.AccessTokenInfo; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.*; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.ApiApplicationInfo; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.APIServicesException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.BadRequestException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.UnexpectedResponseException; @@ -33,37 +28,30 @@ import java.util.List; import java.util.Map; public interface ConsumerRESTAPIServices { - Application[] getAllApplications(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, String appName) + Application[] getAllApplications(ApiApplicationInfo applicationInfo, String appName) throws APIServicesException, BadRequestException, UnexpectedResponseException; - Application getDetailsOfAnApplication(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + Application getDetailsOfAnApplication(ApiApplicationInfo applicationInfo, String applicationId) throws APIServicesException, BadRequestException, UnexpectedResponseException; - Application createApplication(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Application application) + Application createApplication(ApiApplicationInfo applicationInfo, Application application) throws APIServicesException, BadRequestException, UnexpectedResponseException; - Subscription[] getAllSubscriptions(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + Subscription[] getAllSubscriptions(ApiApplicationInfo apiApplicationInfo, String applicationId) throws APIServicesException, BadRequestException, UnexpectedResponseException; - APIInfo[] getAllApis(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Map queryParam, Map headerParams) + APIInfo[] getAllApis(ApiApplicationInfo applicationInfo, Map queryParam, Map headerParams) throws APIServicesException, BadRequestException, UnexpectedResponseException; - Subscription createSubscription(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Subscription subscriptions) + Subscription createSubscription(ApiApplicationInfo apiApplicationInfo, Subscription subscriptions) throws APIServicesException, BadRequestException, UnexpectedResponseException; - Subscription[] createSubscriptions(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - List subscriptions) + Subscription[] createSubscriptions(ApiApplicationInfo apiApplicationInfo, List subscriptions) throws APIServicesException, BadRequestException, UnexpectedResponseException; - APIKey generateApplicationKeys(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + ApplicationKey generateApplicationKeys(ApiApplicationInfo applicationInfo, Application application) throws APIServicesException, BadRequestException, UnexpectedResponseException; - KeyManager[] getAllKeyManagers(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo) + KeyManager[] getAllKeyManagers(ApiApplicationInfo apiApplicationInfo) throws APIServicesException, BadRequestException, UnexpectedResponseException; } diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServicesImpl.java b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServicesImpl.java index cec4a927fe..fe341bc416 100644 --- a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServicesImpl.java +++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/ConsumerRESTAPIServicesImpl.java @@ -19,14 +19,10 @@ package io.entgra.device.mgt.core.apimgt.extension.rest.api; import com.google.gson.Gson; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIInfo; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.APIKey; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Application; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.Subscription; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.KeyManager; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer.*; import io.entgra.device.mgt.core.apimgt.extension.rest.api.constants.Constants; -import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.APIApplicationKey; import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.AccessTokenInfo; +import io.entgra.device.mgt.core.apimgt.extension.rest.api.dto.ApiApplicationInfo; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.APIServicesException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.BadRequestException; import io.entgra.device.mgt.core.apimgt.extension.rest.api.exceptions.UnexpectedResponseException; @@ -54,14 +50,14 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { + Constants.COLON + port; @Override - public Application[] getAllApplications(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, String appName) + public Application[] getAllApplications(ApiApplicationInfo applicationInfo, String appName) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllApplicationsUrl = endPointPrefix + Constants.APPLICATIONS_API + "?query=" + appName; Request request = new Request.Builder() .url(getAllApplicationsUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + applicationInfo.getAccess_token()) .get() .build(); @@ -73,10 +69,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(applicationInfo.getRefresh_token(), + applicationInfo.getClientId(), applicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(applicationInfo, refreshedAccessToken); //TODO: max attempt count - return getAllApplications(apiApplicationKey, refreshedAccessToken, appName); + return getAllApplications(refreshedApiApplicationInfo, appName); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request"; log.error(msg); @@ -93,15 +90,14 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public Application getDetailsOfAnApplication(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + public Application getDetailsOfAnApplication(ApiApplicationInfo apiApplicationInfo, String applicationId) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllApplicationsUrl = endPointPrefix + Constants.APPLICATIONS_API + Constants.SLASH + applicationId; Request request = new Request.Builder() .url(getAllApplicationsUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .get() .build(); @@ -112,10 +108,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return getDetailsOfAnApplication(apiApplicationKey, refreshedAccessToken, applicationId); + return getDetailsOfAnApplication(refreshedApiApplicationInfo, applicationId); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request"; log.error(msg); @@ -132,8 +129,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public Application createApplication(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Application application) + public Application createApplication(ApiApplicationInfo apiApplicationInfo, Application application) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllScopesUrl = endPointPrefix + Constants.APPLICATIONS_API; @@ -152,7 +148,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { Request request = new Request.Builder() .url(getAllScopesUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .post(requestBody) .build(); @@ -163,10 +159,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return createApplication(apiApplicationKey, refreshedAccessToken, application); + return createApplication(refreshedApiApplicationInfo, application); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request body"; log.error(msg); @@ -183,15 +180,14 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public Subscription[] getAllSubscriptions(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + public Subscription[] getAllSubscriptions(ApiApplicationInfo apiApplicationInfo, String applicationId) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllScopesUrl = endPointPrefix + Constants.SUBSCRIPTION_API + "?applicationId=" + applicationId; Request request = new Request.Builder() .url(getAllScopesUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .get() .build(); @@ -203,10 +199,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo rehreshedApiApplicationInfo = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return getAllSubscriptions(apiApplicationKey, refreshedAccessToken, applicationId); + return getAllSubscriptions(rehreshedApiApplicationInfo, applicationId); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request"; log.error(msg); @@ -223,8 +220,8 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public APIInfo[] getAllApis(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Map queryParams, Map headerParams) + public APIInfo[] getAllApis(ApiApplicationInfo applicationInfo, Map queryParams, + Map headerParams) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAPIsURL = endPointPrefix + Constants.DEV_PORTAL_API; @@ -236,7 +233,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { Request.Builder builder = new Request.Builder(); builder.url(getAPIsURL); builder.addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()); + + applicationInfo.getAccess_token()); for (Map.Entry header : headerParams.entrySet()) { builder.addHeader(header.getKey(), header.getValue()); } @@ -251,10 +248,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(applicationInfo.getRefresh_token(), + applicationInfo.getClientId(), applicationInfo.getClientSecret()); + ApiApplicationInfo rehreshedApiApplicationInfo = returnApplicationInfo(applicationInfo, refreshedAccessToken); //TODO: max attempt count - return getAllApis(apiApplicationKey, refreshedAccessToken, queryParams, headerParams); + return getAllApis(rehreshedApiApplicationInfo, queryParams, headerParams); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request"; log.error(msg); @@ -271,8 +269,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public Subscription createSubscription(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - Subscription subscriptions) + public Subscription createSubscription(ApiApplicationInfo applicationInfo, Subscription subscriptions) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllScopesUrl = endPointPrefix + Constants.SUBSCRIPTION_API; @@ -288,7 +285,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { Request request = new Request.Builder() .url(getAllScopesUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + applicationInfo.getAccess_token()) .post(requestBody) .build(); @@ -299,10 +296,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(applicationInfo.getRefresh_token(), + applicationInfo.getClientId(), applicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(applicationInfo, refreshedAccessToken); //TODO: max attempt count - return createSubscription(apiApplicationKey, refreshedAccessToken, subscriptions); + return createSubscription(refreshedApiApplicationInfo, subscriptions); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request body"; log.error(msg); @@ -319,8 +317,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public Subscription[] createSubscriptions(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - List subscriptions) + public Subscription[] createSubscriptions(ApiApplicationInfo apiApplicationInfo, List subscriptions) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllScopesUrl = endPointPrefix + Constants.SUBSCRIPTION_API + "/multiple"; @@ -331,7 +328,7 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { Request request = new Request.Builder() .url(getAllScopesUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .post(requestBody) .build(); @@ -343,10 +340,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return createSubscriptions(apiApplicationKey, refreshedAccessToken, subscriptions); + return createSubscriptions(refreshedApiApplicationInfo, subscriptions); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request body"; log.error(msg); @@ -363,15 +361,25 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public APIKey generateApplicationKeys(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo, - String applicationId) + public ApplicationKey generateApplicationKeys(ApiApplicationInfo apiApplicationInfo, Application application) throws APIServicesException, BadRequestException, UnexpectedResponseException { - String getAllScopesUrl = endPointPrefix + Constants.SUBSCRIPTION_API + Constants.SLASH + applicationId + - "/generate-keys"; + String getAllScopesUrl = endPointPrefix + Constants.SUBSCRIPTION_API + Constants.SLASH + + application.getApplicationId() + "/generate-keys"; String keyInfo = "{\n" + - " \"validityPeriod\": 3600,\n" + + " \"keyType\": \"PRODUCTION\",\n" + + " \"keyManager\": \"Resident Key Manager\",\n" + + " \"grantTypesToBeSupported\": [\n" + + " \"password\",\n" + + " \"client_credentials\"\n" + + " ],\n" + + " \"callbackUrl\": \"http://sample.com/callback/url\",\n" + + " \"scopes\": [\n" + + " \"am_application_scope\",\n" + + " \"default\"\n" + + " ],\n" + + " \"validityTime\": 3600,\n" + " \"additionalProperties\": {}\n" + "}"; @@ -379,21 +387,22 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { Request request = new Request.Builder() .url(getAllScopesUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .post(requestBody) .build(); try { Response response = client.newCall(request).execute(); if (HttpStatus.SC_OK == response.code()) { - return gson.fromJson(response.body().string(), APIKey.class); + return gson.fromJson(response.body().string(), ApplicationKey.class); } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationKey = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return generateApplicationKeys(apiApplicationKey, refreshedAccessToken, applicationId); + return generateApplicationKeys(refreshedApiApplicationKey, application); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request body"; log.error(msg); @@ -410,14 +419,14 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } @Override - public KeyManager[] getAllKeyManagers(APIApplicationKey apiApplicationKey, AccessTokenInfo accessTokenInfo) + public KeyManager[] getAllKeyManagers(ApiApplicationInfo apiApplicationInfo) throws APIServicesException, BadRequestException, UnexpectedResponseException { String getAllKeyManagersUrl = endPointPrefix + Constants.KEY_MANAGERS_API; Request request = new Request.Builder() .url(getAllKeyManagersUrl) .addHeader(Constants.AUTHORIZATION_HEADER_NAME, Constants.AUTHORIZATION_HEADER_PREFIX_BEARER - + accessTokenInfo.getAccess_token()) + + apiApplicationInfo.getAccess_token()) .get() .build(); @@ -429,10 +438,11 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { } else if (HttpStatus.SC_UNAUTHORIZED == response.code()) { APIApplicationServices apiApplicationServices = new APIApplicationServicesImpl(); AccessTokenInfo refreshedAccessToken = apiApplicationServices. - generateAccessTokenFromRefreshToken(accessTokenInfo.getRefresh_token(), - apiApplicationKey.getClientId(), apiApplicationKey.getClientSecret()); + generateAccessTokenFromRefreshToken(apiApplicationInfo.getRefresh_token(), + apiApplicationInfo.getClientId(), apiApplicationInfo.getClientSecret()); + ApiApplicationInfo refreshedApiApplicationInfo = returnApplicationInfo(apiApplicationInfo, refreshedAccessToken); //TODO: max attempt count - return getAllKeyManagers(apiApplicationKey, refreshedAccessToken); + return getAllKeyManagers(refreshedApiApplicationInfo); } else if (HttpStatus.SC_BAD_REQUEST == response.code()) { String msg = "Bad Request, Invalid request"; log.error(msg); @@ -447,4 +457,15 @@ public class ConsumerRESTAPIServicesImpl implements ConsumerRESTAPIServices { throw new APIServicesException(msg, e); } } + + private ApiApplicationInfo returnApplicationInfo(ApiApplicationInfo refreshedApplicationInfo, AccessTokenInfo refreshedToken) { + + ApiApplicationInfo applicationInfo = null; + applicationInfo.setClientId(refreshedApplicationInfo.getClientId()); + applicationInfo.setClientSecret(refreshedApplicationInfo.getClientSecret()); + applicationInfo.setAccess_token(refreshedToken.getAccess_token()); + applicationInfo.setRefresh_token(refreshedToken.getRefresh_token()); + + return applicationInfo; + } } diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/bean/APIMConsumer/ApplicationKey.java b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/bean/APIMConsumer/ApplicationKey.java new file mode 100644 index 0000000000..c51564af2c --- /dev/null +++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/bean/APIMConsumer/ApplicationKey.java @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. + * + * Entgra (Pvt) Ltd. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.entgra.device.mgt.core.apimgt.extension.rest.api.bean.APIMConsumer; + +import org.json.JSONObject; + +import java.util.List; + +/** + * This class represents the Consumer Application key Information. + */ +public class ApplicationKey { + + private String keyMappingId; + private String keyManager; + private String consumerKey; + private String consumerSecret; + private List supportedGrantTypes; + private String callbackUrl; + private String keyState; + private String keyType; + private String mode; + private String groupId; + private JSONObject token; + private JSONObject additionalProperties; + + public String getKeyMappingId() { + return keyMappingId; + } + + public void setKeyMappingId(String keyMappingId) { + this.keyMappingId = keyMappingId; + } + + public String getKeyManager() { + return keyManager; + } + + public void setKeyManager(String keyManager) { + this.keyManager = keyManager; + } + + public String getConsumerKey() { + return consumerKey; + } + + public void setConsumerKey(String consumerKey) { + this.consumerKey = consumerKey; + } + + public String getConsumerSecret() { + return consumerSecret; + } + + public void setConsumerSecret(String consumerSecret) { + this.consumerSecret = consumerSecret; + } + + public List getSupportedGrantTypes() { + return supportedGrantTypes; + } + + public void setSupportedGrantTypes(List supportedGrantTypes) { + this.supportedGrantTypes = supportedGrantTypes; + } + + public String getCallbackUrl() { + return callbackUrl; + } + + public void setCallbackUrl(String callbackUrl) { + this.callbackUrl = callbackUrl; + } + + public String getKeyState() { + return keyState; + } + + public void setKeyState(String keyState) { + this.keyState = keyState; + } + + public String getKeyType() { + return keyType; + } + + public void setKeyType(String keyType) { + this.keyType = keyType; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public JSONObject getToken() { + return token; + } + + public void setToken(JSONObject token) { + this.token = token; + } + + public JSONObject getAdditionalProperties() { + return additionalProperties; + } + + public void setAdditionalProperties(JSONObject additionalProperties) { + this.additionalProperties = additionalProperties; + } +} diff --git a/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/dto/ApiApplicationInfo.java b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/dto/ApiApplicationInfo.java new file mode 100644 index 0000000000..169ce76442 --- /dev/null +++ b/components/apimgt-extensions/io.entgra.device.mgt.core.apimgt.extension.rest.api/src/main/java/io/entgra/device/mgt/core/apimgt/extension/rest/api/dto/ApiApplicationInfo.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. + * + * Entgra (Pvt) Ltd. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.entgra.device.mgt.core.apimgt.extension.rest.api.dto; + +/** + * This holds the API application client information and token information. + */ +public class ApiApplicationInfo { + private String clientId; + private String clientSecret; + private String refresh_token; + private String access_token; + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + public String getRefresh_token() { + return refresh_token; + } + + public void setRefresh_token(String refresh_token) { + this.refresh_token = refresh_token; + } + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } +}