diff --git a/src/main/java/name/nathanmcrae/numbersstation/Main.java b/src/main/java/name/nathanmcrae/numbersstation/Main.java index 6057b9c..23bb1ec 100644 --- a/src/main/java/name/nathanmcrae/numbersstation/Main.java +++ b/src/main/java/name/nathanmcrae/numbersstation/Main.java @@ -1,6 +1,9 @@ package name.nathanmcrae.numbersstation; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; import com.leakyabstractions.result.api.Result; import com.leakyabstractions.result.core.Results; @@ -12,6 +15,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; +import java.time.LocalDateTime; import java.util.Date; import java.util.logging.FileHandler; import java.util.logging.Logger; @@ -135,11 +140,17 @@ public class Main extends Application { try { runStation(parsedArgs); } catch (StationRunException e) { - // TODO: Add time of run + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); + String message = "Attempted to run station '" + + parsedArgs.getStationName() + + "' at " + + LocalDateTime.now().format(dateFormatter) + + "\n\n" + + e.getMessage(); var notification = new NotificationController.NotificationParameters("Error running station '" + parsedArgs.getStationName() + "'", - e.getMessage(), - NotificationController.NotificationType.ERROR, - Optional.empty()); + message, + NotificationController.NotificationType.ERROR, + Optional.empty()); startParams = new StartParameters(Optional.of(notification)); launch(args); @@ -202,10 +213,30 @@ public class Main extends Application { messageText = new String(Files.readAllBytes(nextMessagePath)); } - // Send message using appropriate method switch (loadedStation.getMessageMethod()) { case StationSettings.MessageMethod.SFTP: //loadedStation.uploadNextMessageToSFTP(); + JSch jsch = new JSch(); + try { + Session session = jsch.getSession(loadedStation.getUsername(), loadedStation.getAddress(), 22); + session.setPassword(loadedStation.getPassword()); + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(30000); // 30 seconds timeout + + if (session.isConnected()) { + ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); + channel.connect(); + + String localFile = loadedStation.nextMessagePath().toString(); + channel.put(localFile, "www/message.txt"); + channel.exit(); + session.disconnect(); + } else { + logger.log(Level.SEVERE, "SFTP connection failed"); + } + } catch (JSchException e) { + logger.log(Level.SEVERE, "SFTP connection failed", e); + } break; case StationSettings.MessageMethod.WORDPRESS: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");