package org.onap.so.svnfm.simulator.services;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.net.ssl.HttpsURLConnection;
import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification.OperationStateEnum;
import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200;
import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoVnfcResourceInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsAuthenticationParamsBasic;
import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsAuthenticationParamsOauth2ClientCredentials;
-import org.onap.so.svnfm.simulator.model.Vnfds;
-import org.onap.so.svnfm.simulator.repository.VnfOperationRepository;
+import org.onap.so.svnfm.simulator.api.VeVnfmApi;
import org.onap.so.svnfm.simulator.config.ApplicationConfig;
import org.onap.so.svnfm.simulator.model.VnfOperation;
+import org.onap.so.svnfm.simulator.model.Vnfds;
+import org.onap.so.svnfm.simulator.repository.VnfOperationRepository;
+import org.onap.so.svnfm.simulator.util.PatternContainedChecker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
public abstract class OperationProgressor implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(OperationProgressor.class);
private static final String CERTIFICATE_TO_TRUST = "so-vnfm-adapter.crt.pem";
-
- private Resource keyStoreResource = new ClassPathResource("so-vnfm-simulator.p12");
- private String keyStorePassword = "7Em3&j4.19xYiMelhD5?xbQ.";
-
protected final VnfOperation operation;
protected final SvnfmService svnfmService;
+ protected final Vnfds vnfds;
private final VnfOperationRepository vnfOperationRepository;
private final ApplicationConfig applicationConfig;
- protected final Vnfds vnfds;
private final SubscriptionService subscriptionService;
private final DefaultApi notificationClient;
private final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.api.DefaultApi grantClient;
+ private final Resource keyStoreResource = new ClassPathResource("so-vnfm-simulator.p12");
+ private final String keyStorePassword = "7Em3&j4.19xYiMelhD5?xbQ.";
public OperationProgressor(final VnfOperation operation, final SvnfmService svnfmService,
- final VnfOperationRepository vnfOperationRepository, final ApplicationConfig applicationConfig,
- final Vnfds vnfds, final SubscriptionService subscriptionService) {
+ final VnfOperationRepository vnfOperationRepository, final ApplicationConfig applicationConfig,
+ final Vnfds vnfds, final SubscriptionService subscriptionService) {
this.operation = operation;
this.svnfmService = svnfmService;
this.vnfOperationRepository = vnfOperationRepository;
this.subscriptionService = subscriptionService;
final ApiClient apiClient = new ApiClient();
- String callBackUrl = subscriptionService.getSubscriptions().iterator().next().getCallbackUri();
- callBackUrl = callBackUrl.substring(0, callBackUrl.indexOf("/lcn/"));
+ String callBackUrl = getLastLccnSubscriptionRequest().getCallbackUri();
+ final PatternContainedChecker checker = new PatternContainedChecker("/lcn/", callBackUrl);
+ callBackUrl = checker.getText();
apiClient.setBasePath(callBackUrl);
apiClient.setKeyManagers(getKeyManagers());
apiClient.setSslCaCert(getCertificateToTrust());
- notificationClient = new DefaultApi(apiClient);
+ notificationClient = checker.isContained() ? new DefaultApi(apiClient) : new VeVnfmApi(apiClient);
final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiClient grantApiClient =
new org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiClient();
buildNotification(NotificationStatusEnum.START, OperationStateEnum.PROCESSING);
sendNotification(notificationOfProcessing);
-
final GrantRequest grantRequest = buildGrantRequest();
final InlineResponse201 grantResponse = sendGrantRequest(grantRequest);
final List<InlineResponse201InstantiatedVnfInfoVnfcResourceInfo> vnfcs = handleGrantResponse(grantResponse);
} catch (final Exception exception) {
LOGGER.error("Error in OperationProgressor ", exception);
}
-
}
private void sleep(final long milliSeconds) {
}
private VnfLcmOperationOccurrenceNotification buildNotification(final NotificationStatusEnum status,
- final OperationStateEnum operationState) {
+ final OperationStateEnum operationState) {
final VnfLcmOperationOccurrenceNotification notification = new VnfLcmOperationOccurrenceNotification();
notification.setId(UUID.randomUUID().toString());
notification.setNotificationType(NotificationTypeEnum.VNFLCMOPERATIONOCCURRENCENOTIFICATION);
vnfInstanceLink.setHref(getVnfLink());
links.setVnfInstance(vnfInstanceLink);
-
final LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance operationLink =
new LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance();
operationLink.setHref(getOperationLink());
LOGGER.info("Sending notification: {}", notification);
try {
final SubscriptionsAuthenticationParamsBasic subscriptionAuthentication =
- subscriptionService.getSubscriptions().iterator().next().getAuthentication().getParamsBasic();
+ getLastLccnSubscriptionRequest().getAuthentication().getParamsBasic();
final String auth =
subscriptionAuthentication.getUserName() + ":" + subscriptionAuthentication.getPassword();
final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1));
String authHeader = "Basic " + new String(encodedAuth);
-
notificationClient.lcnVnfLcmOperationOccurrenceNotificationPostWithHttpInfo(notification,
MediaType.APPLICATION_JSON, authHeader);
} catch (final ApiException exception) {
LOGGER.error("Error sending notification: " + notification, exception);
LOGGER.error("Response code: {}, body: {}, basePath: {}", exception.getCode(), exception.getResponseBody(),
notificationClient.getApiClient().getBasePath());
-
}
}
-
public GrantRequest buildGrantRequest() {
final GrantRequest grantRequest = new GrantRequest();
grantRequest.setVnfInstanceId(operation.getVnfInstanceId());
private InlineResponse201 sendGrantRequest(final GrantRequest grantRequest) {
LOGGER.info("Sending grant request: {}", grantRequest);
try {
-
final SubscriptionsAuthenticationParamsOauth2ClientCredentials subscriptionAuthentication =
- subscriptionService.getSubscriptions().iterator().next().getAuthentication()
- .getParamsOauth2ClientCredentials();
+ getLastLccnSubscriptionRequest().getAuthentication().getParamsOauth2ClientCredentials();
+ SubscriptionsAuthenticationParamsBasic paramsBasic =
+ getLastLccnSubscriptionRequest().getAuthentication().getParamsBasic();
final String authHeader = applicationConfig.getGrantAuth().equals("oauth")
? "Bearer " + getToken(notificationClient.getApiClient(), subscriptionAuthentication)
- : null;
+ : getAuthorizationHeader(paramsBasic.getUserName(), paramsBasic.getPassword());
+ LOGGER.info("Sending grant request with authorization: {}", authHeader);
final ApiResponse<InlineResponse201> response = grantClient.grantsPostWithHttpInfo(grantRequest,
MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON, authHeader);
LOGGER.info("Grant Response: {}", response);
return response.getData();
} catch (final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiException exception) {
+ LOGGER.error("Status: {}", exception.getCode());
+ LOGGER.error("ResponseHeaders: {}", exception.getResponseHeaders());
+ LOGGER.error("ResponseBody: {}", exception.getResponseBody());
LOGGER.error("Error sending notification: " + grantRequest, exception);
return null;
}
}
private String getToken(final ApiClient apiClient,
- final SubscriptionsAuthenticationParamsOauth2ClientCredentials oauthClientCredentials) {
+ final SubscriptionsAuthenticationParamsOauth2ClientCredentials oauthClientCredentials) {
final String basePath = apiClient.getBasePath().substring(0, apiClient.getBasePath().indexOf("/so/"));
final String tokenUrl = basePath + "/oauth/token?grant_type=client_credentials";
connection.connect();
return getResponse(connection).get("access_token").getAsString();
-
} catch (IOException exception) {
LOGGER.error("Error getting token", exception);
return null;
private String getAuthorizationHeader(
final SubscriptionsAuthenticationParamsOauth2ClientCredentials oauthClientCredentials) {
- final String auth = oauthClientCredentials.getClientId() + ":" + oauthClientCredentials.getClientPassword();
+ return getAuthorizationHeader(oauthClientCredentials.getClientId(), oauthClientCredentials.getClientPassword());
+ }
+
+ private String getAuthorizationHeader(final String username, final String password) {
+ final String auth = username + ":" + password;
final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8));
return "Basic " + new String(encodedAuth);
}
return jsonObject;
}
-}
+ private LccnSubscriptionRequest getLastLccnSubscriptionRequest() {
+ final Collection<LccnSubscriptionRequest> subscriptions = subscriptionService.getSubscriptions();
+ final Iterator<LccnSubscriptionRequest> iterator = subscriptions.iterator();
+
+ LccnSubscriptionRequest last = null;
+
+ while (iterator.hasNext()) {
+ last = iterator.next();
+ }
+
+ return last;
+ }
+}
\ No newline at end of file