private void validateConnection(Connection connection, RichUserDetails richUserDetails)
     throws ServiceException {
   try {
     validateProviderNsa(connection.getProviderNsa());
     validateConnectionId(connection.getConnectionId());
     validatePort(connection.getSourceStpId(), "sourceSTP", richUserDetails);
     validatePort(connection.getDestinationStpId(), "destSTP", richUserDetails);
   } catch (ServiceException e) {
     connection.setCurrentState(TERMINATED);
     connectionRepo.save(connection);
     throw e;
   }
 }
  @Override
  public GenericAcknowledgmentType provision(ProvisionRequestType parameters)
      throws ServiceException {
    validateOAuthScope(NsiScope.PROVISION);
    validateProviderNsa(parameters.getProvision().getProviderNSA());

    Connection connection = getConnectionOrFail(parameters.getProvision().getConnectionId());

    log.info("Received provision request for connection: {}", connection);

    NsiRequestDetails requestDetails =
        new NsiRequestDetails(parameters.getReplyTo(), parameters.getCorrelationId());
    connectionService.provision(connection.getId(), requestDetails);

    return createGenericAcknowledgment(requestDetails.getCorrelationId());
  }
  @Override
  public GenericAcknowledgmentType terminate(TerminateRequestType parameters)
      throws ServiceException {
    log.info(
        "Received a NSI terminate request for connectionId '{}'",
        parameters.getTerminate().getConnectionId());

    validateOAuthScope(NsiScope.TERMINATE);
    validateProviderNsa(parameters.getTerminate().getProviderNSA());

    Connection connection = getConnectionOrFail(parameters.getTerminate().getConnectionId());

    NsiRequestDetails requestDetails =
        new NsiRequestDetails(parameters.getReplyTo(), parameters.getCorrelationId());

    connectionService.asyncTerminate(
        connection.getId(),
        parameters.getTerminate().getRequesterNSA(),
        requestDetails,
        Security.getUserDetails());

    return createGenericAcknowledgment(requestDetails.getCorrelationId());
  }