package org.ourgrid.peer.business.requester;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.common.internal.response.LoggerResponseTO;
import org.ourgrid.common.internal.response.ReleaseResponseTO;
import org.ourgrid.common.statistics.control.PeerControl;
import org.ourgrid.peer.business.controller.messages.DiscoveryServiceClientMessages;
import org.ourgrid.peer.business.dao.PeerDAOFactory;
import org.ourgrid.peer.dao.DiscoveryServiceClientDAO;
import org.ourgrid.peer.request.NotifyRemoteWorkerProviderRecoveryRequestTO;
import br.edu.ufcg.lsd.commune.network.certification.CertificateCRLPair;
import br.edu.ufcg.lsd.commune.network.certification.CertificationUtils;
public class NotifyRemoteWorkerProviderRecoveryRequester implements RequesterIF<NotifyRemoteWorkerProviderRecoveryRequestTO> {
public List<IResponseTO> execute(NotifyRemoteWorkerProviderRecoveryRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
if (CertificationUtils.getCertSubjectDN(request.getMyCertPath()).equals(
CertificationUtils.getCertSubjectDN(request.getRwpCertPath()))) {
LoggerResponseTO loggerResponse = new LoggerResponseTO(
DiscoveryServiceClientMessages.getSameCertificateDNMessage(request.getRwpAddress()),
LoggerResponseTO.DEBUG);
responses.add(loggerResponse);
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(request.getRwpAddress());
responses.add(releaseTO);
return responses;
}
Collection<CertificateCRLPair> receivedPeersCAsData = PeerDAOFactory.getInstance().
getPeerCertificationDAO().getReceivedPeersCAsData();
if (receivedPeersCAsData != null && !receivedPeersCAsData.isEmpty()) {
if(!CertificationUtils.isCertificateValid(request.getRwpCertPath())) {
LoggerResponseTO loggerResponse = new LoggerResponseTO(
DiscoveryServiceClientMessages.getInvalidCertPathMessage(request.getRwpAddress()),
LoggerResponseTO.WARN);
responses.add(loggerResponse);
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(request.getRwpAddress());
responses.add(releaseTO);
return responses;
}
if(!CertificationUtils.isCertPathIssuedByCA(request.getRwpCertPath(), receivedPeersCAsData)) {
LoggerResponseTO loggerResponse = new LoggerResponseTO(
DiscoveryServiceClientMessages.getNonIssuedCertPathMessage(request.getRwpAddress()),
LoggerResponseTO.WARN);
responses.add(loggerResponse);
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(request.getRwpAddress());
responses.add(releaseTO);
return responses;
}
}
DiscoveryServiceClientDAO dao = PeerDAOFactory.getInstance().getDiscoveryServiceClientDAO();
dao.addRemoteWorkerProviderAddress(request.getRwpAddress());
PeerControl.getInstance().insertPeer(responses, request.getRwpUserAtServer(),
CertificationUtils.getCertSubjectDN(request.getRwpCertPath()));
return responses;
}
}