svc_www is working!
authorivan <ivan>
Mon, 11 Feb 2002 19:38:58 +0000 (19:38 +0000)
committerivan <ivan>
Mon, 11 Feb 2002 19:38:58 +0000 (19:38 +0000)
also auto-create and add A records if necessary using apacheip config file.

and show all domain_records on view/svc_domain.cgi page

FS/FS/Conf.pm
FS/FS/svc_www.pm
httemplate/edit/process/svc_www.cgi [new file with mode: 0644]
httemplate/edit/svc_acct.cgi
httemplate/view/svc_domain.cgi
httemplate/view/svc_www.cgi

index f68d84e..3a4f5b9 100644 (file)
@@ -198,6 +198,13 @@ httemplate/docs/config.html
   },
 
   {
   },
 
   {
+    'key'         => 'apacheip',
+    'section'     => 'apache',
+    'description' => 'The current IP address to assign to new virtual hosts',
+    'type'        => 'text',
+  },
+
+  {
     'key'         => 'apachemachine',
     'section'     => 'apache',
     'description' => 'A machine with the apacheroot directory and user home directories.  The existance of this file enables setup of virtual host directories, and, in conjunction with the `home\' configuration file, symlinks into user home directories.',
     'key'         => 'apachemachine',
     'section'     => 'apache',
     'description' => 'A machine with the apacheroot directory and user home directories.  The existance of this file enables setup of virtual host directories, and, in conjunction with the `home\' configuration file, symlinks into user home directories.',
index d4e3988..f09a3f8 100644 (file)
@@ -1,13 +1,14 @@
 package FS::svc_www;
 
 use strict;
 package FS::svc_www;
 
 use strict;
-use vars qw(@ISA $conf $apacheroot $apachemachine $nossh_hack );
+use vars qw(@ISA $conf $apacheroot $apachemachine $apacheip $nossh_hack );
 #use FS::Record qw( qsearch qsearchs );
 #use FS::Record qw( qsearch qsearchs );
-use FS::Record qw( qsearchs );
+use FS::Record qw( qsearchs dbh );
 use FS::svc_Common;
 use FS::cust_svc;
 use FS::domain_record;
 use FS::svc_acct;
 use FS::svc_Common;
 use FS::cust_svc;
 use FS::domain_record;
 use FS::svc_acct;
+use FS::svc_domain;
 use Net::SSH qw(ssh);
 
 @ISA = qw( FS::svc_Common );
 use Net::SSH qw(ssh);
 
 @ISA = qw( FS::svc_Common );
@@ -17,6 +18,7 @@ $FS::UID::callback{'FS::svc_www'} = sub {
   $conf = new FS::Conf;
   $apacheroot = $conf->config('apacheroot');
   $apachemachine = $conf->config('apachemachine');
   $conf = new FS::Conf;
   $apacheroot = $conf->config('apacheroot');
   $apachemachine = $conf->config('apachemachine');
+  $apacheip = $conf->config('apacheip');
 };
 
 =head1 NAME
 };
 
 =head1 NAME
@@ -101,11 +103,50 @@ setting $FS::svc_www::nossh_hack true.
 
 sub insert {
   my $self = shift;
 
 sub insert {
   my $self = shift;
-  my $error;
 
 
-  $error = $self->SUPER::insert;
+  my $error = $self->check;
   return $error if $error;
 
   return $error if $error;
 
+  local $SIG{HUP} = 'IGNORE';
+  local $SIG{INT} = 'IGNORE';
+  local $SIG{QUIT} = 'IGNORE';
+  local $SIG{TERM} = 'IGNORE';
+  local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  #if ( $self->recnum =~ /^([\w\-]+|\@)\.(([\w\.\-]+\.)+\w+)$/ ) {
+  if ( $self->recnum =~ /^([\w\-]+|\@)\.(\d+)$/ ) {
+    my( $reczone, $domain_svcnum ) = ( $1, $2 );
+    unless ( $apacheip ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "Configuration option apacheip not set; can't autocreate A record";
+             #"for $reczone". $svc_domain->domain;
+    }
+    my $domain_record = new FS::domain_record {
+      'svcnum'  => $domain_svcnum,
+      'reczone' => $reczone,
+      'recaf'   => 'IN',
+      'rectype' => 'A',
+      'recdata' => $apacheip,
+    };
+    $error = $domain_record->insert;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+    $self->recnum($domain_record->recnum);
+  }
+
+  $error = $self->SUPER::insert;
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
   my $domain_record = qsearchs('domain_record', { 'recnum' => $self->recnum } );    # or die ?
   my $zone = $domain_record->reczone;
     # or die ?
   my $domain_record = qsearchs('domain_record', { 'recnum' => $self->recnum } );    # or die ?
   my $zone = $domain_record->reczone;
     # or die ?
@@ -137,6 +178,7 @@ sub insert {
     );
   }
 
     );
   }
 
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
   '';
 }
 
   '';
 }
 
@@ -187,7 +229,7 @@ Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>).
 
 =item check
 
 
 =item check
 
-Checks all fields to make sure this is a valid example.  If there is
+Checks all fields to make sure this is a valid web virtual host.  If there is
 an error, returns the error, otherwise returns false.  Called by the insert
 and repalce methods.
 
 an error, returns the error, otherwise returns false.  Called by the insert
 and repalce methods.
 
@@ -202,13 +244,40 @@ sub check {
 
   my $error =
     $self->ut_numbern('svcnum')
 
   my $error =
     $self->ut_numbern('svcnum')
-    || $self->ut_number('recnum')
+#    || $self->ut_number('recnum')
     || $self->ut_number('usersvc')
   ;
   return $error if $error;
 
     || $self->ut_number('usersvc')
   ;
   return $error if $error;
 
-  return "Unknown recnum: ". $self->recnum
-    unless qsearchs('domain_record', { 'recnum' => $self->recnum } );
+  if ( $self->recnum =~ /^(\d+)$/ ) {
+  
+    $self->recnum($1);
+    return "Unknown recnum: ". $self->recnum
+      unless qsearchs('domain_record', { 'recnum' => $self->recnum } );
+
+  } elsif ( $self->recnum =~ /^([\w\-]+|\@)\.(([\w\.\-]+\.)+\w+)$/ ) {
+
+    my( $reczone, $domain ) = ( $1, $2 );
+
+    my $svc_domain = qsearchs( 'svc_domain', { 'domain' => $domain } )
+      or return "unknown domain $domain (recnum $1.$2)";
+
+    my $domain_record = qsearchs( 'domain_record', {
+      'reczone' => $reczone,
+      'svcnum' => $svc_domain->svcnum,
+    });
+
+    if ( $domain_record ) {
+      $self->recnum($domain_record->recnum);
+    } else {
+      #insert will create it
+      #$self->recnum("$reczone.$domain");
+      $self->recnum("$reczone.". $svc_domain->svcnum);
+    }
+
+  } else {
+    return "Illegal recnum: ". $self->recnum;
+  }
 
   return "Unknown usersvc (svc_acct.svcnum): ". $self->usersvc
     unless qsearchs('svc_acct', { 'svcnum' => $self->usersvc } );
 
   return "Unknown usersvc (svc_acct.svcnum): ". $self->usersvc
     unless qsearchs('svc_acct', { 'svcnum' => $self->usersvc } );
@@ -218,10 +287,6 @@ sub check {
 
 =back
 
 
 =back
 
-=head1 VERSION
-
-$Id: svc_www.pm,v 1.6 2001-09-06 20:41:59 ivan Exp $
-
 =head1 BUGS
 
 =head1 SEE ALSO
 =head1 BUGS
 
 =head1 SEE ALSO
diff --git a/httemplate/edit/process/svc_www.cgi b/httemplate/edit/process/svc_www.cgi
new file mode 100644 (file)
index 0000000..38d5e1c
--- /dev/null
@@ -0,0 +1,36 @@
+<%
+
+$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!";
+my $svcnum = $1;
+
+my $old;
+if ( $svcnum ) {
+  $old = qsearchs('svc_acct', { 'svcnum' => $svcnum } )
+    or die "fatal: can't find account (svcnum $svcnum)!";
+} else {
+  $old = '';
+}
+
+my $new = new FS::svc_www ( {
+  map {
+    ($_, scalar($cgi->param($_)));
+  #} qw(svcnum pkgnum svcpart recnum usersvc)
+  } ( fields('svc_www'), qw( pkgnum svcpart ) )
+} );
+
+my $error;
+if ( $svcnum ) {
+  $error = $new->replace($old);
+} else {
+  $error = $new->insert;
+  $svcnum = $new->svcnum;
+}
+
+if ( $error ) {
+  $cgi->param('error', $error);
+  print $cgi->redirect(popurl(2). "svc_www.cgi?". $cgi->query_string );
+} else {
+  print $cgi->redirect(popurl(3). "view/svc_www.cgi?" . $svcnum );
+}
+
+%>
index e42745c..3fa7019 100755 (executable)
@@ -105,7 +105,6 @@ print 'Service # '. ( $svcnum ? "<B>$svcnum</B>" : " (NEW)" ). '<BR>'.
 END
 
 print &ntable("#cccccc",2), <<END;
 END
 
 print &ntable("#cccccc",2), <<END;
-<TR><TD>
 <TR><TD ALIGN="right">Username</TD>
 <TD><INPUT TYPE="text" NAME="username" VALUE="$username" SIZE=$ulen2 MAXLENGTH=$ulen></TD></TR>
 <TR><TD ALIGN="right">Password</TD>
 <TR><TD ALIGN="right">Username</TD>
 <TD><INPUT TYPE="text" NAME="username" VALUE="$username" SIZE=$ulen2 MAXLENGTH=$ulen></TD></TR>
 <TR><TD ALIGN="right">Password</TD>
index f302110..f086cda 100755 (executable)
@@ -46,6 +46,17 @@ print header('Domain View', menubar(
       qq!<BR>Catch all email <A HREF="${p}misc/catchall.cgi?$svcnum">(change)</A>:!,
       $email ? "<B>$email</B>." : "<I>(none)<I>",
       qq!<BR><BR><A HREF="http://www.geektools.com/cgi-bin/proxy.cgi?query=$domain;targetnic=auto">View whois information.</A>!,
       qq!<BR>Catch all email <A HREF="${p}misc/catchall.cgi?$svcnum">(change)</A>:!,
       $email ? "<B>$email</B>." : "<I>(none)<I>",
       qq!<BR><BR><A HREF="http://www.geektools.com/cgi-bin/proxy.cgi?query=$domain;targetnic=auto">View whois information.</A>!,
-      '</BODY></HTML>',
+      '<BR><BR>', ntable("",2),
+      '<tr><th>Zone</th><th>Type</th><th>Data</th></tr>',
 ;
 ;
+
+foreach my $domain_record ( qsearch('domain_record', { svcnum => $svcnum } ) ) {
+  print '<tr><td>'. $domain_record->reczone. '</td>'.
+        '<td>'. $domain_record->recaf. ' '. $domain_record->rectype. '</td>'.
+        '<td>'. $domain_record->recdata. '</td></tr>';
+}
+print '</table>';
+
+print '</BODY></HTML>';
+
 %>
 %>
index bd8ae36..a82921f 100644 (file)
@@ -10,7 +10,7 @@ my $svc_www = qsearchs( 'svc_www', { 'svcnum' => $svcnum } )
 #false laziness w/all svc_*.cgi
 my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } );
 my $pkgnum = $cust_svc->getfield('pkgnum');
 #false laziness w/all svc_*.cgi
 my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } );
 my $pkgnum = $cust_svc->getfield('pkgnum');
-my($cust_pkg, custnum);
+my($cust_pkg, $custnum);
 if ($pkgnum) {
   $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } );
   $custnum = $cust_pkg->custnum;
 if ($pkgnum) {
   $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } );
   $custnum = $cust_pkg->custnum;
@@ -24,6 +24,10 @@ my $domain_record = qsearchs('domain_record', { 'recnum' => $svc_www->recnum } )
   or die "svc_www: Unknown recnum". $svc_www->recnum;
 
 my $www = $domain_record->reczone;
   or die "svc_www: Unknown recnum". $svc_www->recnum;
 
 my $www = $domain_record->reczone;
+unless ( $www =~ /\.$/ ) {
+  my $svc_domain = qsearchs('svc_domain', { svcnum=>$domain_record->svcnum } );
+  $www .= '.'. $svc_domain->domain;
+}
 
 print header('Website View', menubar(
   ( ( $custnum )
 
 print header('Website View', menubar(
   ( ( $custnum )
@@ -36,7 +40,7 @@ print header('Website View', menubar(
   "Main menu" => $p,
 )),
       "Service #$svcnum",
   "Main menu" => $p,
 )),
       "Service #$svcnum",
-      "<BR>Website name: <B>$www</B>.",
+      qq!<BR>Website name: <B><A HREF="http://$www">$www</A></B>!,
       '</BODY></HTML>',                
 ;
 %>
       '</BODY></HTML>',                
 ;
 %>