X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fforward_shellcommands.pm;h=0f79edea074ee68878deaf72be5c1eb59176d411;hb=a2ecb1cf6a6c084c521710f1256da082f70ba9e5;hp=43d558a6947da6803a18b2350fdd66e6d0aca7e2;hpb=60527016538d1794227983d99ce3b77c8fcd7426;p=freeside.git
diff --git a/FS/FS/part_export/forward_shellcommands.pm b/FS/FS/part_export/forward_shellcommands.pm
index 43d558a69..0f79edea0 100644
--- a/FS/FS/part_export/forward_shellcommands.pm
+++ b/FS/FS/part_export/forward_shellcommands.pm
@@ -1,11 +1,59 @@
package FS::part_export::forward_shellcommands;
use strict;
-use vars qw(@ISA);
+use vars qw(@ISA %info);
+use Tie::IxHash;
use FS::part_export;
@ISA = qw(FS::part_export);
+tie my %options, 'Tie::IxHash',
+ 'user' => { label=>'Remote username', default=>'root' },
+ 'useradd' => { label=>'Insert command',
+ default=>'',
+ },
+ 'userdel' => { label=>'Delete command',
+ default=>'',
+ },
+ 'usermod' => { label=>'Modify command',
+ default=>'',
+ },
+;
+
+%info = (
+ 'svc' => 'svc_forward',
+ 'desc' => 'Run remote commands via SSH, for forwards',
+ 'options' => \%options,
+ 'notes' => <<'END'
+Run remote commands via SSH, for forwards. You will need to
+setup SSH for unattended operation.
+
Use these buttons for some useful presets:
+
+The following variables are available for interpolation (prefixed with
+new_
or old_
for replace operations):
+
+ $username
- username of forward source
+ $domain
- domain of forward source
+ $source
- forward source ($username@$domain)
+ $destination
- forward destination
+ - All other fields in svc_forward are also available.
+
+END
+);
+
sub rebless { shift; }
sub _export_insert {
@@ -21,6 +69,7 @@ sub _export_delete {
sub _export_command {
my ( $self, $action, $svc_forward ) = (shift, shift, shift);
my $command = $self->option($action);
+ return '' if $command =~ /^\s*$/;
#set variable for the command
no strict 'vars';
@@ -29,13 +78,20 @@ sub _export_command {
${$_} = $svc_forward->getfield($_) foreach $svc_forward->fields;
}
- my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $self->srcsvc } );
- $username = $svc_acct->username;
- $domain = $svc_acct->domain;
- if ($self->dstsvc) {
- $destination = $self->dstsvc_acct->email;
+ if ( $svc_forward->srcsvc ) {
+ my $srcsvc_acct = $svc_forward->srcsvc_acct;
+ $username = $srcsvc_acct->username;
+ $domain = $srcsvc_acct->domain;
+ $source = $srcsvc_acct->email;
+ } else {
+ $source = $svc_forward->src;
+ ( $username, $domain ) = split(/\@/, $source);
+ }
+
+ if ($svc_forward->dstsvc) {
+ $destination = $svc_forward->dstsvc_acct->email;
} else {
- $destination = $self->dst;
+ $destination = $svc_forward->dst;
}
#done setting variables for the command
@@ -59,22 +115,36 @@ sub _export_replace {
${"new_$_"} = $new->getfield($_) foreach $new->fields;
}
- my $old_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $self->srcsvc } );
- $old_username = $old_svc_acct->username;
- $old_domain = $old_svc_acct->domain;
- if ($self->dstsvc) {
- $old_destination = $self->dstsvc_acct->email;
+ if ( $old->srcsvc ) {
+ my $srcsvc_acct = $old->srcsvc_acct;
+ $old_username = $srcsvc_acct->username;
+ $old_domain = $srcsvc_acct->domain;
+ $old_source = $srcsvc_acct->email;
} else {
- $old_destination = $self->dst;
+ $old_source = $old->src;
+ ( $old_username, $old_domain ) = split(/\@/, $old_source);
}
- my $new_svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $self->srcsvc } );
- $new_username = $new_svc_acct->username;
- $new_domain = $new_svc_acct->domain;
- if ($self->dstsvc) {
- $new_destination = $self->dstsvc_acct->email;
+ if ( $old->dstsvc ) {
+ $old_destination = $old->dstsvc_acct->email;
} else {
- $new_destination = $self->dst;
+ $old_destination = $old->dst;
+ }
+
+ if ( $new->srcsvc ) {
+ my $srcsvc_acct = $new->srcsvc_acct;
+ $new_username = $srcsvc_acct->username;
+ $new_domain = $srcsvc_acct->domain;
+ $new_source = $srcsvc_acct->email;
+ } else {
+ $new_source = $new->src;
+ ( $new_username, $new_domain ) = split(/\@/, $new_source);
+ }
+
+ if ( $new->dstsvc ) {
+ $new_destination = $new->dstsvc_acct->email;
+ } else {
+ $new_destination = $new->dst;
}
#done setting variables for the command
@@ -97,7 +167,7 @@ sub shellcommands_queue {
}
sub ssh_cmd { #subroutine, not method
- use Net::SSH '0.07';
+ use Net::SSH '0.08';
&Net::SSH::ssh_cmd( { @_ } );
}
@@ -108,3 +178,5 @@ sub ssh_cmd { #subroutine, not method
#sub shellcommands_delete { #subroutine, not method
#}
+1;
+