diff options
| author | ivan <ivan> | 1998-07-13 19:32:18 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 1998-07-13 19:32:18 +0000 | 
| commit | 0adf9a70939b9999f7a871557e621aa22a714ea9 (patch) | |
| tree | feed81b6bac171d49b0035fcb9931a823ec8f7ca /htdocs/edit/svc_acct.cgi | |
| parent | 8ae047bd7c16f16ace5acfa1098392b56835d24c (diff) | |
Initial revision
Diffstat (limited to 'htdocs/edit/svc_acct.cgi')
| -rwxr-xr-x | htdocs/edit/svc_acct.cgi | 191 | 
1 files changed, 191 insertions, 0 deletions
| diff --git a/htdocs/edit/svc_acct.cgi b/htdocs/edit/svc_acct.cgi new file mode 100755 index 000000000..61d0fdc28 --- /dev/null +++ b/htdocs/edit/svc_acct.cgi @@ -0,0 +1,191 @@ +#!/usr/bin/perl -Tw +# +# svc_acct.cgi: Add/edit account (output form) +# +# Usage: svc_acct.cgi {svcnum} | pkgnum{pkgnum}-svcpart{svcpart} +#        http://server.name/path/svc_acct.cgi? {svcnum} | pkgnum{pkgnum}-svcpart{svcpart} +# +# Note: Should be run setuid freeside as user nobody +# +# ivan@voicenet.com 96-dec-18 +# +# rewrite ivan@sisd.com 98-mar-8 +# +# Changes to allow page to work at a relative position in server +# Changed 'password' to '_password' because Pg6.3 reserves the password word +#       bmccane@maxbaud.net     98-apr-3 +# +# use conf/shells and dbdef username length ivan@sisd.com 98-jul-13 + +use strict; +use CGI::Base qw(:DEFAULT :CGI); +use FS::UID qw(cgisuidsetup getotaker); +use FS::Record qw(qsearch qsearchs); +use FS::svc_acct qw(fields); + +my($shells)="/var/spool/freeside/conf/shells"; +open(SHELLS,$shells) or die "Can't open $shells: $!"; +my(@shells)=map { +  /^([\/\w]*)$/ or die "Illegal shell in conf/shells!"; +  $1; +} grep $_ !~ /^#/, <SHELLS>; + +my($cgi) = new CGI::Base; +$cgi->get; +&cgisuidsetup($cgi); + +my($action,$svcnum,$svc_acct,$pkgnum,$svcpart,$part_svc); + +if ( $QUERY_STRING =~ /^(\d+)$/ ) { #editing + +  $svcnum=$1; +  $svc_acct=qsearchs('svc_acct',{'svcnum'=>$svcnum}) +    or die "Unknown (svc_acct) svcnum!"; + +  my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}) +    or die "Unknown (cust_svc) svcnum!"; + +  $pkgnum=$cust_svc->pkgnum; +  $svcpart=$cust_svc->svcpart; + +  $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); +  die "No part_svc entry!" unless $part_svc; + +  $action="Edit"; + +} else { #adding + +  $svc_acct=create FS::svc_acct({});  + +  foreach $_ (split(/-/,$QUERY_STRING)) { +    $pkgnum=$1 if /^pkgnum(\d+)$/; +    $svcpart=$1 if /^svcpart(\d+)$/; +  } +  $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); +  die "No part_svc entry!" unless $part_svc; + +  $svcnum=''; + +  #set gecos +  my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum}); +  if ($cust_pkg) { +    my($cust_main)=qsearchs('cust_main',{'custnum'=> $cust_pkg->custnum } ); +    $svc_acct->setfield('finger', +      $cust_main->getfield('first') . " " . $cust_main->getfield('last') +    ) ; +  } + +  #set fixed and default fields from part_svc +  my($field); +  foreach $field ( fields('svc_acct') ) { +    if ( $part_svc->getfield('svc_acct__'. $field. '_flag') ne '' ) { +      $svc_acct->setfield($field,$part_svc->getfield('svc_acct__'. $field) ); +    } +  } + +  $action="Add"; + +} + +my($svc)=$part_svc->getfield('svc'); + +my($otaker)=getotaker; + +my($username,$password)=( +  $svc_acct->username, +  $svc_acct->_password ? "*HIDDEN*" : '', +); + +my($ulen)=$svc_acct->dbdef_table->column('username')->length; +my($ulen2)=$ulen+2; + +SendHeaders(); +print <<END; +<HTML> +  <HEAD> +    <TITLE>$action $svc account</TITLE> +  </HEAD> +  <BODY> +    <CENTER> +    <H1>$action $svc account</H1> +    </CENTER><HR> +    <FORM ACTION="process/svc_acct.cgi" METHOD=POST> +      <INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum"> +      <INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum"> +      <INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart"> +Username:  +<INPUT TYPE="text" NAME="username" VALUE="$username" SIZE=$ulen2 MAXLENGTH=$ulen> +<BR>Password:  +<INPUT TYPE="text" NAME="_password" VALUE="$password" SIZE=10 MAXLENGTH=8>  +(blank to generate) +END + +#pop +my($popnum)=$svc_acct->popnum || 0; +if ( $part_svc->svc_acct__popnum_flag eq "F" ) { +  print qq!<INPUT TYPE="hidden" NAME="popnum" VALUE="$popnum">!; +} else {  +  print qq!<BR>POP: <SELECT NAME="popnum" SIZE=1><OPTION>\n!; +  my($svc_acct_pop); +  foreach $svc_acct_pop ( qsearch ('svc_acct_pop',{} ) ) { +  print "<OPTION", $svc_acct_pop->popnum == $popnum ? ' SELECTED' : '', ">",  +        $svc_acct_pop->popnum, ": ",  +        $svc_acct_pop->city, ", ", +        $svc_acct_pop->state, +        "(", $svc_acct_pop->ac, ")/", +        $svc_acct_pop->exch, "\n" +      ; +  } +  print "</SELECT>"; +} + +my($uid,$gid,$finger,$dir)=( +  $svc_acct->uid, +  $svc_acct->gid, +  $svc_acct->finger, +  $svc_acct->dir, +); + +print <<END; +<INPUT TYPE="hidden" NAME="uid" VALUE="$uid"> +<INPUT TYPE="hidden" NAME="gid" VALUE="$gid"> +<BR>GECOS: <INPUT TYPE="text" NAME="finger" VALUE="$finger"> +<INPUT TYPE="hidden" NAME="dir" VALUE="$dir"> +END + +my($shell)=$svc_acct->shell; +if ( $part_svc->svc_acct__shell_flag eq "F" ) { +  print qq!<INPUT TYPE="hidden" NAME="shell" VALUE="$shell">!; +} else { +  print qq!<BR>Shell: <SELECT NAME="shell" SIZE=1>!; +  my($etc_shell); +  foreach $etc_shell (@shells) { +    print "<OPTION", $etc_shell eq $shell ? ' SELECTED' : '', ">", +          $etc_shell, "\n"; +  } +  print "</SELECT>"; +} + +my($quota,$slipip)=( +  $svc_acct->quota, +  $svc_acct->slipip, +); + +print qq!<INPUT TYPE="hidden" NAME="quota" VALUE="$quota">!; + +if ( $part_svc->svc_acct__slipip_flag eq "F" ) { +  print qq!<INPUT TYPE="hidden" NAME="slipip" VALUE="$slipip">!; +} else { +  print qq!<BR>IP: <INPUT TYPE="text" NAME="slipip" VALUE="$slipip">!; +} + +#submit +print qq!<P><CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>!;  + +print <<END; +    </FORM> +  </BODY> +</HTML> +END + + | 
