From f255042296a645e7d90c19ee6740796250cfb9f3 Mon Sep 17 00:00:00 2001 From: ivan Date: Mon, 11 Feb 2002 19:38:58 +0000 Subject: [PATCH] svc_www is working! 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 | 7 +++ FS/FS/svc_www.pm | 89 ++++++++++++++++++++++++++++++++----- httemplate/edit/process/svc_www.cgi | 36 +++++++++++++++ httemplate/edit/svc_acct.cgi | 1 - httemplate/view/svc_domain.cgi | 13 +++++- httemplate/view/svc_www.cgi | 8 +++- 6 files changed, 138 insertions(+), 16 deletions(-) create mode 100644 httemplate/edit/process/svc_www.cgi diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index f68d84e8b..3a4f5b9de 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 d4e398810..f09a3f89d 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). =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 000000000..38d5e1c79 --- /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 e42745cf7..3fa7019eb 100755 --- a/httemplate/edit/svc_acct.cgi +++ b/httemplate/edit/svc_acct.cgi @@ -105,7 +105,6 @@ print 'Service # '. ( $svcnum ? "$svcnum" : " (NEW)" ). '
'. END print &ntable("#cccccc",2), < Username Password diff --git a/httemplate/view/svc_domain.cgi b/httemplate/view/svc_domain.cgi index f30211098..f086cda1a 100755 --- a/httemplate/view/svc_domain.cgi +++ b/httemplate/view/svc_domain.cgi @@ -46,6 +46,17 @@ print header('Domain View', menubar( qq!
Catch all email (change):!, $email ? "$email." : "(none)", qq!

View whois information.!, - '', + '

', ntable("",2), + 'ZoneTypeData', ; + +foreach my $domain_record ( qsearch('domain_record', { svcnum => $svcnum } ) ) { + print ''. $domain_record->reczone. ''. + ''. $domain_record->recaf. ' '. $domain_record->rectype. ''. + ''. $domain_record->recdata. ''; +} +print ''; + +print ''; + %> diff --git a/httemplate/view/svc_www.cgi b/httemplate/view/svc_www.cgi index bd8ae36a6..a82921f1b 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", - "
Website name: $www.", + qq!
Website name: $www!, '', ; %> -- 2.11.0