OSDN Git Service

Plugin: add ResponseFilter
authorhylom <hylom@users.osdn.me>
Thu, 20 Sep 2018 12:15:55 +0000 (21:15 +0900)
committerhylom <hylom@users.osdn.me>
Thu, 20 Sep 2018 12:15:55 +0000 (21:15 +0900)
src/newslash_web/lib/Newslash/Plugin/ResponseFilter.pm [new file with mode: 0644]
src/newslash_web/lib/Newslash/Web/Controller.pm

diff --git a/src/newslash_web/lib/Newslash/Plugin/ResponseFilter.pm b/src/newslash_web/lib/Newslash/Plugin/ResponseFilter.pm
new file mode 100644 (file)
index 0000000..8b42234
--- /dev/null
@@ -0,0 +1,51 @@
+package Newslash::Plugin::ResponseFilter;
+use Mojo::Base 'Mojolicious::Plugin';
+
+sub register {
+    my ($self, $app, $conf) = @_;
+
+    # set default config value
+    my $cnf = $app->config->{ResponseFilter} ||= {};
+    my $defualt_faculities = { comments => { 1000 => [ipid, subnetid] },
+                              metamoderations => { 1000 => [uid] },
+                              moderations => { 1000 => [ipid, subnetid, uid, m2uid] },
+                              stories => { 1000 => [hits, hitparade] },
+                              submissions => { 1000 => [ipid, subnetid, note, comment] },
+                            };
+    $cnf->{faculities} ||= $default_faculities;
+    $cnf->{enable} = 1 if !defined $cnf->{enable};
+    $app->helper(apply_seclev_filter => sub { apply_seclev_filter(@_) });
+}
+
+sub apply_seclev_filter {
+    my ($c, $model, $items) = @_;
+    return if !$items || !$model;
+
+    my $user = $c->stash('user') || {};
+    my $security_level = $user->{seclev} || 0;
+
+    my $targets = $items;
+    if (ref($items) ne "ARRAY") {
+        $targets = [$items];
+    }
+
+    my $faculties = $c->config->{Faculties} || {};
+    my $faculty = $faculties->{$model};
+    if (!$faculty) {
+        $c->app->log->debug("no faculty found for $model");
+        return;
+    }
+
+    for my $lv (keys %$faculty) {
+        if ($security_level < $lv) {
+            for my $item (@$targets) {
+                for my $k (@{$faculty->{$lv}}) {
+                    delete $item->{$k} if defined $item->{$k};
+                }
+            }
+        }
+    }
+    return $items;
+}
+
+1;
index c2e30d5..9d4805d 100644 (file)
@@ -1,42 +1,5 @@
 package Newslash::Web::Controller;
 use Mojo::Base 'Mojolicious::Controller';
-use Data::Dumper;
 
-sub apply_seclev_filter {
-    my ($self, $model, $items) = @_;
-    return if !$items || !$model;
-
-    my $user = $self->stash('user') || {};
-    my $security_level = $user->{seclev} || 0;
-
-    my $targets = $items;
-    if (ref($items) ne "ARRAY") {
-        $targets = [$items];
-    }
-
-    my $faculties = $self->config->{Faculties} || {};
-    my $faculty = $faculties->{$model};
-    if (!$faculty) {
-        $self->app->log->debug("no faculty found for $model");
-        return;
-    }
-
-    for my $lv (keys %$faculty) {
-        if ($security_level < $lv) {
-            for my $item (@$targets) {
-                for my $k (@{$faculty->{$lv}}) {
-                    delete $item->{$k} if defined $item->{$k};
-                }
-            }
-        }
-    }
-    return $items;
-}
-
-sub get_config {
-    my ($self, $section, $key, $default) = @_;
-    my $config = $self->app->config->{$section} || {};
-    return $config->{$key} || $default;
-}
 
 1;