package FS::API;
use FS::Conf;
-use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( qsearchs );
use FS::cust_main;
-use FS::cust_location;
=head1 NAME
#---
+#Customer data
+# pull customer info
+# The fields needed are:
+#
+# cust_main.custnum
+# cust_main.first
+# cust_main.last
+# cust_main.company
+# cust_main.address1
+# cust_main.address2
+# cust_main.city
+# cust_main.state
+# cust_main.zip
+# cust_main.daytime
+# cust_main.night
+# cust_main_invoice.dest
+#
+# at minimum
+
+#Customer balances
+
+#Advertising sources?
+
# "2 way syncing" ? start with non-sync pulling info here, then if necessary
# figure out how to trigger something when those things change
# long-term: package changes?
-
-=item new_customer
-
-=cut
-
-#certainly false laziness w/ClientAPI::Signup new_customer/new_customer_minimal
-# but approaching this from a clean start / back-office perspective
-# i.e. no package/service, no immediate credit card run, etc.
-
-sub new_customer {
- my( $class, %opt ) = @_;
- my $conf = new FS::Conf;
- return { 'error' => 'Incorrect shared secret' }
- unless $opt{secret} eq $conf->config('api_shared_secret');
-
- #default agentnum like signup_server-default_agentnum?
-
- #same for refnum like signup_server-default_refnum
-
- my $cust_main = new FS::cust_main ( {
- 'agentnum' => $agentnum,
- 'refnum' => $opt{refnum}
- || $conf->config('signup_server-default_refnum'),
- 'payby' => 'BILL',
-
- map { $_ => $opt{$_} } qw(
- agentnum refnum agent_custid referral_custnum
- last first company
- address1 address2 city county state zip country
- latitude longitude
- geocode censustract censusyear
- ship_address1 ship_address2 ship_city ship_county ship_state ship_zip ship_country
- ship_latitude ship_longitude
- daytime night fax mobile
- payby payinfo paydate paycvv payname
- ),
-
- } );
-
- my @invoicing_list = $opt{'invoicing_list'}
- ? split( /\s*\,\s*/, $opt{'invoicing_list'} )
- : ();
- push @invoicing_list, 'POST' if $opt{'postal_invoicing'};
-
- $error = $cust_main->insert( {}, \@invoicing_list );
- return { 'error' => $error } if $error;
-
- return { 'error' => '',
- 'custnum' => $cust_main->custnum,
- };
-
-}
-
=item customer_info
=cut
'error' => '',
'display_custnum' => $cust_main->display_custnum,
'name' => $cust_main->first. ' '. $cust_main->get('last'),
- 'balance' => $cust_main->balance,
- 'status' => $cust_main->status,
- 'statuscolor' => $cust_main->statuscolor,
);
$return{$_} = $cust_main->get($_)
- foreach ( @cust_main_editable_fields,
- @location_editable_fields,
- map "ship_$_", @location_editable_fields,
- );
-
- my @invoicing_list = $cust_main->invoicing_list;
- $return{'invoicing_list'} =
- join(', ', grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list );
- $return{'postal_invoicing'} =
- 0 < ( grep { $_ eq 'POST' } @invoicing_list );
-
- #generally, the more useful data from the cust_main record the better.
- # well, tell me what you want
+ foreach @cust_main_editable_fields;
return \%return;
}
-
-#I also monitor for changes to the additional locations that are applied to
-# packages, and would like for those to be exportable as well. basically the
-# location data passed with the custnum.
-sub location_info {
- my( $class, %opt ) = @_;
- my $conf = new FS::Conf;
- return { 'error' => 'Incorrect shared secret' }
- unless $opt{secret} eq $conf->config('api_shared_secret');
-
- my @cust_location = qsearch('cust_location', { 'custnum' => $opt{custnum} });
-
- my %return = (
- 'error' => '',
- 'locations' => [ map $_->hashref, @cust_location ],
- );
-
- return \%return;
-}
-
-#Advertising sources?
-
=back
1;
'type' => 'checkbox',
},
+ {
+ 'key' => 'api_shared_secret',
+ 'section' => 'API',
+ 'description' => 'Shared secret for back-office API authentication',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'xmlrpc_api',
+ 'section' => 'API',
+ 'description' => 'Enable the back-office API XML-RPC server (on port 8008).',
+ 'type' => 'checkbox',
+ },
+
+# {
+# 'key' => 'jsonrpc_api',
+# 'section' => 'API',
+# 'description' => 'Enable the back-office API JSON-RPC server (on port 8081).',
+# 'type' => 'checkbox',
+# },
+
{ key => "apacheroot", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
bin/freeside-sqlradius-seconds
bin/freeside-torrus-srvderive
FS.pm
+FS/API.pm
FS/AccessRight.pm
FS/CGI.pm
FS/InitHandler.pm
FS/Cron/bill.pm
FS/Cron/vacuum.pm
FS/Daemon.pm
+FS/Daemon/Preforking.pm
FS/Maestro.pm
FS/Misc.pm
FS/Record.pm
#edit the stuff below to have the daemons start
QUEUED_USER=fs_queue
+API_USER = fs_api
SELFSERVICE_USER = fs_selfservice
#never run on the same machine in production!!!
s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\
" blib/lib/FS/cust_main/*.pm blib/lib/FS/cust_pkg/*.pm;\
perl -p -i -e "\
+ s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
+ " blib/lib/FS/Daemon/*.pm;\
+ perl -p -i -e "\
s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\
s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
s|%%%FREESIDE_LOCK%%%|${FREESIDE_LOCK}|g;\
install -o root -g ${INSTALLGROUP} -m 711 init.d/freeside-init ${INIT_FILE}
perl -p -i -e "\
s/%%%QUEUED_USER%%%/${QUEUED_USER}/g;\
+ s/%%%API_USER%%%/${API_USER}/g;\
s/%%%SELFSERVICE_USER%%%/${SELFSERVICE_USER}/g;\
s/%%%SELFSERVICE_MACHINES%%%/${SELFSERVICE_MACHINES}/g;\
" ${INIT_FILE}
my @deleteable = qw( invoice_latexreturnaddress invoice_htmlreturnaddress );
my %deleteable = map { $_ => 1 } @deleteable;
-my @sections = qw(required billing invoicing notification UI self-service ticketing network_monitoring username password session shell BIND telephony );
-push @sections, '', 'deprecated';
+my @sections = (qw(
+ required billing invoicing notification UI API self-service ticketing
+ network_monitoring username password session shell BIND telephony
+ ), '', 'deprecated'
+);
my %section_items = ();
foreach my $section (@sections) {
### END INIT INFO
QUEUED_USER=%%%QUEUED_USER%%%
+API_USER=%%%API_USER%%%
SELFSERVICE_USER=%%%SELFSERVICE_USER%%%
SELFSERVICE_MACHINES="%%%SELFSERVICE_MACHINES%%%"
case "$1" in
start)
# Start daemons.
+
+ for MACHINE in $SELFSERVICE_MACHINES; do
+ echo -n "Starting freeside-selfservice-server to $MACHINE: "
+ freeside-selfservice-server $SELFSERVICE_USER $MACHINE
+ echo "done."
+ done
+
+ echo -n "Starting freeside-selfservice-xmlrpcd: "
+ freeside-selfservice-xmlrpcd $SELFSERVICE_USER
+ echo "done."
+
+ echo -n "Starting freeside-xmlrpcd: "
+ freeside-xmlrpcd $API_USER
+ echo "done."
+
+# echo -n "Starting freeside-jsonrpcd: "
+# freeside-jsonrpcd $API_USER
+# echo "done."
+
echo -n "Starting freeside-queued: "
#perl -MDBIx::Profile /usr/local/bin/freeside-queued $QUEUED_USER
freeside-queued $QUEUED_USER
freeside-cdrd $QUEUED_USER
echo "done."
- for MACHINE in $SELFSERVICE_MACHINES; do
- echo -n "Starting freeside-selfservice-server to $MACHINE: "
- freeside-selfservice-server $SELFSERVICE_USER $MACHINE
- echo "done."
- done
-
- echo -n "Starting freeside-selfservice-xmlrpcd: "
- freeside-selfservice-xmlrpcd $SELFSERVICE_USER
+ echo -n "Starting freeside-cdrrated: "
+ freeside-cdrrated $QUEUED_USER
echo "done."
if [ -e /usr/local/bin/torrus ]; then
echo "done."
fi
+ if [ -e /var/run/freeside-cdrrated.pid ]; then
+ echo -n "Stopping freeside-cdrrated: "
+ kill `cat /var/run/freeside-cdrrated.pid`
+ echo "done."
+ fi
+
+ if [ -e /var/run/freeside/torrus-srvderive.pid ]; then
+ echo -n "Stopping freeside-torrus-srvderive: "
+ kill `cat /var/run/freeside/torrus-srvderive.pid`
+ echo "done."
+ fi
+
+ if [ -e /var/run/torrus/collector.main_?.pid ]; then
+ echo -n "Stopping torrus collector: "
+ kill `cat /var/run/torrus/collector.main_?.pid`
+ echo "done."
+ fi
+
+ if [ -e /var/run/freeside/xmlrpcd.pid ]; then
+ echo -n "Stopping freeside-xmlrpcd: "
+ kill `cat /var/run/freeside/xmlrpcd.pid`
+ echo "done."
+ fi
+
+# if [ -e /var/run/freeside/jsonrpcd.pid ]; then
+# echo -n "Stopping freeside-jsonrpcd: "
+# kill `cat /var/run/freeside/jsonrpcd.pid`
+# echo "done."
+# fi
+
if [ -e /var/run/freeside-selfservice-server.$SELFSERVICE_USER.pid ]
then
echo -n "Stopping (old) freeside-selfservice-server: "
echo "done."
fi
- if [ -e /var/run/freeside/torrus-srvderive.pid ]; then
- echo -n "Stopping freeside-torrus-srvderive: "
- kill `cat /var/run/freeside/torrus-srvderive.pid`
- echo "done."
- fi
-
- if [ -e /var/run/torrus/collector.main_?.pid ]; then
- echo -n "Stopping torrus collector: "
- kill `cat /var/run/torrus/collector.main_?.pid`
- echo "done."
- fi
-
;;
restart)