Created
September 13, 2013 19:53
-
-
Save axeda/6555295 to your computer and use it in GitHub Desktop.
Transfers file to SFTP server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.axeda.drm.sdk.Context | |
import com.axeda.drm.sdk.scripto.Request | |
import com.axeda.drm.sdk.audit.AuditCategory | |
import com.axeda.drm.sdk.audit.AuditMessage | |
import com.axeda.drm.sdk.contact.Location | |
import com.axeda.drm.sdk.contact.Organization | |
import com.axeda.drm.sdk.data.UploadedFile | |
import com.axeda.drm.sdk.device.Device | |
import com.axeda.drm.sdk.rules.ActionContext | |
import com.axeda.drm.util.Emailer | |
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObject | |
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectSearchCriteria | |
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectService | |
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectType | |
import com.axeda.platform.sdk.v1.services.extobject.Property | |
import com.axeda.platform.sdk.v1.services.extobject.PropertyDataType | |
import com.axeda.platform.sdk.v1.services.extobject.PropertyType | |
import com.axeda.platform.sdk.v1.services.factories.SpringExtendedServiceFactory | |
import com.jcraft.jsch.Channel | |
import com.jcraft.jsch.ChannelSftp | |
import com.jcraft.jsch.JSch | |
import com.jcraft.jsch.Session | |
import javax.mail.internet.InternetAddress | |
import static com.axeda.sdk.v2.dsl.Bridges.* | |
/** | |
* OutboundSFTP.groovy | |
* | |
* Transfers file to SFTP server | |
* | |
* @param server - (REQ):Str server address. | |
* | |
* @param port - (REQ):Str server port. | |
* @param user - (REQ):Str FTP username. | |
* @param pass - (REQ):Str FTP password. | |
* @param workingdir - (REQ):Str FTP working directory. | |
* @param fileId - (REQ):Str Id of the FileInfo. | |
* | |
* @author sara streeter <sstreeter@axeda.com> | |
* | |
*/ | |
/** | |
* initialize our global variables | |
* json = the contents of our response | |
* infoString = a stringBuilder used to collect debug information during the script | |
* contentType = the content type we will return | |
* scriptname = The name of this Script, used in multiple places | |
*/ | |
def json = new groovy.json.JsonBuilder() | |
def infoString = new StringBuilder() | |
def contentType = "application/json" | |
def scriptName = "OutboundSFTP.groovy" | |
def root = ["result":["items":[]]] | |
try { | |
def server = Request.parameters.server | |
// you could also use external credentials for these | |
def username = Request.parameters.user | |
def password = Request.parameters.pass | |
// this is the folder to send to | |
def workingdir = Request.parameters.workingdir | |
def fileInfoId = Request.parameters.fileId | |
int port = Integer.valueOf(Request.parameters['port']) | |
logger.info(fileInfoId) | |
InputStream inputStream = fileInfoBridge.getFileData(fileInfoId) | |
logger.info(inputStream.available()) | |
def fileinfo = fileInfoBridge.findById(fileInfoId) | |
logger.info(fileinfo?.filesize) | |
def (result, failureMessage) = sendFile(server, port, username, password, workingdir, inputStream, fileinfo.label); | |
if (result){ | |
logger.info "Send successful." | |
} | |
else { | |
logger.info "Send failed." | |
} | |
} | |
catch (Exception e){ | |
logger.error e.getMessage() | |
} | |
public sendFile(String address, int port, String userName, | |
String password, String workingdir, InputStream inputStream, | |
String fileNameToStore) { | |
int TENSECONDS = 10*1000 | |
int THIRTYSECONDS = 30*1000 | |
Session session = null; | |
Channel channel = null; | |
ChannelSftp sftpChannel = null; | |
boolean error = false; | |
String failureMessage = null; | |
try { | |
JSch jsch = new JSch(); | |
session = jsch.getSession(userName, address, port); | |
session.setPassword(password) | |
session.setConfig("StrictHostKeyChecking", "no"); | |
session.setTimeout(THIRTYSECONDS) | |
session.connect(); | |
channel = session.openChannel("sftp"); | |
channel.connect(); | |
sftpChannel = (ChannelSftp)channel; | |
sftpChannel.cd(workingdir); | |
if (!sftpChannel.cd(workingdir)){ | |
throw new Exception( "Directory $workingdir does not exist.") | |
} | |
// Store the file | |
sftpChannel.put(inputStream, fileNameToStore); | |
} | |
catch (Exception e){ | |
error = true; | |
failureMessage = e.getMessage(); | |
errorStr = e.getMessage(); | |
logger.error "Could not send file to SFTP: " + errorStr | |
} | |
finally{ | |
sftpChannel?.exit(); | |
channel?.disconnect(); | |
session?.disconnect(); | |
} | |
return [!error, failureMessage] ; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment