diff --git a/data/myapi.json b/data/myapi.json new file mode 100644 index 0000000..20bc268 --- /dev/null +++ b/data/myapi.json @@ -0,0 +1,5 @@ +{ + "api" : { + "prefix" : "/api" + } +} diff --git a/lib/easter_egg.pm b/lib/easter_egg.pm new file mode 100644 index 0000000..3d65622 --- /dev/null +++ b/lib/easter_egg.pm @@ -0,0 +1,29 @@ +package easter_egg; + +use strict; +use warnings "all"; +use vars qw/$VERSION/; + +$VERSION = "1.0"; + +sub quote { + if (-f "/usr/games/fortune") { + return ('200', 'text/plain', `fortune`); + } else { + return ('200', 'text/plain', "No fortune here!\n"); + } +} + +sub chanserv { + return ('200', 'text/plain', "There is no conserves here.\n"); +} + +sub nickserv { + return ('200', 'text/plain', "Nick is out, please come back later.\n"); +} + +sub me { + return ('200', 'text/plain', "Who?\n"); +} + +1; diff --git a/lib/fortune.pm b/lib/fortune.pm deleted file mode 100644 index 011a349..0000000 --- a/lib/fortune.pm +++ /dev/null @@ -1,12 +0,0 @@ -package fortune; - -use strict; -use vars qw/$VERSION/; - -$VERSION = "1.0"; - -sub quote { - return ('200', 'text/plain', `fortune`); -} - -1; diff --git a/myapi-confcheck.pl b/myapi-confcheck.pl new file mode 100755 index 0000000..969c7e2 --- /dev/null +++ b/myapi-confcheck.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +use strict; +use warnings "all"; + +use JSON::PP; + +my $conf = "data/myapi.json"; +my $jstr = ""; +my $sep = $/; +$/ = ''; +open (C, $conf) || die "No such file $conf\n"; +$jstr = ; +close C; + +my $c = decode_json($jstr); + +my $j = JSON::PP->new->pretty->canonical->indent_length(4); +print $j->encode($c); diff --git a/myapi.psgi b/myapi.psgi index 851cba6..8a34514 100644 --- a/myapi.psgi +++ b/myapi.psgi @@ -6,10 +6,13 @@ use threads; use threads::shared; # my plugins -use lib "$ENV{'HOME'}/.local/var/www/psgi/lib"; +use lib "./lib"; use ping; use utils; -use fortune; +use easter_egg; + +sub loadConf(); +sub saveConf($); sub mythread(); @@ -17,6 +20,8 @@ my $main :shared = 0; #unless ($main) { threads->create('mythread'); } +my $CONF = loadConf(); +if ($CONF->{api}->{prefix} eq '/') { $CONF->{prefix} = ''; } my $app = sub { my $env = shift; @@ -25,15 +30,28 @@ my $app = sub { my $status = '404'; my $content = 'text/plain'; - if ($env->{PATH_INFO} eq '/d') { + if ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/d") { $status = '200'; $msg = Dumper($env); - } elsif ($env->{PATH_INFO} eq '/ping') { + } elsif ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/ping") { ($status, $content, $msg) = ping::pong(); - } elsif ($env->{PATH_INFO} eq '/ip') { + } elsif ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/ip") { ($status, $content, $msg) = utils::ip($env); - } elsif (($env->{PATH_INFO} eq '/fortune') or ($env->{PATH_INFO} eq '/quote')) { - ($status, $content, $msg) = fortune::quote(); + } elsif (($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/fortune") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/quote")) { + ($status, $content, $msg) = easter_egg::quote(); + } elsif (($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/chanserv") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/chanServ") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/ChanServ") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/CHANSERV")) { + ($status, $content, $msg) = easter_egg::chanserv(); + } elsif (($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/nickserv") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/nickServ") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/NickServ") or + ($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/NICKSERV")) { + ($status, $content, $msg) = easter_egg::nickserv(); + } elsif (($env->{PATH_INFO} eq "$CONF->{api}->{prefix}/me")) { + ($status, $content, $msg) = easter_egg::me(); } return [ @@ -43,6 +61,27 @@ my $app = sub { ]; }; +sub loadConf() { + my $c = "data/myapi.json"; + my $sep = $/; + $/ = ''; + open (C, $c) or die "No conf at $c\n"; + my $json = ; + close C; + return decode_json($json); +} + +sub saveConf($) { + my $c = shift; + my $file = "data/myapi.json"; + my $j = JSON::PP->new->pretty->canonical->indent_length(4); + my $json = $j->encode($c); + # TODO: make it transactional + open (C, ">", $file) or die "Unable to open $file\n"; + print C $json; + close C; +} + sub mythread () { $main = 1; threads->detach(); @@ -55,6 +94,8 @@ sub mythread () { } } + + # vim: set ft=perl noet ai : __END__