#!/usr/bin/perl use DBI; use Data::Dumper; use JSON; use feature qw/switch/; use CGI; my $IN = new CGI; print $IN->header(); 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; print $json->pretty->encode ({ ERROR => sprintf("Function parameter %s not defined", $param ) }); exit(1); } 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 $json->pretty->encode ({ ERROR => "No ids matched `$data_id'.\n\n" }); } $sth->finish; return $json->pretty->encode({ 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"); } my $res; given($params->{f}){ when(/info/){ unless(defined $params->{id}) { not_specified_error("id"); }; $res = mysql_retrieve('SELECT * FROM shaders WHERE id = ?', $params->{id}); } when(/all/){ $res = mysql_retrieve('select * from shaders order by id'); } when(/range/){ unless (defined $params->{limit}){ not_specified_error("limit") }; if (defined $params->{last}){ $res = mysql_retrieve(sprintf(' select * from shaders order by id desc limit %s , %s', $param->{last}, $params->{limit})); }else{ $res = mysql_retrieve(sprintf(' select * from shaders order by id desc limit 0 , %s', $params->{limit})); } } when(/history/){ unless(defined $params->{id}) { not_specified_error("id"); }; $res = mysql_retrieve('SELECT * FROM shaders WHERE shader_id = ? order by id', $params->{id}); } when(/username/){ unless(defined $params->{username}) { not_specified_error("username") }; $res = mysql_retrieve('select * from shaders where username = ?', $params->{username}); } when(/list_users/){ $res = mysql_retrieve('select distinct username from shaders;'); } when(/originals/){ $res = mysql_retrieve('select shaders.* from shader_ids cross join shaders on shader_ids.id = shaders.shader_id'); } default { if (defined $callback) { print $callback + "("; print $json->pretty->encode ({ ERROR => "Function parameter f improperly defined"}); print ")"; } else { print $json->pretty->encode ({ ERROR => "Function parameter f improperly defined"}); } exit(1); }; } if (defined $callback) { print $callback + "(" + $res + ")"; } else { print $res; } } main(); exit(0);