diff options
Diffstat (limited to 'fs_selfservice')
-rwxr-xr-x | fs_selfservice/DEPLOY | 13 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/Changes | 6 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/MANIFEST | 6 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/Makefile.PL | 19 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/SelfService.pm | 649 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/login.html | 29 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/make_payment.html | 120 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/myaccount.html | 47 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/passwd.html | 25 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/payment_results.html | 18 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 188 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/view_invoice.html | 21 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/freeside-selfservice-clientd | 256 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/test.pl | 17 | ||||
-rwxr-xr-x | fs_selfservice/fs_passwd_test | 19 |
15 files changed, 0 insertions, 1433 deletions
diff --git a/fs_selfservice/DEPLOY b/fs_selfservice/DEPLOY deleted file mode 100755 index 4aef4cfa4..000000000 --- a/fs_selfservice/DEPLOY +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -kill `cat /var/run/freeside-selfservice-server.fs_selfservice.pid` - -( cd ..; make deploy; cd fs_selfservice ) - -cd FS-SelfService -perl Makefile.PL && make && make install - -cp /home/ivan/freeside/fs_selfservice/FS-SelfService/cgi/* /var/www/MyAccount -chown freeside /var/www/MyAccount/selfservice.cgi -chmod 755 /var/www/MyAccount/selfservice.cgi -ln -s /var/www/MyAccount/selfservice.cgi /var/www/MyAccount/index.cgi || true diff --git a/fs_selfservice/FS-SelfService/Changes b/fs_selfservice/FS-SelfService/Changes deleted file mode 100644 index b9e26b7dc..000000000 --- a/fs_selfservice/FS-SelfService/Changes +++ /dev/null @@ -1,6 +0,0 @@ -Revision history for Perl extension FS::SelfService. - -0.01 Tue May 28 16:49:41 2002 - - original version; created by h2xs 1.21 with options - -A -X -n FS::SelfService - diff --git a/fs_selfservice/FS-SelfService/MANIFEST b/fs_selfservice/FS-SelfService/MANIFEST deleted file mode 100644 index ebd0d3b1a..000000000 --- a/fs_selfservice/FS-SelfService/MANIFEST +++ /dev/null @@ -1,6 +0,0 @@ -Changes -Makefile.PL -MANIFEST -SelfService.pm -test.pl -freeside-selfservice-clientd diff --git a/fs_selfservice/FS-SelfService/Makefile.PL b/fs_selfservice/FS-SelfService/Makefile.PL deleted file mode 100644 index a14580eb2..000000000 --- a/fs_selfservice/FS-SelfService/Makefile.PL +++ /dev/null @@ -1,19 +0,0 @@ -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -WriteMakefile( - 'NAME' => 'FS::SelfService', - 'VERSION_FROM' => 'SelfService.pm', # finds $VERSION - 'EXE_FILES' => [ 'freeside-selfservice-clientd', - 'freeside-selfservice-xmlrpc-server', - ], - 'INSTALLSCRIPT' => '/usr/local/sbin', - 'INSTALLSITEBIN' => '/usr/local/sbin', - 'PERM_RWX' => '750', - 'PREREQ_PM' => { - 'Storable' => 2.09, - }, # e.g., Module::Name => 1.1 - ($] >= 5.005 ? ## Add these new keywords supported since 5.005 - (ABSTRACT_FROM => 'SelfService.pm', # retrieve abstract from module - AUTHOR => 'Ivan Kohler <ivan-freeside-selfservice@420.am>') : ()), -); diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm deleted file mode 100644 index 7cbf5ecad..000000000 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ /dev/null @@ -1,649 +0,0 @@ -package FS::SelfService; - -use strict; -use vars qw($VERSION @ISA @EXPORT_OK $socket %autoload $tag); -use Exporter; -use Socket; -use FileHandle; -#use IO::Handle; -use IO::Select; -use Storable 2.09 qw(nstore_fd fd_retrieve); - -$VERSION = '0.03'; - -@ISA = qw( Exporter ); - -$socket = "/usr/local/freeside/selfservice_socket"; -$socket .= '.'.$tag if defined $tag && length($tag); - -#maybe should ask ClientAPI for this list -%autoload = ( - 'passwd' => 'passwd/passwd', - 'chfn' => 'passwd/passwd', - 'chsh' => 'passwd/passwd', - 'login' => 'MyAccount/login', - 'customer_info' => 'MyAccount/customer_info', - 'edit_info' => 'MyAccount/edit_info', - 'invoice' => 'MyAccount/invoice', - 'cancel' => 'MyAccount/cancel', - 'payment_info' => 'MyAccount/payment_info', - 'process_payment' => 'MyAccount/process_payment', - 'list_pkgs' => 'MyAccount/list_pkgs', - 'order_pkg' => 'MyAccount/order_pkg', - 'cancel_pkg' => 'MyAccount/cancel_pkg', - 'charge' => 'MyAccount/charge', - 'signup_info' => 'Signup/signup_info', - 'new_customer' => 'Signup/new_customer', -); -@EXPORT_OK = keys %autoload; - -$ENV{'PATH'} ='/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -my $freeside_uid = scalar(getpwnam('freeside')); -die "not running as the freeside user\n" if $> != $freeside_uid; - -foreach my $autoload ( keys %autoload ) { - - my $eval = - "sub $autoload { ". ' - my $param; - if ( ref($_[0]) ) { - $param = shift; - } else { - $param = { @_ }; - } - - $param->{_packet} = \''. $autoload{$autoload}. '\'; - - simple_packet($param); - }'; - - eval $eval; - die $@ if $@; - -} - -sub simple_packet { - my $packet = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($socket)) or die "connect: $!"; - nstore_fd($packet, \*SOCK) or die "can't send packet: $!"; - SOCK->flush; - - #shoudl trap: Magic number checking on storable file failed at blib/lib/Storable.pm (autosplit into blib/lib/auto/Storable/fd_retrieve.al) line 337, at /usr/local/share/perl/5.6.1/FS/SelfService.pm line 71 - - #block until there is a message on socket -# my $w = new IO::Select; -# $w->add(\*SOCK); -# my @wait = $w->can_read; - my $return = fd_retrieve(\*SOCK) or die "error reading result: $!"; - die $return->{'_error'} if defined $return->{_error} && $return->{_error}; - - $return; -} - -=head1 NAME - -FS::SelfService - Freeside self-service API - -=head1 SYNOPSIS - - # password and shell account changes - use FS::SelfService qw(passwd chfn chsh); - - # "my account" functionality - use FS::SelfService qw( login customer_info invoice cancel payment_info process_payment ); - - my $rv = login( { 'username' => $username, - 'domain' => $domain, - 'password' => $password, - } - ); - - if ( $rv->{'error'} ) { - #handle login error... - } else { - #successful login - my $session_id = $rv->{'session_id'}; - } - - my $customer_info = customer_info( { 'session_id' => $session_id } ); - - #payment_info and process_payment are available in 1.5+ only - my $payment_info = payment_info( { 'session_id' => $session_id } ); - - #!!! process_payment example - - #!!! list_pkgs example - - #!!! order_pkg example - - #!!! cancel_pkg example - - # signup functionality - use FS::SelfService qw( signup_info new_customer ); - - my $signup_info = signup_info; - - $rv = new_customer( { - 'first' => $first, - 'last' => $last, - 'company' => $company, - 'address1' => $address1, - 'address2' => $address2, - 'city' => $city, - 'state' => $state, - 'zip' => $zip, - 'country' => $country, - 'daytime' => $daytime, - 'night' => $night, - 'fax' => $fax, - 'payby' => $payby, - 'payinfo' => $payinfo, - 'paycvv' => $paycvv, - 'paydate' => $paydate, - 'payname' => $payname, - 'invoicing_list' => $invoicing_list, - 'referral_custnum' => $referral_custnum, - 'pkgpart' => $pkgpart, - 'username' => $username, - '_password' => $password, - 'popnum' => $popnum, - 'agentnum' => $agentnum, - } - ); - - my $error = $rv->{'error'}; - if ( $error eq '_decline' ) { - print_decline(); - } elsif ( $error ) { - reprint_signup(); - } else { - print_success(); - } - -=head1 DESCRIPTION - -Use this API to implement your own client "self-service" module. - -If you just want to customize the look of the existing "self-service" module, -see XXXX instead. - -=head1 PASSWORD, GECOS, SHELL CHANGING FUNCTIONS - -=over 4 - -=item passwd - -=item chfn - -=item chsh - -=back - -=head1 "MY ACCOUNT" FUNCTIONS - -=over 4 - -=item login HASHREF - -Creates a user session. Takes a hash reference as parameter with the -following keys: - -=over 4 - -=item username - -=item domain - -=item password - -=back - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors. - -=item session_id - -Session identifier for successful logins - -=back - -=item customer_info HASHREF - -Returns general customer information. - -Takes a hash reference as parameter with a single key: B<session_id> - -Returns a hash reference with the following keys: - -=over 4 - -=item name - -Customer name - -=item balance - -Balance owed - -=item open - -Array reference of hash references of open inoices. Each hash reference has -the following keys: invnum, date, owed - -=item small_custview - -An HTML fragment containing shipping and billing addresses. - -=item The following fields are also returned: first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax - -=back - -=item edit_info HASHREF - -Takes a hash reference as parameter with any of the following keys: - -first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax - -If a field exists, the customer record is updated with the new value of that -field. If a field does not exist, that field is not changed on the customer -record. - -Returns a hash reference with a single key, B<error>, empty on success, or an -error message on errors - -=item invoice HASHREF - -Returns an invoice. Takes a hash reference as parameter with two keys: -session_id and invnum - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors - -=item invnum - -Invoice number - -=item invoice_text - -Invoice text - -=back - -=item cancel HASHREF - -Cancels this customer. - -Takes a hash reference as parameter with a single key: B<session_id> - -Returns a hash reference with a single key, B<error>, which is empty on -success or an error message on errors. - -=item payment_info HASHREF - -Returns information that may be useful in displaying a payment page. - -Takes a hash reference as parameter with a single key: B<session_id>. - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors - -=item balance - -Balance owed - -=item payname - -Exact name on credit card (CARD/DCRD) - -=item address1 - -=item address2 - -=item city - -=item state - -=item zip - -=item payby - -Customer's current default payment type. - -=item card_type - -For CARD/DCRD payment types, the card type (Visa card, MasterCard, Discover card, American Express card, etc.) - -=item payinfo - -For CARD/DCRD payment types, the card number - -=item month - -For CARD/DCRD payment types, expiration month - -=item year - -For CARD/DCRD payment types, expiration year - -=item cust_main_county - -County/state/country data - array reference of hash references, each of which has the fields of a cust_main_county record (see L<FS::cust_main_county>). Note these are not FS::cust_main_county objects, but hash references of columns and values. - -=item states - -Array reference of all states in the current default country. - -=item card_types - -Hash reference of card types; keys are card types, values are the exact strings -passed to the process_payment function - -=item paybatch - -Unique transaction identifier (prevents multiple charges), passed to the -process_payment function - -=back - -=item process_payment HASHREF - -Processes a payment and possible change of address or payment type. Takes a -hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -=item save - -If true, address and card information entered will be saved for subsequent -transactions. - -=item auto - -If true, future credit card payments will be done automatically (sets payby to -CARD). If false, future credit card payments will be done on-demand (sets -payby to DCRD). This option only has meaning if B<save> is set true. - -=item payname - -=item address1 - -=item address2 - -=item city - -=item state - -=item zip - -=item payinfo - -Card number - -=item month - -Card expiration month - -=item year - -Card expiration year - -=item paybatch - -Unique transaction identifier, returned from the payment_info function. -Prevents multiple charges. - -=back - -Returns a hash reference with a single key, B<error>, empty on success, or an -error message on errors - -=item list_pkgs - -Returns package information for this customer. - -Takes a hash reference as parameter with a single key: B<session_id> - -Returns a hash reference containing customer package information. The hash reference contains the following keys: - -=over 4 - -=item cust_pkg HASHREF - -Array reference of hash references, each of which has the fields of a cust_pkg record (see L<FS::cust_pkg>). Note these are not FS::cust_pkg objects, but hash references of columns and values. - -=back - -=item order_pkg - -Orders a package for this customer. - -Takes a hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -=item pkgpart - -=item svcpart - -optional svcpart, required only if the package definition does not contain -one svc_acct service definition with quantity 1 (it may contain others with -quantity >1) - -=item username - -=item _password - -=item sec_phrase - -=item popnum - -=back - -Returns a hash reference with a single key, B<error>, empty on success, or an -error message on errors. The special error '_decline' is returned for -declined transactions. - -=item cancel_pkg - -Cancels a package for this customer. - -Takes a hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -=item pkgpart - -=back - -Returns a hash reference with a single key, B<error>, empty on success, or an -error message on errors. - -=back - -=head1 SIGNUP FUNCTIONS - -=over 4 - -=item signup_info - -Returns a hash reference containing information that may be useful in -displaying a signup page. The hash reference contains the following keys: - -=over 4 - -=item cust_main_county - -County/state/country data - array reference of hash references, each of which has the fields of a cust_main_county record (see L<FS::cust_main_county>). Note these are not FS::cust_main_county objects, but hash references of columns and values. - -=item part_pkg - -Available packages - array reference of hash references, each of which has the fields of a part_pkg record (see L<FS::part_pkg>). Each hash reference also has an additional 'payby' field containing an array reference of acceptable payment types specific to this package (see below and L<FS::part_pkg/payby>). Note these are not FS::part_pkg objects, but hash references of columns and values. Requires the 'signup_server-default_agentnum' configuration value to be set. - -=item agent - -Array reference of hash references, each of which has the fields of an agent record (see L<FS::agent>). Note these are not FS::agent objects, but hash references of columns and values. - -=item agentnum2part_pkg - -Hash reference; keys are agentnums, values are array references of available packages for that agent, in the same format as the part_pkg arrayref above. - -=item svc_acct_pop - -Access numbers - array reference of hash references, each of which has the fields of an svc_acct_pop record (see L<FS::svc_acct_pop>). Note these are not FS::svc_acct_pop objects, but hash references of columns and values. - -=item security_phrase - -True if the "security_phrase" feature is enabled - -=item payby - -Array reference of acceptable payment types for signup - -=over 4 - -=item CARD (credit card - automatic) - -=item DCRD (credit card - on-demand - version 1.5+ only) - -=item CHEK (electronic check - automatic) - -=item DCHK (electronic check - on-demand - version 1.5+ only) - -=item LECB (Phone bill billing) - -=item BILL (billing, not recommended for signups) - -=item COMP (free, definately not recommended for signups) - -=item PREPAY (special billing type: applies a credit (see FS::prepay_credit) and sets billing type to BILL) - -=back - -=item cvv_enabled - -True if CVV features are available (1.5+ or 1.4.2 with CVV schema patch) - -=item msgcat - -Hash reference of message catalog values, to support error message customization. Currently available keys are: passwords_dont_match, invalid_card, unknown_card_type, and not_a (as in "Not a Discover card"). Values are configured in the web interface under "View/Edit message catalog". - -=item statedefault - -Default state - -=item countrydefault - -Default country - -=back - -=item new_customer HASHREF - -Creates a new customer. Takes a hash reference as parameter with the -following keys: - -=over 4 - -=item first - first name (required) - -=item last - last name (required) - -=item ss (not typically collected; mostly used for ACH transactions) - -=item company - -=item address1 (required) - -=item address2 - -=item city (required) - -=item county - -=item state (required) - -=item zip (required) - -=item daytime - phone - -=item night - phone - -=item fax - phone - -=item payby - CARD, DCRD, CHEK, DCHK, LECB, BILL, COMP or PREPAY (see L</signup_info> (required) - -=item payinfo - Card number for CARD/DCRD, account_number@aba_number for CHEK/DCHK, prepaid "pin" for PREPAY, purchase order number for BILL - -=item paycvv - Credit card CVV2 number (1.5+ or 1.4.2 with CVV schema patch) - -=item paydate - Expiration date for CARD/DCRD - -=item payname - Exact name on credit card for CARD/DCRD, bank name for CHEK/DCHK - -=item invoicing_list - comma-separated list of email addresses for email invoices. The special value 'POST' is used to designate postal invoicing (it may be specified alone or in addition to email addresses), - -=item referral_custnum - referring customer number - -=item pkgpart - pkgpart of initial package - -=item username - -=item _password - -=item sec_phrase - security phrase - -=item popnum - access number (index, not the literal number) - -=item agentnum - agent number - -=back - -Returns a hash reference with the following keys: - -=over 4 - -=item error Empty on success, or an error message on errors. The special error '_decline' is returned for declined transactions; other error messages should be suitable for display to the user (and are customizable in under Sysadmin | View/Edit message catalog) - -=back - - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<freeside-selfservice-clientd>, L<freeside-selfservice-server> - -=cut - -1; - diff --git a/fs_selfservice/FS-SelfService/cgi/login.html b/fs_selfservice/FS-SelfService/cgi/login.html deleted file mode 100644 index 5607de783..000000000 --- a/fs_selfservice/FS-SelfService/cgi/login.html +++ /dev/null @@ -1,29 +0,0 @@ -<HTML><HEAD><TITLE>Login</TITLE></HEAD> -<BODY BGCOLOR="#e8e8e8"><FONT SIZE=5>Login</FONT><BR><BR> -<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT> -<FORM ACTION="<%= $self_url %>" METHOD=POST> -<INPUT TYPE="hidden" NAME="session" VALUE="login"> -<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=2 CELLPADDING=0> -<TR> - <TH ALIGN="right">Username </TH> - <TD> - <INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"> - </TD> -</TR> -<TR> - <TH ALIGN="right">Domain </TH> - <TD> - <INPUT TYPE="text" NAME="domain" VALUE="<%= $domain %>"> - </TD> -</TR> -<!--<INPUT TYPE="hidden" NAME="domain" VALUE="myisp.com">--> -<TR> - <TH ALIGN="right">Password </TH> - <TD> - <INPUT TYPE="password" NAME="password"> - </TD> -</TR> -</TABLE> -<BR><BR><INPUT TYPE="submit" VALUE="Login"> -</FORM></BODY></HTML> - diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html deleted file mode 100644 index 40cd83c6f..000000000 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ /dev/null @@ -1,120 +0,0 @@ -<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> -<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<TABLE BORDER=0 CELLPADDING=4><TR><TD VALIGN="top" HEIGHT=384 BGCOLOR="#dddddd"> -<A HREF="<%= $url %>myaccount">MyAccount</A><BR> -<!-- <A HREF="<%= $url %>other">SomethingElse</A><BR> --> -</TD><TD VALIGN="top"> -<FONT SIZE=4>Make a payment</FONT><BR><BR> -<FORM NAME="OneTrueForm" METHOD="POST" ACTION="<%=$selfurl%>" onSubmit="document.OneTrueForm.process.disabled=true"> -<INPUT TYPE="hidden" NAME="session" VALUE="<%=$session_id%>"> -<INPUT TYPE="hidden" NAME="action" VALUE="payment_results"> -<TABLE BGCOLOR="#cccccc"> -<TR> - <TD ALIGN="right">Amount Due</TD> - <TD> - <TABLE><TR><TD BGCOLOR="#ffffff"> - $<%=sprintf("%.2f",$balance)%> - </TD></TR></TABLE> - </TD> -</TR> -<TR> - <TD ALIGN="right">Payment amount</TD> - <TD> - <TABLE><TR><TD BGCOLOR="#ffffff"> - $<INPUT TYPE="text" NAME="amount" SIZE=8 VALUE="<%=sprintf("%.2f",$balance)%>"> - </TD></TR></TABLE> - </TD> -</TR><TR> - <TD ALIGN="right">Card type</TD> - <TD> - <SELECT NAME="card_type"><OPTION></OPTION> - <%= foreach ( keys %card_types ) { - $selected = $card_type eq $card_types{$_} ? ' SELECTED' : ''; - $OUT .= qq(<OPTION$selected VALUE="). $card_types{$_}. qq(">$_\n); - } %> - </SELECT> - </TD> -</TD><TR> - <TD ALIGN="right">Card number</TD> - <TD> - <TABLE> - <TR> - <TD> - <INPUT TYPE="text" NAME="payinfo" SIZE=20 MAXLENGTH=19 VALUE="<%=$payinfo%>"> </TD> - <TD>Exp.</TD> - <TD> - <SELECT NAME="month"> - <%= for ( ( map "0$_", 1 .. 9 ), 11, 12 ) { - $OUT .= '<OPTION'. ($_ eq $month ? ' SELECTED' : ''). ">$_\n"; - } %> - </SELECT> - </TD> - <TD> / </TD> - <TD> - <SELECT NAME="year"> - <%= my @a = localtime; for ( $a[5]+1900 .. $a[5]+1915 ) { - $OUT .= '<OPTION'. ($_ eq $year ? ' SELECTED' : ''). ">$_\n"; - } %> - </SELECT> - </TD> - </TR> - </TABLE> - </TD> -</TR><TR> - <TD ALIGN="right">Exact name on card</TD> - <TD><INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<%=$payname%>"></TD> -</TR><TR> - <TD ALIGN="right">Card billing address</TD> - <TD> - <INPUT TYPE="text" SIZE=40 MAXLENGTH=80 NAME="address1" VALUE="<%=$address1%>"> - </TD> -</TR><TR> - <TD ALIGN="right">Address line 2</TD> - <TD> - <INPUT TYPE="text" SIZE=40 MAXLENGTH=80 NAME="address2" VALUE="<%=$address2%>"> - </TD> -</TR><TR> - <TD ALIGN="right">City</TD> - <TD> - <TABLE> - <TR> - <TD> - <INPUT TYPE="text" NAME="city" SIZE="12" MAXLENGTH=80 VALUE="<%=$city%>"> - </TD> - <TD>State</TD> - <TD> - <SELECT NAME="state"> - <%= for ( @states ) { - $OUT .= '<OPTION'. ($_ eq $state ? ' SELECTED' : '' ). ">$_\n"; - } %> - </SELECT> - </TD> - <TD>Zip</TD> - <TD> - <INPUT TYPE="text" NAME="zip" SIZE=11 MAXLENGTH=10 VALUE="<%=$zip%>"> - </TD> - </TR> - </TABLE> - </TD> -</TR><TR> - <TD COLSPAN=2> - <INPUT TYPE="checkbox" CHECKED NAME="save" VALUE="1"> - Remember this information - </TD> -</TR><TR> - <TD COLSPAN=2> - <INPUT TYPE="checkbox"<%= $payby eq 'CARD' ? ' CHECKED' : '' %> NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }"> - Charge future payments to this card automatically - </TD> -</TR> -</TABLE> -<BR> -<INPUT TYPE="hidden" NAME="paybatch" VALUE="<%=$paybatch%>"> -<INPUT TYPE="submit" NAME="process" VALUE="Process payment"> <!-- onClick="this.disabled=true"> --> -</FORM> -</TD></TR></TABLE> -<HR> -<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> -</BODY></HTML> - diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html deleted file mode 100644 index f48fdedea..000000000 --- a/fs_selfservice/FS-SelfService/cgi/myaccount.html +++ /dev/null @@ -1,47 +0,0 @@ -<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> -<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<TABLE BORDER=0 CELLPADDING=4><TR><TD VALIGN="top" HEIGHT=384 BGCOLOR="#dddddd"> -<A HREF="<%= $url %>myaccount">MyAccount</A><BR> -<!-- <A HREF="<%= $url %>other">SomethingElse</A><BR> --> -</TD><TD VALIGN="top"> - -Hello <%= $name %>!<BR><BR> -<%= $small_custview %> -<BR> -<%= if ( $balance > 0 ) { - $OUT .= qq! <B><A HREF="${url}make_payment">Make a payment</A></B><BR><BR>!; -} %> -<%= - if ( @open_invoices ) { - $OUT .= '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 BGCOLOR="#eeeeee">'. - '<TR><TH BGCOLOR="#ff3333" COLSPAN=5>Open Invoices</TH><TD>'; - my $link = qq!<A HREF="<%= $url %>myaccount!; - my $col1 = "ffffff"; - my $col2 = "dddddd"; - my $col = $col1; - - foreach my $invoice ( @open_invoices ) { - my $td = qq!<TD BGCOLOR="#$col">!; - my $a=qq!<A HREF="${url}view_invoice;invnum=!. $invoice->{'invnum'}. '">'; - $OUT .= - "<TR>$td${a}Invoice #". $invoice->{'invnum'}. "</A></TD>$td</TD>". - "$td$a". $invoice->{'date'}. "</A></TD>$td</TD>". - qq!<TD BGCOLOR="#$col" ALIGN="right">$a\$!. $invoice->{'owed'}. - '</A></TD>'. - '</TR>'; - $col = $col eq $col1 ? $col2 : $col1; - } - $OUT .= '</TABLE>'; - } else { - $OUT .= 'You have no outstanding invoices.<BR><BR>'; - } -%> - -</TD></TR></TABLE> -<HR> -<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> -</BODY></HTML> - - - diff --git a/fs_selfservice/FS-SelfService/cgi/passwd.html b/fs_selfservice/FS-SelfService/cgi/passwd.html deleted file mode 100644 index fadc4df8b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/passwd.html +++ /dev/null @@ -1,25 +0,0 @@ -<html> - <head> - <title>Change password</title> - </head> - <body bgcolor="#e8e8e8"> - <h3>Change password</h3> - <form action="/cgi-bin/fs_passwd.cgi" method="post"> - <table bgcolor="#cccccc" border=0 cellspacing=2> - <tr><th align="right">Username</th> - <td><input type="text" name="username" size="18"></td> - </tr> - <tr><th align="right">Current password</th> - <td><input type="password" name="old_password" size="18"></td> - </tr> - <tr><th align="right">New password</th> - <td><input type="password" name="new_password" size="18"></td> - </tr> - <tr><th align="right">Re-enter new password</th> - <td><input type="password" name="new_password2" size="18"></td> - </tr> - </table> - <br><input type="submit" value="Change password"> - </body> -</html> - diff --git a/fs_selfservice/FS-SelfService/cgi/payment_results.html b/fs_selfservice/FS-SelfService/cgi/payment_results.html deleted file mode 100644 index 92c8cf51b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/payment_results.html +++ /dev/null @@ -1,18 +0,0 @@ -<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> -<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<TABLE BORDER=0 CELLPADDING=4><TR><TD VALIGN="top" HEIGHT=384 BGCOLOR="#dddddd"> -<A HREF="<%= $url %>myaccount">MyAccount</A><BR> -<!-- <A HREF="<%= $url %>other">SomethingElse</A><BR> --> -</TD><TD VALIGN="top"> -<FONT SIZE=4>Payment results</FONT><BR><BR> -<%= if ( $error ) { - $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your payment: $error</FONT>!; -} else { - $OUT .= 'Your payment was processed sucessfully. Thank you.'; -} %> -</TD></TR></TABLE> -<HR> -<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> -</BODY></HTML> - diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi deleted file mode 100644 index 6d6716ddc..000000000 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw($cgi $session_id $form_max $template_dir); -use subs qw(do_template); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use Text::Template; -use FS::SelfService qw( login customer_info invoice payment_info - process_payment ); - -$template_dir = '.'; - -$form_max = 255; - -$cgi = new CGI; - -unless ( defined $cgi->param('session') ) { - do_template('login',{}); - exit; -} - -if ( $cgi->param('session') eq 'login' ) { - - $cgi->param('username') =~ /^\s*([a-z0-9_\-\.\&]{0,$form_max})\s*$/i - or die "illegal username"; - my $username = $1; - - $cgi->param('domain') =~ /^\s*([\w\-\.]{0,$form_max})\s*$/ - or die "illegal domain"; - my $domain = $1; - - $cgi->param('password') =~ /^(.{0,$form_max})$/ - or die "illegal password"; - my $password = $1; - - my $rv = login( - 'username' => $username, - 'domain' => $domain, - 'password' => $password, - ); - if ( $rv->{error} ) { - do_template('login', { - 'error' => $rv->{error}, - 'username' => $username, - 'domain' => $domain, - } ); - exit; - } else { - $cgi->param('session' => $rv->{session_id} ); - $cgi->param('action' => 'myaccount' ); - } -} - -$session_id = $cgi->param('session'); - -$cgi->param('action') =~ - /^(myaccount|view_invoice|make_payment|payment_results)$/ - or die "unknown action ". $cgi->param('action'); -my $action = $1; - -my $result = eval "&$action();"; -die $@ if $@; - -if ( $result->{error} eq "Can't resume session" ) { #ick - do_template('login',{}); - exit; -} - -#warn $result->{'open_invoices'}; -#warn scalar(@{$result->{'open_invoices'}}); - -warn "processing template $action\n"; -do_template($action, { - 'session_id' => $session_id, - %{$result} -}); - -#-- - -sub myaccount { customer_info( 'session_id' => $session_id ); } - -sub view_invoice { - - $cgi->param('invnum') =~ /^(\d+)$/ or die "illegal invnum"; - my $invnum = $1; - - invoice( 'session_id' => $session_id, - 'invnum' => $invnum, - ); - -} - -sub make_payment { - payment_info( 'session_id' => $session_id ); -} - -sub payment_results { - - use Business::CreditCard; - - $cgi->param('amount') =~ /^\s*(\d+(\.\d{2})?)\s*$/ - or die "illegal amount"; #!!! - my $amount = $1; - - my $payinfo = $cgi->param('payinfo'); - $payinfo =~ s/\D//g; - $payinfo =~ /^(\d{13,16})$/ - #or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - or die "illegal card"; #!!! - $payinfo = $1; - validate($payinfo) - #or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - or die "invalid card"; #!!! - cardtype($payinfo) eq $cgi->param('card_type') - #or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); - or die "not a ". $cgi->param('card_type'); - - $cgi->param('month') =~ /^(\d{2})$/ or die "illegal month"; - my $month = $1; - $cgi->param('year') =~ /^(\d{4})$/ or die "illegal year"; - my $year = $1; - - $cgi->param('payname') =~ /^(.{0,80})$/ or die "illegal payname"; - my $payname = $1; - - $cgi->param('address1') =~ /^(.{0,80})$/ or die "illegal address1"; - my $address1 = $1; - - $cgi->param('address2') =~ /^(.{0,80})$/ or die "illegal address2"; - my $address2 = $1; - - $cgi->param('city') =~ /^(.{0,80})$/ or die "illegal city"; - my $city = $1; - - $cgi->param('state') =~ /^(.{2})$/ or die "illegal state"; - my $state = $1; - - $cgi->param('zip') =~ /^(.{0,10})$/ or die "illegal zip"; - my $zip = $1; - - my $save = 0; - $save = 1 if $cgi->param('save'); - - my $auto = 0; - $auto = 1 if $cgi->param('auto'); - - $cgi->param('paybatch') =~ /^([\w\-\.]+)$/ or die "illegal paybatch"; - my $paybatch = $1; - - process_payment( - 'session_id' => $session_id, - 'amount' => $amount, - 'payinfo' => $payinfo, - 'month' => $month, - 'year' => $year, - 'payname' => $payname, - 'address1' => $address1, - 'address2' => $address2, - 'city' => $city, - 'state' => $state, - 'zip' => $zip, - 'save' => $save, - 'auto' => $auto, - 'paybatch' => $paybatch, - ); - -} - -#-- - -sub do_template { - my $name = shift; - my $fill_in = shift; - - $cgi->delete_all(); - $fill_in->{'selfurl'} = $cgi->self_url; - - my $template = new Text::Template( TYPE => 'FILE', - SOURCE => "$template_dir/$name.html", - DELIMITERS => [ '<%=', '%>' ], - UNTAINT => 1, ) - or die $Text::Template::ERROR; - - print $cgi->header( '-expires' => 'now' ), - $template->fill_in( HASH => $fill_in ); -} - diff --git a/fs_selfservice/FS-SelfService/cgi/view_invoice.html b/fs_selfservice/FS-SelfService/cgi/view_invoice.html deleted file mode 100644 index d2b012b5d..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_invoice.html +++ /dev/null @@ -1,21 +0,0 @@ -<HTML><HEAD><TITLE>MyAccount</TITLE></HEAD> -<BODY BGCOLOR="#eeeeee"><FONT SIZE=5>MyAccount</FONT><BR><BR> -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<TABLE BORDER=0 CELLPADDING=4><TR><TD VALIGN="top" HEIGHT=384 BGCOLOR="#dddddd"> -<A HREF="<%= $url %>myaccount">MyAccount</A><BR> -<!-- <A HREF="<%= $url %>other">SomethingElse</A><BR> --> -</TD><TD VALIGN="top"> - -<A HREF="<%= $url %>myaccount"><-- back to MyAccount</A><BR><BR> - -<FONT SIZE="-1"><PRE> -<%= $invoice_text %> -</FONT></PRE> - -</TD></TR></TABLE> -<HR> -<FONT SIZE="-2">powered by <a href="http://www.sisd.com/freeside">freeside</a></FONT> -</BODY></HTML> - - - diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd deleted file mode 100644 index ce9e14d35..000000000 --- a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd +++ /dev/null @@ -1,256 +0,0 @@ -#!/usr/bin/perl -w -# -# freeside-selfservice-clientd -# -# This is run REMOTELY over ssh by freeside-selfservice-server - -use strict; -use subs qw(spawn logmsg lock_write unlock_write); -use Fcntl qw(:flock); -use POSIX qw(:sys_wait_h); -use Socket; -use Storable 2.09 qw(nstore_fd fd_retrieve); -use IO::Handle qw(_IONBF); -use IO::Select; -use IO::File; - -#STDOUT->setbuf(''); - -my $tag = scalar(@ARGV) ? '.'.shift : ''; - -use vars qw( $Debug ); -$Debug = 2; #2 will turn on child logging, 3 will log packet contents, - #including potentially compromising information - -my $socket = "/usr/local/freeside/selfservice_socket$tag"; -my $pid_file = "$socket.pid"; - -my $log_file = "/usr/local/freeside/selfservice$tag.log"; - -my $lock_file = "/usr/local/freeside/selfservice$tag.writelock"; - -#my $me = '[client]'; - -$|=1; - -$SIG{__WARN__} = \&_logmsg; - -#read data to be cached or something -#warn "$me Reading init data\n" if $Debug; -#my $signup_init = - -warn "Creating $lock_file\n" if $Debug; -open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; - -warn "Creating $socket\n" if $Debug; -my $uaddr = sockaddr_un($socket); -my $proto = getprotobyname('tcp'); -socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!"; -unlink($socket); -bind(Server, $uaddr) or die "bind: $!"; -listen(Server,SOMAXCONN) or die "listen: $!"; - -if ( -e $pid_file ) { - open(PIDFILE,"<$pid_file"); - my $old_pid = <PIDFILE>; - close PIDFILE; - $old_pid =~ /^(\d+)$/; - kill 'TERM', $1; -} -open(PIDFILE,">$pid_file"); -print PIDFILE "$$\n"; -close PIDFILE; - -#my $waitedpid; -#sub REAPER { $waitedpid = wait; $SIG{CHLD} = \&REAPER; } -#$SIG{CHLD} = \&REAPER; - -warn "entering main loop\n" if $Debug; - -my %kids; - -my $s = new IO::Select; -$s->add(\*STDIN); -$s->add(\*Server); - -#for ( $waitedpid = 0; -# accept(Client,Server) || $waitedpid; -# $waitedpid = 0, close Client) -#{ -# next if $waitedpid; - -#$SIG{PIPE} = sub { warn "SIGPIPE received" }; -#$SIG{CHLD} = sub { warn "SIGCHLD received" }; - -#sub REAPER { warn "SIGCHLD received"; my $pid = wait; $SIG{CHLD} = \&REAPER; } -#sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; } -#sub REAPER { my $pid = wait; delete $kids{$pid}; $SIG{CHLD} = \&REAPER; } -#$SIG{CHLD} = \&REAPER; - -my $undisp = 0; -while (1) { - - &reap_kids; - - warn "waiting for connection\n" if $Debug && !$undisp; - - #my @handles = $s->can_read(); - my @handles = $s->can_read(5); - $undisp = !scalar(@handles); - foreach my $handle ( @handles ) { - - if ( $handle == \*STDIN ) { - - warn "receiving packet from server\n" if $Debug; - - my $packet = fd_retrieve(\*STDIN); - my $token = $packet->{'_token'}; - warn "received packet from server with token $token\n". - ( $Debug > 2 - ? join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - : '' ) - if $Debug; - - if ( exists($kids{$token}) ) { - warn "sending return packet to $token via $kids{$token}\n" - if $Debug; - nstore_fd($packet, $kids{$token}); - warn "flushing to $token\n" if $Debug; - until ( $kids{$token}->flush ) { - warn "WARNING: error flushing: $!"; - sleep 1; - } - #no close or delete here - will block waiting for child - warn "done with $token\n" if $Debug; - } else { - warn "WARNING: unknown token $token, discarding message"; - } - - } elsif ( $handle == \*Server ) { - - until ( accept(Client, Server) ) { - warn "WARNING: accept failed: $!"; - next; - } - - warn "received local connection; forking\n" if $Debug; - - spawn sub { #child - warn "[child-$$] reading packet from local client" if $Debug > 1; - my $packet = fd_retrieve(\*Client); - warn "[child-$$] packet received:\n". - join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - if $Debug > 2; - my $command = $packet->{'command'}; - #handle some commands weirdly? - $packet->{_token}=$$; - - warn "[child-$$] locking write stream\n" if $Debug > 1; - lock_write; - - warn "[child-$$] sending packet to remote server\n" if $Debug > 1; - nstore_fd($packet, \*STDOUT) or die "FATAL: can't send response: $!"; - - warn "[child-$$] flushing write stream\n" if $Debug > 1; - STDOUT->flush or die "FATAL: can't flush: $!"; - - warn "[child-$$] releasing write lock\n" if $Debug > 1; - unlock_write; - - warn "[child-$$] closing write stream\n" if $Debug > 1; - close STDOUT or die "FATAL: can't close write stream: $!"; #??! - - warn "[child-$$] waiting for response from parent\n" if $Debug > 1; - my $w = new IO::Select; - $w->add(\*STDIN); - until ( $w->can_read ) { - warn "[child-$$] WARNING: interrupted select: $!\n"; - } - my $rv = fd_retrieve(\*STDIN); - - #close STDIN; - - warn "[child-$$] sending response to local client" if $Debug > 1; - nstore_fd($rv, \*Client); - Client->flush or die "FATAL: can't flush to local client: $!"; - close Client or die "FATAL: can't close connection to local client: $!"; - - warn "[child-$$] child exiting" if $Debug > 1; - exit; - - }; #eo child - - #close Client; - - } else { - die "wtf? $handle"; - } - - } - -} - -sub reap_kids { - #warn "reaping kids\n"; - foreach my $pid ( keys %kids ) { - my $kid = waitpid($pid, WNOHANG); - if ( $kid > 0 ) { - close $kids{$kid}; - delete $kids{$kid}; - } - } - #warn "done reaping\n"; -} - -sub spawn { - my $coderef = shift; - - unless (@_ == 0 && $coderef && ref($coderef) eq 'CODE') { - use Carp; - confess "usage: spawn CODEREF"; - } - - my $pid; - #if (!defined($pid = fork)) { - my $kid = new IO::Handle; - if (!defined($pid = open($kid, '|-'))) { - warn "WARNING: cannot fork: $!"; - return; - } elsif ($pid) { - warn "begat $pid" if $Debug; - $kids{$pid} = $kid; - #$kids{$pid}->autoflush; - return; # I'm the parent - } - # else I'm the child -- go spawn - -# open(STDIN, "<&Client") || die "can't dup client to stdin"; -# open(STDOUT, ">&Client") || die "can't dup client to stdout"; -# open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr"; - exit &$coderef(); -} - -sub _logmsg { - chomp( my $msg = shift ); - my $log = new IO::File ">>$log_file"; - die "can't open $log_file: $!" unless defined($log); - flock($log, LOCK_EX); - seek($log, 0, 2); - print $log "[client] [". scalar(localtime). "] [$$] $msg\n"; - flock($log, LOCK_UN); - close $log; -} - -sub lock_write { - #broken on freebsd? - #flock(STDOUT, LOCK_EX) or die "FATAL: can't lock write stream: $!"; - - flock(LOCKFILE, LOCK_EX) or die "FATAL: can't lock $lock_file: $!"; -} - -sub unlock_write { - #broken on freebsd? - #flock(STDOUT, LOCK_UN) or die "FATAL: can't release write lock: $!"; - - flock(LOCKFILE, LOCK_UN) or die "FATAL: can't unlock $lock_file: $!"; -} diff --git a/fs_selfservice/FS-SelfService/test.pl b/fs_selfservice/FS-SelfService/test.pl deleted file mode 100644 index 7468ea471..000000000 --- a/fs_selfservice/FS-SelfService/test.pl +++ /dev/null @@ -1,17 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -######################### - -# change 'tests => 1' to 'tests => last_test_to_print'; - -use Test; -BEGIN { plan tests => 1 }; -use FS::SelfService; -ok(1); # If we made it this far, we're ok. - -######################### - -# Insert your test code below, the Test module is use()ed here so read -# its man page ( perldoc Test ) for help writing this test script. - diff --git a/fs_selfservice/fs_passwd_test b/fs_selfservice/fs_passwd_test deleted file mode 100755 index 4f8b8a888..000000000 --- a/fs_selfservice/fs_passwd_test +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::SelfService qw(passwd); - -my $rv = passwd( - 'username' => 'ivan', - 'old_password' => 'heyhoo', - 'new_password' => 'haloo', -); -my $error = $rv->{error}; - -if ( $error eq 'Incorrect password.' ) { - exit; -} else { - die $error if $error; - die "no error"; -} - |