Support FTP/SCP delete operation in RemoteAccount
authorBill Erickson <berick@esilibrary.com>
Thu, 10 Jan 2013 17:25:09 +0000 (12:25 -0500)
committerMike Rylander <mrylander@gmail.com>
Wed, 13 Mar 2013 17:03:34 +0000 (13:03 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Utils/RemoteAccount.pm

index 164e227..34a7257 100644 (file)
@@ -226,7 +226,6 @@ sub key_check {
 
 
 # TOP LEVEL methods
-# TODO: delete for both FTP and SSH2
 
 sub get {
     my $self   = shift;
@@ -322,6 +321,31 @@ sub ls {
     }
 }
 
+sub delete {
+    my $self   = shift;
+    my $params = shift;
+
+    $params = {remote_file => $params} unless ref $params;
+    $self->init($params); # secondary init
+
+    my $file = $params->{remote_file};
+
+    if (!$file) {
+        $logger->warn("No file specified for deletion");
+        return undef;
+    }
+
+    $logger->info("Deleting remote file '$file'");
+
+    if ($self->type eq "FTP") {
+        return $self->delete_ftp($file);
+    } else {
+        my %keys = $self->key_check($params);
+        return $self->delete_ssh2(\%keys, $file);
+    }
+}
+
+
 # Checks if the filename part of a pathname has one or more glob characters
 # We split out the filename portion of the path
 # Detect glob or no glob.
@@ -499,6 +523,14 @@ sub ls_ssh2_full {
 
 }
 
+sub delete_ssh2 {
+    my $self = shift;
+    my $keys = shift;
+    my $file = shift;
+    my $sftp = $self->_ssh2($keys)->sftp;
+    return $sftp->unlink($file);
+}
+
 sub _slash_path {
     my $self = shift;
     my $dir  = shift || '.';
@@ -634,8 +666,10 @@ sub ls_ftp {   # returns full path like: dir/path/file.ext
     return @list;
 }
 
-sub delete_ftp { # XXX not yet used
-    $_[0]->_ftp->delete($_[1]);
+sub delete_ftp { 
+    my $self = shift;
+    my $file = shift;
+    return $self->_ftp->delete($file);
 }
 
 sub _pkg {      # Not OO