package fr.techad.sonar.gerrit.network.ssh; import java.io.IOException; import java.nio.ByteBuffer; import fi.jpalomaki.ssh.Result; import fi.jpalomaki.ssh.SshClient; import fi.jpalomaki.ssh.UserAtHost; import fi.jpalomaki.ssh.jsch.JschSshClient; import org.jetbrains.annotations.NotNull; import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; import fr.techad.sonar.GerritConfiguration; import fr.techad.sonar.gerrit.GerritConnector; public class GerritSshConnector implements GerritConnector { private static final Logger LOG = Loggers.get(GerritSshConnector.class); private static final String CMD_LIST_FILES = "gerrit query --format=JSON --files --current-patch-set status:open change:%s limit:1"; private static final String CMD_SET_REVIEW = "gerrit review %s -j"; private final GerritConfiguration gerritConfiguration; private final UserAtHost userAtHost; public GerritSshConnector(GerritConfiguration gerritConfiguration) { LOG.debug("[GERRIT PLUGIN] Instanciating GerritSshConnector"); this.gerritConfiguration = gerritConfiguration; userAtHost = new UserAtHost(gerritConfiguration.getUsername(), gerritConfiguration.getHost(), gerritConfiguration.getPort()); } @NotNull @Override public String listFiles() throws IOException { SshClient sshClient = new JschSshClient(gerritConfiguration.getSshKeyPath(), gerritConfiguration.getPassword()); LOG.debug("[GERRIT PLUGIN] Execute command SSH {}", String.format(CMD_LIST_FILES, gerritConfiguration.getChangeId())); Result cmdResult = sshClient.executeCommand(String.format(CMD_LIST_FILES, gerritConfiguration.getChangeId()), userAtHost); return cmdResult.stdoutAsText("UTF-8"); } @NotNull @Override public String setReview(String reviewInputAsJson) throws IOException { LOG.info("[GERRIT PLUGIN] Setting review {}", reviewInputAsJson); ByteBuffer stdin = ByteBuffer.wrap(reviewInputAsJson.getBytes("UTF-8")); SshClient sshClient = new JschSshClient(gerritConfiguration.getSshKeyPath(), gerritConfiguration.getPassword()); LOG.debug("[GERRIT PLUGIN] Execute command SSH {}", String.format(CMD_SET_REVIEW, gerritConfiguration.getRevisionId())); Result cmdResult = sshClient.executeCommand(String.format(CMD_SET_REVIEW, gerritConfiguration.getRevisionId()), stdin, userAtHost); return cmdResult.stdoutAsText(); } }