| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/usr/local/cpanel/3rdparty/bin/perl
- #ACLS:all
- package Troglodyne::CGI::API;
- use strict;
- use warnings;
- use Cpanel::LoadModule::Custom ();
- use JSON::XS ();
- run() unless caller();
- sub run {
- # Load up CGI processing modules
- Cpanel::LoadModule::Custom::load_perl_module("Troglodyne::CGI");
- # Process the args
- my $args = Troglodyne::CGI::get_args();
- # XXX Validation plz
- # Load route code
- my $namespace = "Troglodyne::API::$args->{'module'}";
- my ( $loaded, $err, $coderef );
- {
- local $@;
- $loaded = eval {
- Cpanel::LoadModule::Custom::load_perl_module($namespace);
- };
- $err = $@;
- $coderef = $namespace->can($args->{'function'});
- }
- # Get back the datastruct from the called module.
- # Yeah, yeah, I know. String eval. XXX
- my $ret = {
- 'metadata' => {
- 'input_args' => $args,
- },
- };
- if( $loaded && $coderef ) {
- my $data = $coderef->();
- $ret->{'data'} = $data;
- $ret->{'result'} = 1;
- } elsif( !$coderef ) {
- $ret->{'error'} = "No such function '$args->{'function'}' in $namespace";
- $ret->{'result'} = 0;
- } else {
- $ret->{'error'} = $err;
- $ret->{'result'} = 0;
- }
- # Emit the JSON
- print "Content-type: application/json\r\n\r\n";
- print JSON::XS::encode_json($ret);
- exit;
- }
- 1;
|