]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/JSRPC.pm
Add jsrpc/addscans
[ndwebbie.git] / lib / NDWeb / Controller / JSRPC.pm
index 41c7c3d6ebf4df47ce0dd08edb2159e367b99959..bf7e5940256f6bf056d3cfbb3d268e4f77b86175 100644 (file)
@@ -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,6 +189,19 @@ sub listTargets : Local {
        $c->forward('/listTargets');
 }
 
+sub tzcountries : Local {
+       my ($self, $c, $cat) = @_;
+
+       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 {
        my ($self, $c, $raid, $from, $target, $wave) = @_;
        my $dbh = $c->model;
@@ -204,9 +219,54 @@ 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');
+
+       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;
+               }
+       }
 }
 
 =head1 AUTHOR