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