summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/Conf.pm7
-rw-r--r--FS/FS/svc_www.pm89
-rw-r--r--httemplate/edit/process/svc_www.cgi36
-rwxr-xr-xhttemplate/edit/svc_acct.cgi1
-rwxr-xr-xhttemplate/view/svc_domain.cgi13
-rw-r--r--httemplate/view/svc_www.cgi8
6 files changed, 138 insertions, 16 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index f68d84e..3a4f5b9 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -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.',
diff --git a/FS/FS/svc_www.pm b/FS/FS/svc_www.pm
index d4e3988..f09a3f8 100644
--- a/FS/FS/svc_www.pm
+++ b/FS/FS/svc_www.pm
@@ -1,13 +1,14 @@
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( 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_domain;
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');
+ $apacheip = $conf->config('apacheip');
};
=head1 NAME
@@ -101,11 +103,50 @@ setting $FS::svc_www::nossh_hack true.
sub insert {
my $self = shift;
- my $error;
- $error = $self->SUPER::insert;
+ my $error = $self->check;
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 ?
@@ -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
-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.
@@ -202,13 +244,40 @@ sub check {
my $error =
$self->ut_numbern('svcnum')
- || $self->ut_number('recnum')
+# || $self->ut_number('recnum')
|| $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 } );
@@ -218,10 +287,6 @@ sub check {
=back
-=head1 VERSION
-
-$Id: svc_www.pm,v 1.6 2001-09-06 20:41:59 ivan Exp $
-
=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
index 0000000..38d5e1c
--- /dev/null
+++ b/httemplate/edit/process/svc_www.cgi
@@ -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 );
+}
+
+%>
diff --git a/httemplate/edit/svc_acct.cgi b/httemplate/edit/svc_acct.cgi
index e42745c..3fa7019 100755
--- a/httemplate/edit/svc_acct.cgi
+++ b/httemplate/edit/svc_acct.cgi
@@ -105,7 +105,6 @@ print 'Service # '. ( $svcnum ? "<B>$svcnum</B>" : " (NEW)" ). '<BR>'.
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>
diff --git a/httemplate/view/svc_domain.cgi b/httemplate/view/svc_domain.cgi
index f302110..f086cda 100755
--- a/httemplate/view/svc_domain.cgi
+++ b/httemplate/view/svc_domain.cgi
@@ -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>!,
- '</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>';
+
%>
diff --git a/httemplate/view/svc_www.cgi b/httemplate/view/svc_www.cgi
index bd8ae36..a82921f 100644
--- a/httemplate/view/svc_www.cgi
+++ b/httemplate/view/svc_www.cgi
@@ -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');
-my($cust_pkg, custnum);
+my($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;
+unless ( $www =~ /\.$/ ) {
+ my $svc_domain = qsearchs('svc_domain', { svcnum=>$domain_record->svcnum } );
+ $www .= '.'. $svc_domain->domain;
+}
print header('Website View', menubar(
( ( $custnum )
@@ -36,7 +40,7 @@ print header('Website View', menubar(
"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>',
;
%>