• R/O
  • HTTP
  • SSH
  • HTTPS

newslash: Commit

newslash


Commit MetaInfo

Revisão8a849c2aa8d36b94d6cd913aead78d01d516c39c (tree)
Hora2019-06-17 17:36:04
Autorhylom <hylom@user...>
Commiterhylom

Mensagem de Log

Plugin::ResponseFilter: fix to apply timeline results

Mudança Sumário

Diff

--- a/src/newslash_web/lib/Newslash/Plugin/ResponseFilter.pm
+++ b/src/newslash_web/lib/Newslash/Plugin/ResponseFilter.pm
@@ -14,8 +14,31 @@ sub register {
1414 submissions => { 1000 => [qw(ipid subnetid note comment)] },
1515 };
1616 $cnf->{faculities} ||= $default_faculities;
17- $cnf->{enable} = 0 if !defined $cnf->{enable};
17+ $cnf->{enable} //= 0;
1818 $app->helper(apply_seclev_filter => sub { apply_seclev_filter(@_) });
19+
20+ if ($cnf->{enable}) {
21+ $app->hook(before_render => sub {
22+ my ($c, $args) = @_;
23+ return if (!defined $args->{json});
24+
25+ my $json = $args->{json};
26+ my $result = $json->{result} || $json;
27+ if ($result->{item}) {
28+ if ($result->{item}->{content_type}) {
29+ apply_seclev_filter($c, $result->{item}->{content_type}, $result->{item});
30+ }
31+ }
32+
33+ if ($result->{items} && ref($result->{items}) eq "ARRAY") {
34+ for my $item (@{$result->{items}}) {
35+ if ($item->{content_type}) {
36+ apply_seclev_filter($c, $item->{content_type}, $item);
37+ }
38+ }
39+ }
40+ });
41+ }
1942 }
2043
2144 sub apply_seclev_filter {
@@ -35,21 +58,38 @@ sub apply_seclev_filter {
3558
3659 my $cnf = $c->config->{ResponseFilter} || {};
3760 my $faculties = $cnf->{faculities} || {};
38- my $faculty = $faculties->{$model};
39- if (!$faculty) {
40- $c->app->log->debug("no faculty found for $model");
41- return;
61+
62+ #warn Dumper $faculties;
63+
64+ my $faculty_all = $faculties->{all} || {};
65+ for my $lv (keys %$faculty_all) {
66+ if ($security_level < $lv) {
67+ for my $item (@$targets) {
68+ for my $k (@{$faculty_all->{$lv}}) {
69+ if (defined $item->{$k}) {
70+ delete $item->{$k};
71+ #$c->app->log->debug("remove $k");
72+ }
73+ }
74+ }
75+ }
4276 }
4377
78+ my $faculty = $faculties->{$model} || {};
4479 for my $lv (keys %$faculty) {
4580 if ($security_level < $lv) {
4681 for my $item (@$targets) {
4782 for my $k (@{$faculty->{$lv}}) {
48- delete $item->{$k} if defined $item->{$k};
83+ if (defined $item->{$k}) {
84+ delete $item->{$k};
85+ #$c->app->log->debug("remove $k");
86+ }
4987 }
5088 }
5189 }
5290 }
91+
92+
5393 return $items;
5494 }
5595
--- a/src/newslash_web/lib/Newslash/Web/Controller/API/Comment.pm
+++ b/src/newslash_web/lib/Newslash/Web/Controller/API/Comment.pm
@@ -75,7 +75,7 @@ sub post {
7575 my $ret = {};
7676 my $result = $comments->select(cid => $cid,
7777 security_level => $user->{seclev});
78- $c->apply_seclev_filter("comments", $result);
78+ $c->apply_seclev_filter("comment", $result);
7979
8080 if ($result) {
8181 $ret->{type} = "comment";
@@ -134,7 +134,7 @@ sub get {
134134 }
135135 my $rs = $comments->select($key => $value);
136136
137- $c->apply_seclev_filter("comments", $rs);
137+ $c->apply_seclev_filter("comment", $rs);
138138
139139 if (!defined $rs) {
140140 $c->render(json => { error => 1, message => 'invalid request' });
--- a/src/newslash_web/lib/Newslash/Web/Controller/API/Metamoderation.pm
+++ b/src/newslash_web/lib/Newslash/Web/Controller/API/Metamoderation.pm
@@ -17,7 +17,7 @@ sub get {
1717 }
1818 else {
1919 my $m2s = $metamoderations->select(cid => $cid);
20- $c->apply_seclev_filter("metamoderations", $m2s);
20+ $c->apply_seclev_filter("metamoderation", $m2s);
2121
2222 if ($m2s) {
2323 my $hashed_m2s = {};
--- a/src/newslash_web/lib/Newslash/Web/Controller/API/Submission.pm
+++ b/src/newslash_web/lib/Newslash/Web/Controller/API/Submission.pm
@@ -18,7 +18,7 @@ sub get {
1818 }
1919 my $submissions = $c->model('submissions');
2020 my $submission = $submissions->select(submission_id => $subid);
21- $c->apply_seclev_filter("submissions", $submission);
21+ $c->apply_seclev_filter("submission", $submission);
2222
2323 if (!$submission) {
2424 $c->render(json => { err => 1, message => "not_found" });
@@ -57,7 +57,7 @@ sub list {
5757 order_by => {create_time => "DESC"},
5858 limit => $limit,
5959 skip => $skip);
60- $c->apply_seclev_filter("submissions", $items);
60+ $c->apply_seclev_filter("submission", $items);
6161
6262 if (!$items) {
6363 $message = $submissions->last_error;
Show on old repository browser