X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=lib%2FNDWeb%2FController%2FJSRPC.pm;h=bf7e5940256f6bf056d3cfbb3d268e4f77b86175;hb=816fe5105ca7111b535a2729094e65a2ad83718a;hp=b1aeba7bb76915a518158f2ca2928d64a22b1c8d;hpb=04d8c1f0c632f94d49f9f1df96a53446189f5f4f;p=ndwebbie.git diff --git a/lib/NDWeb/Controller/JSRPC.pm b/lib/NDWeb/Controller/JSRPC.pm index b1aeba7..bf7e594 100644 --- a/lib/NDWeb/Controller/JSRPC.pm +++ b/lib/NDWeb/Controller/JSRPC.pm @@ -4,6 +4,8 @@ use strict; use warnings; use parent 'Catalyst::Controller'; +use DateTime::TimeZone; + =head1 NAME NDWeb::Controller::JSRPC - Catalyst Controller @@ -36,14 +38,15 @@ sub update : Local { my $targets;; if ($from){ - my ($timestamp) = $dbh->selectrow_array("SELECT MAX(modified)::timestamp AS modified FROM raid_targets"); + my ($timestamp) = $dbh->selectrow_array(q{SELECT MAX(modified)::timestamp AS modified + FROM raid_targets WHERE raid = $1},undef,$raid->{id}); $c->stash(timestamp => $timestamp); - $targets = $dbh->prepare(q{SELECT r.id,r.planet FROM raid_targets r + $targets = $dbh->prepare(q{SELECT r.id,r.pid FROM raid_targets r WHERE r.raid = ? AND modified > ? }); $targets->execute($raid->{id},$from); }elsif($target){ - $targets = $dbh->prepare(q{SELECT r.id,r.planet FROM raid_targets r + $targets = $dbh->prepare(q{SELECT r.id,r.pid FROM raid_targets r WHERE r.raid = $1 AND r.id = $2 }); $targets->execute($raid->{id},$target); @@ -172,7 +175,6 @@ sub joinable : Local { WHERE target = ? AND wave = ? }); $query->execute($joinable,$target,$wave); - $c->forward('/listTargets'); } $c->stash(template => 'jsrpc/update.tt2'); @@ -187,10 +189,17 @@ sub listTargets : Local { $c->forward('/listTargets'); } -sub access_denied : Local { - my ($self, $c) = @_; +sub tzcountries : Local { + my ($self, $c, $cat) = @_; - $c->stash(template => 'jsrcp/access_denied.tt2'); + my @countries = DateTime::TimeZone->names_in_category($cat); + $c->stash(tzcountries => \@countries); +} + +sub access_denied : Private { + my ($self, $c) = @_; + $c->stash(template => 'jsrpc/access_denied.tt2'); + $c->res->status(403); } sub assertTarget : Private { @@ -210,6 +219,39 @@ sub assertTarget : Private { } } +sub addscans : Local { + my ( $self, $c ) = @_; + my $dbh = $c->model; + + my $findscan = $dbh->prepare(q{SELECT scan_id FROM scans + WHERE scan_id = LOWER(?) AND tick >= tick() - 168 AND groupscan = ? + }); + my $addscan = $dbh->prepare(q{INSERT INTO scans (scan_id,tick,uid,groupscan) + VALUES (LOWER(?),tick(),?,?) + }); + my $addpoint = $dbh->prepare(q{UPDATE users SET scan_points = scan_points + 1 + WHERE uid = ? + }); + my $message = $c->req->param('message'); + my @scans; + while ($message =~ m{scan(_id|_grp)?=(\w+)}g){ + my $groupscan = (defined $1 && $1 eq '_grp') || 0; + my %scan; + $scan{id} = $2; + $scan{group} = $groupscan; + $findscan->execute($2,$groupscan); + if ($findscan->rows == 0){ + if ($addscan->execute($2,$c->stash->{UID},$groupscan)){ + $addpoint->execute($c->stash->{UID}) unless $groupscan; + $scan{added} = 1; + } + }else{ + $scan{message} = 'already exists'; + } + push @scans,\%scan; + } +} + sub end : ActionClass('RenderView') { my ($self,$c) = @_; $c->res->content_type('application/xml'); @@ -217,9 +259,11 @@ sub end : ActionClass('RenderView') { if (scalar @{ $c->error } ){ if ($c->error->[0] =~ m/Can't call method "id" on an undefined value at/){ $c->stash->{template} = 'jsrpc/access_denied.tt2'; + $c->res->status(403); $c->clear_errors; }elsif ($c->error->[0] =~ m/Missing roles: /){ $c->stash->{template} = 'jsrpc/access_denied.tt2'; + $c->res->status(403); $c->clear_errors; } }