#use vars qw($DEBUG $me);
use FS::Record qw(qsearchs);
use FS::Conf;
-use FS::svc_external;
+use FS::svc_acct;
use FS::webservice_log;
#$DEBUG = 0;
-#$me = '[FS::ClientAPI::PrepaidPhone]';
+#$me = '[FS::ClientAPI:Freeside]';
# inputs:
# support-key
#
# returns:
# error (empty, or error message)
+# custnum
sub freesideinc_service {
my $packet = shift;
or return { 'error' => 'bad support-key' };
my($username, $_password) = ($1,$2);
- my $svc_external = qsearchs({
- 'table' => 'svc_external',
+ my $svc_acct = qsearchs({
+ 'table' => 'svc_acct',
'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum )',
'hashref' => { 'username' => $username,
'_password' => $_password,
},
- 'extra_sql' => " AND svcpart = $svcpart",
- })
- or return { 'error' => 'bad support-key' };
+ 'extra_sql' => "AND svcpart = $svcpart",
+ });
+ unless ( $svc_acct ) {
+ warn "bad support-key for $username from $ENV{REMOTE_IP}\n";
+ sleep 5; #ideally also rate-limit and eventually ban their IP
+ return { 'error' => 'bad support-key' };
+ }
+
+ my $cust_pkg = $svc_acct->cust_svc->cust_pkg;
+ my $custnum = $cust_pkg->custnum;
+
+ my $quantity = $packet->{'quantity'} || 1;
+
+ #false laziness w/webservice_log.pm
+ my $color = 1.10;
+ my $page = 0.10;
#XXX check if some customers can use some API calls, rate-limiting, etc.
# but for now, everybody can use everything
+ if ( $packet->{method} eq 'print' ) {
+ my $avail_credit = $cust_pkg->cust_main->credit_limit
+ - $color - $quantity * $page
+ - FS::webservice_log->price_print(
+ 'custnum' => $custnum,
+ );
+
+ return { 'error' => 'Over credit limit' }
+ if $avail_credit <= 0;
+ }
#record it happened
my $webservice_log = new FS::webservice_log {
- 'custnum' => $svc_external->cust_svc->cust_pkg->custnum,
- 'svcnum' => $svc_external->svcnum,
+ 'custnum' => $custnum,
+ 'svcnum' => $svc_acct->svcnum,
'method' => $packet->{'method'},
- 'quantity' => $packet->{'quantity'} || 1,
+ 'quantity' => $quantity,
};
my $error = $webservice_log->insert;
return { 'error' => $error } if $error;
- return { 'error' => '' };
-
+ return { 'error' => '',
+ 'custnum' => $custnum,
+ };
}
1;