Merge branch 'master' of https://github.com/jgoodman/Freeside
[freeside.git] / FS / bin / freeside-selfservice-xmlrpcd
1 #!/usr/bin/perl
2
3 use FS::Daemon::Preforking qw( freeside_init1 freeside_init2 daemon_run );
4
5 use XMLRPC::Transport::HTTP; #SOAP::Transport::HTTP;
6 use XMLRPC::Lite; # for XMLRPC::Serializer
7
8 use FS::Conf;
9 use FS::ClientAPI qw( load_clientapi_modules );
10 use FS::ClientAPI_XMLRPC; #FS::SelfService::XMLRPC;
11
12 #freeside xmlrpc.cgi
13 my %typelookup = (
14 #not utf-8 safe#  base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'],
15   dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'],
16   string   => [40, sub {1}, 'as_string'],
17 );
18
19 use constant ME => 'selfservice-xmlrpcd';
20
21 #
22
23 freeside_init1(ME);
24
25 load_clientapi_modules;
26
27 freeside_init2(ME);
28
29 FS::ClientAPI::Signup::clear_cache();
30
31 my $conf = new FS::Conf;
32 die "not running; selfservice-xmlrpc conf option is off\n"
33   unless $conf->exists('selfservice-xmlrpc');
34
35 daemon_run( 'port' => 8080, 'handle_request' =>
36   sub {
37     my $request = shift;
38
39     my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup);
40
41     #my $soap = SOAP::Transport::HTTP::Server
42     my $soap = XMLRPC::Transport::HTTP::Server
43                -> new
44                -> dispatch_to('FS::ClientAPI_XMLRPC')
45                -> serializer($serializer);
46
47     $soap->request($request);
48     $soap->handle;
49
50     return $soap->response;
51   }
52 );
53
54 1;