1 package FS::ClientAPI::MasonComponent;
4 use vars qw( $cache $DEBUG $me );
6 use FS::Mason qw( mason_interps );
8 use FS::ClientAPI_SessionCache;
9 use FS::Record qw(qsearchs);
13 $me = '[FS::ClientAPI::MasonComponent]';
15 my %allowed_comps = map { $_=>1 } qw(
16 /elements/select-did.html
24 my %session_comps = map { $_=>1 } qw(
25 /elements/location.html
28 my %session_callbacks = (
29 '/elements/location.html' => sub {
30 my( $custnum, $argsref ) = @_;
31 my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
32 or return "unknown custnum $custnum";
34 $args{object} = $cust_main;
35 @$argsref = ( %args );
41 my( $fs_interp, $rt_interp ) = mason_interps('standalone', 'outbuf'=>\$outbuf);
46 warn "$me mason_comp called on $packet\n" if $DEBUG;
48 my $comp = $packet->{'comp'};
49 unless ( $allowed_comps{$comp} || $session_comps{$comp} ) {
50 return { 'error' => 'Illegal component' };
53 my @args = $packet->{'args'} ? @{ $packet->{'args'} } : ();
55 if ( $session_comps{$comp} ) {
57 my $session = _cache->get($packet->{'session_id'})
58 or return ( 'error' => "Can't resume session" ); #better error message
59 my $custnum = $session->{'custnum'};
61 my $error = &{ $session_callbacks{$comp} }( $custnum, \@args );
62 return { 'error' => $error } if $error;
66 my $conf = new FS::Conf;
67 $FS::Mason::Request::FSURL = $conf->config('selfservice_server-base_url');
68 $FS::Mason::Request::QUERY_STRING = $packet->{'query_string'} || '';
71 $fs_interp->exec($comp, @args); #only FS for now alas...
73 #errors? (turn off in-line error reporting?)
75 return { 'output' => $outbuf };
81 $cache ||= new FS::ClientAPI_SessionCache( {
82 'namespace' => 'FS::ClientAPI::MyAccount',