#!/usr/bin/perl use DBI; use Data::Dumper; use JSON; use feature qw/switch/; use CGI; my $IN = new CGI; print $IN->header(-type => 'application/json'); our $json = JSON->new->allow_nonref; my $sql_username = "asdfus"; my $sql_dbname = "asdfus"; my $sql_passwd = "gTYgT&M6q"; sub not_specified_error{ my $param = shift; my $callback = shift; response({ ERROR => sprintf("Function parameter %s not defined", $param ) }, $callback); exit(1); } sub response{ my $res = $json->pretty->encode(shift); my $callback = shift; if (defined $callback){ print $callback . "(" . $res . ")"; } else { print $res; } } our $dbh = DBI->connect("DBI:mysql:$sql_dbname", $sql_username, $sql_passwd) or die "Couldn't connect to database: " . DBI->errstr; sub mysql_retrieve{ my ($statement, @args) = @_; my $sth = $dbh->prepare($statement) or die "Couldn't prepare statement: " . $dbh->errstr; $sth->execute(@args) or die "Couldn't execute statement: " . $sth->errstr; my @rows = (); while ($data = $sth->fetchrow_hashref()) { foreach (keys $data){ $data->{$_} =~ s/NULL|null//ig; $data->{$_} = $data->{$_} || ""; } push(@rows, $data); } if ($sth->rows == 0) { return { ERROR => "No ids matched `$data_id'.\n\n" }; } $sth->finish; return { SUCCESS => 1, data => \@rows }; } sub main{ my $params = {}; my $query_string = $ENV{'QUERY_STRING'}; my @pairs = split(/[&;]/, $query_string); foreach(@pairs){ my ($key, $value) = split(/=/, $_, 2); $params->{$key} = $value; } my $callback = $params->{'callback'} || undef; unless(defined $params->{f}){ not_specified_error("f", $callback); } my $res; for($params->{f}){ /info/ && do { unless(defined $params->{id}) { not_specified_error("id"); }; $res = mysql_retrieve('SELECT * FROM shaders WHERE id = ?', $params->{id}); last; }; /all/ && do { $res = mysql_retrieve('select * from shaders order by id'); last; }; /range/ && do { unless (defined $params->{limit}){ not_specified_error("limit") }; $res = mysql_retrieve(' select * from shaders order by id desc limit ? , ?', ($params->{last} || 0), $params->{limit}); last; }; /history/ && do{ unless(defined $params->{id}) { not_specified_error("id"); }; $res = mysql_retrieve('SELECT * FROM shaders WHERE shader_id = ? order by id', $params->{id}); last; }; /username/ && do{ unless(defined $params->{username}) { not_specified_error("username") }; $res = mysql_retrieve('select * from shaders where username = ?', $params->{username}); last; }; /list_users/ && do{ $res = mysql_retrieve('select distinct username from shaders;'); last; }; /originals/ && do{ $res = mysql_retrieve('select shaders.* from shader_ids cross join shaders on shader_ids.id = shaders.shader_id'); last; }; response({ ERROR => "Function parameter f improperly defined"}, $callback); exit(1); } response($res, $callback); } main(); exit(0);