Initial revision
authorivan <ivan>
Mon, 13 Jul 1998 19:32:18 +0000 (19:32 +0000)
committerivan <ivan>
Mon, 13 Jul 1998 19:32:18 +0000 (19:32 +0000)
htdocs/edit/svc_acct.cgi [new file with mode: 0755]

diff --git a/htdocs/edit/svc_acct.cgi b/htdocs/edit/svc_acct.cgi
new file mode 100755 (executable)
index 0000000..61d0fdc
--- /dev/null
@@ -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
+
+