/*
* Copyright Siemens AG, 2013-2015. Part of the SW360 Portal Project.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.sw360.portal.portlets.admin;
import com.liferay.portal.kernel.portlet.PortletResponseUtil;
import org.eclipse.sw360.datahandler.thrift.RequestStatus;
import org.eclipse.sw360.datahandler.thrift.fossology.FossologyHostFingerPrint;
import org.eclipse.sw360.datahandler.thrift.fossology.FossologyService;
import org.eclipse.sw360.portal.common.PortalConstants;
import org.eclipse.sw360.portal.common.UsedAsLiferayAction;
import org.eclipse.sw360.portal.portlets.Sw360Portlet;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import javax.portlet.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
public class FossologyAdminPortlet extends Sw360Portlet {
private static final Logger log = Logger.getLogger(FossologyAdminPortlet.class);
@Override
public void doView(RenderRequest request, RenderResponse response) throws IOException, PortletException {
List<FossologyHostFingerPrint> fingerPrints;
try {
FossologyService.Iface client = thriftClients.makeFossologyClient();
fingerPrints = client.getFingerPrints();
request.setAttribute(PortalConstants.FINGER_PRINTS, fingerPrints);
} catch (TException e) {
request.setAttribute(PortalConstants.FINGER_PRINTS, Collections.emptyList());
log.error("Error retrieving fingerprints", e);
}
super.doView(request, response);
}
@UsedAsLiferayAction
public void setFingerPrints(ActionRequest request, ActionResponse response) throws PortletException, IOException {
List<FossologyHostFingerPrint> fingerPrints;
FossologyService.Iface client;
try {
client = thriftClients.makeFossologyClient();
fingerPrints = client.getFingerPrints();
} catch (TException e) {
log.error("Error retrieving fingerprints when setting", e);
return;
}
for (FossologyHostFingerPrint fingerPrint : fingerPrints) {
String bool = request.getParameter(fingerPrint.fingerPrint);
fingerPrint.trusted = "on".equals(bool);
}
try {
client.setFingerPrints(fingerPrints);
} catch (TException e) {
log.error("Problems setting finger prints", e);
}
}
@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws IOException, PortletException {
String action = request.getParameter(PortalConstants.ACTION);
if (PortalConstants.FOSSOLOGY_CHECK_CONNECTION.equals(action)) {
serveCheckConnection(request, response);
} else if (PortalConstants.FOSSOLOGY_DEPLOY_SCRIPTS.equals(action)) {
serveDeployScripts(request, response);
} else if (PortalConstants.FOSSOLOGY_GET_PUBKEY.equals(action)) {
servePublicKeyFile(request, response);
}
}
private void servePublicKeyFile(ResourceRequest request, ResourceResponse response) {
try {
String publicKey = thriftClients.makeFossologyClient().getPublicKey();
final ByteArrayInputStream keyStream = new ByteArrayInputStream(publicKey.getBytes());
PortletResponseUtil.sendFile(request, response, "sw360_id.pub", keyStream, "text/plain");
} catch (IOException | TException e) {
log.error("An error occurred while retrieving the public key", e);
}
}
public void serveDeployScripts(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
RequestStatus deploy = RequestStatus.FAILURE;
try {
deploy = thriftClients.makeFossologyClient().deployScripts();
} catch (TException e) {
log.error("Error connecting to backend", e);
}
renderRequestStatus(request, response, deploy);
}
public void serveCheckConnection(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
RequestStatus checkConnection = RequestStatus.FAILURE;
try {
checkConnection = thriftClients.makeFossologyClient().checkConnection();
} catch (TException e) {
log.error("Error connecting to backend", e);
}
renderRequestStatus(request, response, checkConnection);
}
}