summaryrefslogtreecommitdiff
path: root/htdocs/edit
diff options
context:
space:
mode:
authorivan <ivan>1998-07-13 19:32:18 +0000
committerivan <ivan>1998-07-13 19:32:18 +0000
commit0adf9a70939b9999f7a871557e621aa22a714ea9 (patch)
treefeed81b6bac171d49b0035fcb9931a823ec8f7ca /htdocs/edit
parent8ae047bd7c16f16ace5acfa1098392b56835d24c (diff)
Initial revision
Diffstat (limited to 'htdocs/edit')
-rwxr-xr-xhtdocs/edit/svc_acct.cgi191
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
+
+