io.hakbot.publishers.kennasecurity.KennaSecurityPublisher.java Source code

Java tutorial

Introduction

Here is the source code for io.hakbot.publishers.kennasecurity.KennaSecurityPublisher.java

Source

/*
 * This file is part of Hakbot Origin Controller.
 *
 * Hakbot Origin Controller is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * Hakbot Origin Controller is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * Hakbot Origin Controller. If not, see http://www.gnu.org/licenses/.
 */
package io.hakbot.publishers.kennasecurity;

import alpine.logging.Logger;
import io.hakbot.controller.model.Job;
import io.hakbot.controller.model.JobArtifact;
import io.hakbot.controller.plugin.RemoteInstance;
import io.hakbot.controller.plugin.RemoteInstanceAutoConfig;
import io.hakbot.publishers.BasePublisher;
import io.hakbot.util.JsonUtil;
import org.apache.commons.collections4.MapUtils;
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;
import javax.json.JsonObject;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import java.io.File;
import java.io.IOException;
import java.util.Map;

public class KennaSecurityPublisher extends BasePublisher {

    // Setup logging
    private static final Logger LOGGER = Logger.getLogger(KennaSecurityPublisher.class);

    private static Map<String, RemoteInstance> instanceMap = new RemoteInstanceAutoConfig()
            .createMap(Type.PUBLISHER, "kennasecurity");

    private RemoteInstance remoteInstance;

    @Override
    public boolean initialize(Job job) {
        super.initialize(job);

        final JsonObject payload = JsonUtil.toJsonObject(getPublisherPayload(job).getContents());
        remoteInstance = instanceMap.get(MapUtils.getString(payload, "instance"));
        if (remoteInstance == null) {
            addProcessingMessage(job, "KennaSecurity instance cannot be found or is not defined.");
            return false;
        }
        return true;
    }

    public boolean publish(Job job) {
        final JobArtifact artifact = getArtifact(job, JobArtifact.Type.PROVIDER_RESULT);
        final File report = getResult(artifact, new File(System.getProperty("java.io.tmpdir")));
        if (report == null) {
            return false;
        }
        boolean success = false;
        try {
            final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
            final FileDataBodyPart filePart = new FileDataBodyPart("file", report);
            final FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
            final FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart.bodyPart(filePart);
            final WebTarget target = client.target(remoteInstance.getUrl());
            target.request().header("X-Risk-Token", remoteInstance.getToken());
            final Response response = target.request().post(Entity.entity(multipart, multipart.getMediaType()));
            success = response.getStatus() == 200;
            if (!success) {
                addProcessingMessage(job, "Failed to upload result to KennaSecurity");
                addProcessingMessage(job, response.getStatusInfo().getReasonPhrase());
            }
            formDataMultiPart.close();
        } catch (IOException e) {
            LOGGER.error(e.getMessage());
        }
        return success;
    }

    public String getName() {
        return "KennaSecurity";
    }

    public String getDescription() {
        return "Publishes results to KennaSecurity via the file connector API.";
    }

}