diff options
author | ivan <ivan> | 2010-06-16 07:50:17 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-06-16 07:50:17 +0000 |
commit | 0275abc52827599c9d1ee028cf88e1eb30473948 (patch) | |
tree | 5960d7b75a1b5dd4688f33798d412f6fe82fcfbe /FS/FS/ClientAPI_XMLRPC.pm | |
parent | e37126c4d8a3eea4d27c855733a77cba026565c4 (diff) |
start of a local XML-RPC server for ncic, RT#7780
Diffstat (limited to 'FS/FS/ClientAPI_XMLRPC.pm')
-rw-r--r-- | FS/FS/ClientAPI_XMLRPC.pm | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm new file mode 100644 index 000000000..138ad06a4 --- /dev/null +++ b/FS/FS/ClientAPI_XMLRPC.pm @@ -0,0 +1,146 @@ +package FS::ClientAPI_XMLRPC; + +=head1 NAME + +FS::ClientAPI_XMLRPC - Freeside XMLRPC accessible self-service API, on the backend + +=head1 SYNOPSIS + +This module implements the self-service API offered by xmlrpc.cgi and friends, +but on a backend machine. + +=head1 DESCRIPTION + +Use this API to implement your own client "self-service" module vi XMLRPC. + +Each routine described in L<FS::SelfService> is available vi XMLRPC as the +method FS.SelfService.XMLRPC.B<method>. All values are passed to the +selfservice-server in a struct of strings. The return values are in a +struct as strings, arrays, or structs as appropriate for the values +described in L<FS::SelfService>. + +=head1 BUGS + +=head1 SEE ALSO + +L<FS::SelfService::XMLRPC>, L<FS::SelfService> + +=cut + +use strict; + +use vars qw($DEBUG $AUTOLOAD); +use FS::ClientAPI; + +$DEBUG = 0; +$FS::ClientAPI::DEBUG = $DEBUG; + +sub AUTOLOAD { + my $call = $AUTOLOAD; + $call =~ s/^FS::(SelfService::|ClientAPI_)XMLRPC:://; + + warn "FS::ClientAPI_XMLRPC::AUTOLOAD $call\n" if $DEBUG; + + my $autoload = &ss2clientapi; + + if (exists($autoload->{$call})) { + shift; #discard package name; + #$call = "FS::SelfService::$call"; + #no strict 'refs'; + #&{$call}(@_); + #FS::ClientAPI->dispatch($autoload->{$call}, @_); + FS::ClientAPI->dispatch($autoload->{$call}, { @_ } ); + }else{ + die "No such procedure: $call"; + } +} + +#terrible false laziness w/SelfService.pm +# - fix at build time, by including some file in both selfserv and backend libs? +# - or fix at runtime, by having selfservice client ask server for the list? +sub ss2clientapi { + { + 'passwd' => 'passwd/passwd', + 'chfn' => 'passwd/passwd', + 'chsh' => 'passwd/passwd', + 'login_info' => 'MyAccount/login_info', + 'login' => 'MyAccount/login', + 'logout' => 'MyAccount/logout', + 'customer_info' => 'MyAccount/customer_info', + 'edit_info' => 'MyAccount/edit_info', #add to ss cgi! + 'invoice' => 'MyAccount/invoice', + 'invoice_logo' => 'MyAccount/invoice_logo', + 'list_invoices' => 'MyAccount/list_invoices', #? + 'cancel' => 'MyAccount/cancel', #add to ss cgi! + 'payment_info' => 'MyAccount/payment_info', + 'payment_info_renew_info' => 'MyAccount/payment_info_renew_info', + 'process_payment' => 'MyAccount/process_payment', + 'process_payment_order_pkg' => 'MyAccount/process_payment_order_pkg', + 'process_payment_change_pkg' => 'MyAccount/process_payment_change_pkg', + 'process_payment_order_renew' => 'MyAccount/process_payment_order_renew', + 'process_prepay' => 'MyAccount/process_prepay', + 'realtime_collect' => 'MyAccount/realtime_collect', + 'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?) + 'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?) + 'list_svc_usage' => 'MyAccount/list_svc_usage', + 'list_cdr_usage' => 'MyAccount/list_cdr_usage', + 'list_support_usage' => 'MyAccount/list_support_usage', + 'order_pkg' => 'MyAccount/order_pkg', #add to ss cgi! + 'change_pkg' => 'MyAccount/change_pkg', + 'order_recharge' => 'MyAccount/order_recharge', + 'renew_info' => 'MyAccount/renew_info', + 'order_renew' => 'MyAccount/order_renew', + 'cancel_pkg' => 'MyAccount/cancel_pkg', #add to ss cgi! + 'charge' => 'MyAccount/charge', #? + 'part_svc_info' => 'MyAccount/part_svc_info', + 'provision_acct' => 'MyAccount/provision_acct', + 'provision_external' => 'MyAccount/provision_external', + 'unprovision_svc' => 'MyAccount/unprovision_svc', + 'myaccount_passwd' => 'MyAccount/myaccount_passwd', + 'create_ticket' => 'MyAccount/create_ticket', + 'signup_info' => 'Signup/signup_info', + 'skin_info' => 'MyAccount/skin_info', + 'access_info' => 'MyAccount/access_info', + 'domain_select_hash' => 'Signup/domain_select_hash', # expose? + 'new_customer' => 'Signup/new_customer', + 'capture_payment' => 'Signup/capture_payment', + 'agent_login' => 'Agent/agent_login', + 'agent_logout' => 'Agent/agent_logout', + 'agent_info' => 'Agent/agent_info', + 'agent_list_customers' => 'Agent/agent_list_customers', + 'mason_comp' => 'MasonComponent/mason_comp', + 'call_time' => 'PrepaidPhone/call_time', + 'call_time_nanpa' => 'PrepaidPhone/call_time_nanpa', + 'phonenum_balance' => 'PrepaidPhone/phonenum_balance', + 'bulk_processrow' => 'Bulk/processrow', + 'check_username' => 'Bulk/check_username', + #sg + 'ping' => 'SGNG/ping', + 'decompify_pkgs' => 'SGNG/decompify_pkgs', + 'previous_payment_info' => 'SGNG/previous_payment_info', + 'previous_payment_info_renew_info' + => 'SGNG/previous_payment_info_renew_info', + 'previous_process_payment' => 'SGNG/previous_process_payment', + 'previous_process_payment_order_pkg' + => 'SGNG/previous_process_payment_order_pkg', + 'previous_process_payment_change_pkg' + => 'SGNG/previous_process_payment_change_pkg', + 'previous_process_payment_order_renew' + => 'SGNG/previous_process_payment_order_renew', + }; +} + + +#XXX submit patch to SOAP::Lite + +use XMLRPC::Transport::HTTP; + +package XMLRPC::Transport::HTTP::Server; + +@XMLRPC::Transport::HTTP::Server::ISA = qw(SOAP::Transport::HTTP::Server); + +sub initialize; *initialize = \&XMLRPC::Server::initialize; +sub make_fault; *make_fault = \&XMLRPC::Transport::HTTP::CGI::make_fault; +sub make_response; *make_response = \&XMLRPC::Transport::HTTP::CGI::make_response; + +1; |