X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FMyAccount.pm;h=e15476153f3648eb52de6f1ce0917577bd2ca9e4;hb=b023b9a96799ee2ad11abc0c23fcaf33a8bf12ca;hp=831b21622331037a05a1c34ef242a3098e29a8c2;hpb=f837ef4c8f5ab61c141f0859477be0675f1183bb;p=freeside.git diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 831b21622..e15476153 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1,13 +1,14 @@ package FS::ClientAPI::MyAccount; use strict; -use vars qw($cache); -use subs qw(_cache); +use vars qw( $cache $DEBUG ); +use subs qw( _cache _provision ); +use Data::Dumper; use Digest::MD5 qw(md5_hex); use Date::Format; use Business::CreditCard; use Time::Duration; -use FS::CGI qw(small_custview); #doh +use FS::UI::Web::small_custview qw(small_custview); #less doh use FS::UI::Web; use FS::UI::bytecount; use FS::Conf; @@ -28,6 +29,8 @@ use FS::payby; use FS::acct_rt_transaction; use HTML::Entities; +$DEBUG = 0; + #false laziness with FS::cust_main BEGIN { eval "use Time::Local;"; @@ -46,14 +49,26 @@ use vars qw( @cust_main_editable_fields ); ss paytype paystate stateid stateid_state ); -use subs qw(_provision); - sub _cache { $cache ||= new FS::ClientAPI_SessionCache( { 'namespace' => 'FS::ClientAPI::MyAccount', } ); } +sub login_info { + my $p = shift; + + my $conf = new FS::Conf; + + my %info = ( + 'phone_login' => $conf->exists('selfservice_server-phone_login'), + 'single_domain'=> scalar($conf->config('selfservice_server-single_domain')), + ); + + return \%info; + +} + #false laziness w/FS::ClientAPI::passwd::passwd sub login { my $p = shift; @@ -64,8 +79,8 @@ sub login { if ( $p->{'domain'} eq 'svc_phone' && $conf->exists('selfservice_server-phone_login') ) { - my $svc_phone = qsearch( 'svc_phone', { 'phonenum' => $p->{'username'}, } ); - return { error => 'Number not found.' } unless $svc_phone + my $svc_phone = qsearchs( 'svc_phone', { 'phonenum' => $p->{'username'} } ); + return { error => 'Number not found.' } unless $svc_phone; #XXX? #my $pkg_svc = $svc_acct->cust_svc->pkg_svc; @@ -88,11 +103,16 @@ sub login { ); return { error => 'User not found.' } unless $svc_acct; - my $pkg_svc = $svc_acct->cust_svc->pkg_svc; + #my $pkg_svc = $svc_acct->cust_svc->pkg_svc; + #return { error => 'Only primary user may log in.' } + # if $conf->exists('selfservice_server-primary_only') + # && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' ); + my $cust_svc = $svc_acct->cust_svc; + my $part_pkg = $cust_svc->cust_pkg->part_pkg; return { error => 'Only primary user may log in.' } if $conf->exists('selfservice_server-primary_only') - && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' ); - + && $cust_svc->svcpart != $part_pkg->svcpart('svc_acct'); + return { error => 'Incorrect password.' } unless $svc_acct->check_password($p->{'password'}); @@ -420,6 +440,7 @@ sub process_payment { or return { 'error' => "illegal_payby " . $p->{'payby'} }; my $payby = $1; + #false laziness w/process/payment.cgi my $payinfo; my $paycvv = ''; if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { @@ -438,14 +459,15 @@ sub process_payment { } elsif ( $payby eq 'CARD' || $payby eq 'DCRD' ) { $payinfo = $p->{'payinfo'}; - $payinfo =~ s/[^\dx]//g; - $payinfo =~ /^(\d{13,16})$/ - or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo - $payinfo = $1; $payinfo = $cust_main->payinfo if $cust_main->paymask eq $payinfo; + $payinfo =~ s/\D//g; + $payinfo =~ /^(\d{13,16})$/ + or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo + $payinfo = $1; + validate($payinfo) or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo return { 'error' => gettext('unknown_card_type') } @@ -575,7 +597,7 @@ sub invoice { return { 'error' => '', 'invnum' => $invnum, 'invoice_text' => join('', $cust_bill->print_text ), - 'invoice_html' => $cust_bill->print_html, + 'invoice_html' => $cust_bill->print_html( { unsquelch_cdr => 1 } ), }; } @@ -1097,6 +1119,8 @@ sub cancel_pkg { sub provision_acct { my $p = shift; + warn "provision_acct called\n" + if $DEBUG; return { 'error' => gettext('passwords_dont_match') } if $p->{'_password'} ne $p->{'_password2'}; @@ -1110,6 +1134,8 @@ sub provision_acct { unless ($domains{$p->{'domsvc'}}); } + warn "provision_acct calling _provision\n" + if $DEBUG; _provision( 'FS::svc_acct', [qw(username _password domsvc)], [qw(username _password domsvc)], @@ -1131,6 +1157,8 @@ sub provision_external { sub _provision { my( $class, $fields, $return_fields, $p ) = splice(@_, 0, 4); + warn "_provision called for $class\n" + if $DEBUG; my($context, $session, $custnum) = _custoragent_session_custnum($p); return { 'error' => $session } if $context eq 'error'; @@ -1142,27 +1170,42 @@ sub _provision { my $pkgnum = $p->{'pkgnum'}; + warn "searching for custnum $custnum pkgnum $pkgnum\n" + if $DEBUG; my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum, 'pkgnum' => $pkgnum, } ) or return { 'error' => "unknown pkgnum $pkgnum" }; + warn "searching for svcpart ". $p->{'svcpart'}. "\n" + if $DEBUG; my $part_svc = qsearchs('part_svc', { 'svcpart' => $p->{'svcpart'} } ) or return { 'error' => "unknown svcpart $p->{'svcpart'}" }; + warn "creating $class record\n" + if $DEBUG; my $svc_x = $class->new( { 'pkgnum' => $p->{'pkgnum'}, 'svcpart' => $p->{'svcpart'}, map { $_ => $p->{$_} } @$fields } ); + warn "inserting $class record\n" + if $DEBUG; my $error = $svc_x->insert; - $svc_x = qsearchs($svc_x->table, { 'svcnum' => $svc_x->svcnum }) - unless $error; - return { 'svc' => $part_svc->svc, - 'error' => $error, - map { $_ => $svc_x->get($_) } @$return_fields - }; + unless ( $error ) { + warn "finding inserted record for svcnum ". $svc_x->svcnum. "\n" + if $DEBUG; + $svc_x = qsearchs($svc_x->table, { 'svcnum' => $svc_x->svcnum }) + } + + my $return = { 'svc' => $part_svc->svc, + 'error' => $error, + map { $_ => $svc_x->get($_) } @$return_fields + }; + warn "_provision returning ". Dumper($return). "\n" + if $DEBUG; + return $return; }