[BACK]Return to test_server.pl CVS log [TXT][DIR] Up to [local] / HOPE / Net-OpenAMD / script

File: [local] / HOPE / Net-OpenAMD / script / test_server.pl (download)

Revision 1.1, Fri Jun 25 02:30:56 2010 UTC (13 years, 11 months ago) by andrew
Branch: MAIN

Basic API server for testing.  Mojolicious is teh r0x0r!

#!/usr/bin/env perl

use Mojolicious::Lite;

use 5.010;

my %Actions = (
    location => [
        {   area   => 'Engressia',
            'time' => '2387',
            x      => '46.7369918823242',
            y      => '83.1452331542969',
            user   => '12983',
            button => 'False',
        },
    ],
    speakers => [
        {   name => 'Johnny',
            bio  => 'Johnny\'s bio'
        },
        {   name => 'Judas',
            bio  => 'Judas\'s bio'
        },
    ],
    talks => [
        {   speakers => [ 'Judas', 'JohnnyX' ],
            title    => 'Ancient Egyptian Music and DRM',
            abstract =>
                'A discussion of the development of musical notation, which was designed as a means of reproducing music while making it impossible for the general public to perform without permission.',
            'time'    => '2008/7/18 13:00:00',
            track     => 'Hooper',
            interests => [ 'media', 'crypto' ]
        },
    ],
    interests => [
        'new tech',           'activism',
        'radio',              'lockpicking',
        'crypto',             'privacy',
        'ethics',             'telephones',
        'social engineering', 'hacker spaces',
        'hardware hacking',   'nostalgia',
        'communities',        'science',
        'government',         'network security',
        'malicious software', 'pen testing',
        'web',                'niche hacks',
        'media'
    ],
    users => [
        {   name      => 'JohnnyX',
            x         => '32.54091324',
            y         => '54.10958384',
            interests => [
                'new tech',           'radio',
                'lockpicking',        'crypto',
                'telephones',         'social engineering',
                'hacker spaces',      'hardware hacking',
                'nostalgia',          'communities',
                'science',            'network security',
                'malicious software', 'pen testing',
            ],
        },
        {   name      => 'andrew',
            x         => '32',
            y         => '54',
            interests => [
                'media',
                'lockpicking',        'crypto',
                'telephones',         'social engineering',
                'hacker spaces',      'hardware hacking',
                'science',            'network security',
                'malicious software', 'pen testing',
            ],
        },
        {   name      => 'Judas',
            x         => '33',
            y         => '52',
            interests => [
                'media', 
                'lockpicking',        'crypto',
                'telephones',         'social engineering',
                'science',            'network security',
                'malicious software', 'pen testing',
            ],
        },
    ],
);

get '/' => 'index';

get '/api/:action' => sub {
    my $self   = shift;
    my $action = $self->stash('action');

    return if !exists $Actions{$action};

    my @data = @{ $Actions{$action} };
    foreach my $param ( $self->param() ) {
        next if $param eq 'callback';
        next if $param eq 'action';

        my $value = $self->param($param);
        @data = grep $value ~~ $_->{$param}, @data;
    }
    $self->render_json( \@data );
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
Please try /api/action

@@ layouts/default.html.ep
<!doctype html><html>
    <head><title>Test OpenAMD API!</title></head>
    <body><%== content %></body>
</html>