[dw-free] Index for /security/
[commit: http://hg.dwscoalition.org/dw-free/rev/aad8d272cb59]
http://bugs.dwscoalition.org/show_bug.cgi?id=1581
Landing page for exampleusername.dreamwidth.org/security/...
Patch by
fu.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=1581
Landing page for exampleusername.dreamwidth.org/security/...
Patch by
Files modified:
- bin/upgrading/en.dat
- cgi-bin/Apache/LiveJournal.pm
- cgi-bin/LJ/User.pm
- views/journal/security.tt
- views/journal/security.tt.text
--------------------------------------------------------------------------------
diff -r a250438f2f6e -r aad8d272cb59 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat Tue May 24 15:17:51 2011 +0800
+++ b/bin/upgrading/en.dat Tue May 24 16:25:27 2011 +0800
@@ -942,7 +942,7 @@
error.security.invalid=You have specified an invalid security setting, the access group you specified does not exist, or you are not a member of that group.
-error.security.name=Security Error
+error.security.name2=Security Filter Error
error.security.noarg=You must provide a security level to filter by.
diff -r a250438f2f6e -r aad8d272cb59 cgi-bin/Apache/LiveJournal.pm
--- a/cgi-bin/Apache/LiveJournal.pm Tue May 24 15:17:51 2011 +0800
+++ b/cgi-bin/Apache/LiveJournal.pm Tue May 24 16:25:27 2011 +0800
@@ -735,16 +735,12 @@
} elsif ($mode eq 'security') {
# tailing slash on here to prevent a second redirect after this one
return redir($r, LJ::journal_base($user) . "$uri/") unless $pe;
- if ($pe eq '/') {
- # do a 404 for now
- return 404;
- } else {
- # filtered lastn page
- $mode = 'lastn';
+ # filtered lastn page
+ $mode = 'lastn';
- # prepend /security so that lastn knows to do security filtering
- $pe = "/security$pe";
- }
+ # prepend /security so that lastn knows to do security filtering
+ $pe = "/security$pe";
+
}
} elsif (($vhost eq "users" || $vhost =~ /^other:/) &&
$uuri eq "/robots.txt") {
diff -r a250438f2f6e -r aad8d272cb59 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm Tue May 24 15:17:51 2011 +0800
+++ b/cgi-bin/LJ/User.pm Tue May 24 16:25:27 2011 +0800
@@ -44,6 +44,7 @@
use DW::User::Edges;
use DW::InviteCodes::Promo;
use DW::SiteScheme;
+use DW::Template;
use LJ::Community;
use LJ::Subscription;
@@ -8693,7 +8694,7 @@
}
# do the same for security filtering
- elsif ( ( $view eq 'lastn' || $view eq 'read' ) && $opts->{pathextra} && $opts->{pathextra} =~ /^\/security\/(.+)$/ ) {
+ elsif ( ( $view eq 'lastn' || $view eq 'read' ) && $opts->{pathextra} && $opts->{pathextra} =~ /^\/security\/(.*)$/ ) {
$opts->{getargs}->{security} = LJ::durl($1);
$opts->{pathextra} = undef;
}
@@ -8858,18 +8859,71 @@
# validate the security filter
if (exists $opts->{getargs}->{security}) {
my $securityfilter = $opts->{getargs}->{security};
- return $error->( BML::ml( 'error.security.noarg' ), "404 Not Found", BML::ml( 'error.security.name' ) )
+
+ my $r = DW::Request->get;
+ my $security_err = sub {
+ my ( $args, %opts ) = @_;
+ $args->{header} ||= "error.security.name2";
+
+ my $status = $opts{status} || $r->NOT_FOUND;
+
+ my @levels;
+ my @groups;
+ # error message is an appropriate type to show the list
+ if ( $opts{show_list}
+ # viewing recent entries
+ && ( $view eq "lastn"
+ # or your own read page (can't see locked entries on others' read page anyway)
+ || ( $view eq "read" && $u->equals( $remote ) ) ) ) {
+
+ my $path = $view eq "read" ? "/read/security" : "/security";
+ @levels = ( { link => LJ::create_url( "$path/public", viewing_style => 1 ),
+ name => LJ::Lang::ml( "label.security.public" ) } );
+
+ if ( $u->is_comm ) {
+ push @levels, { link => LJ::create_url( "$path/access", viewing_style => 1 ),
+ name => LJ::Lang::ml( "label.security.members" ) }
+ if $remote && $remote->member_of( $u );
+
+ push @levels, { link => LJ::create_url( "$path/private", viewing_style => 1 ),
+ name => LJ::Lang::ml( "label.security.maintainers" ) }
+ if $remote && $remote->can_manage_other( $u );
+ } else {
+ push @levels, { link => LJ::create_url( "$path/access", viewing_style => 1 ),
+ name => LJ::Lang::ml( "label.security.accesslist" ) }
+ if $u->trusts( $remote );
+
+ push @levels, { link => LJ::create_url( "$path/private", viewing_style => 1 ),
+ name => LJ::Lang::ml( "label.security.accesslist" ) }
+ if $u->equals( $remote );
+ }
+
+ $args->{levels} = \@levels;
+
+ @groups = map { { link => LJ::create_url( "$path/group:" . $_->{groupname} ), name => $_->{groupname} } } $remote->trust_groups if $u->equals( $remote );
+ $args->{groups} = \@groups;
+ }
+
+ ${$opts->{handle_with_siteviews_ref}} = 1;
+ return DW::Template->template_string( "journal/security.tt",
+ $args,
+ {
+ status => $status,
+ }
+ );
+ };
+
+ return $security_err->( { message => undef, header => "/journal/security.tt.header" }, show_list => 1 )
unless $securityfilter;
- return $error->( BML::ml( 'error.security.nocap' ), "403 Forbidden", BML::ml( 'error.security.name' ) )
- unless LJ::get_cap($remote, "security_filter") || LJ::get_cap($u, "security_filter");
-
- # error if disabled
- return $error->( BML::ml( 'error.security.disabled' ), "404 Not Found", BML::ml( 'error.security.name' ) )
- unless LJ::is_enabled("security_filter");
+ return $security_err->( { message => "error.security.nocap" }, status => $r->FORBIDDEN )
+ unless LJ::get_cap( $remote, "security_filter" ) || LJ::get_cap( $u, "security_filter" );
+
+ return $security_err->( { message => "error.security.disabled" } )
+ unless LJ::is_enabled( "security_filter" );
# throw an error if we're rendering in S1, but not for renamed accounts
- return $error->( BML::ml( 'error.security.s1' ), "404 Not Found", BML::ml( 'error.security.name' ) )
+ return $security_err->( { message => "error.security.s1" } )
if $stylesys == 1 && $view ne 'data' && ! $u->is_redirect;
# check the filter itself
@@ -8888,9 +8942,8 @@
}
}
- return $error->( BML::ml( 'error.security.invalid' ), "404 Not Found", BML::ml( 'error.security.name' ) )
+ return $security_err->( { message => "error.security.invalid" }, show_list => 1 )
unless defined $opts->{securityfilter};
-
}
unless ( $geta->{'viewall'} && $remote && $remote->has_priv( "canview", "suspended" ) ||
diff -r a250438f2f6e -r aad8d272cb59 views/journal/security.tt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/views/journal/security.tt Tue May 24 16:25:27 2011 +0800
@@ -0,0 +1,20 @@
+[% IF header %]<h1>[% header | ml %]</h1>[% END %]
+[% IF message %]<p>[% message | ml %]</p> [% END %]
+
+[% IF levels.size > 0 %]
+<p>[% ".filter.levels" | ml %]</p>
+<ul>
+ [% FOREACH level IN levels %]
+ <li><a href="[%level.link%]">[%level.name%]</a></li>
+ [% END %]
+</ul>
+[% END %]
+
+[% IF groups.size > 0 %]
+<p>[% ".filter.custom" | ml %]</p>
+<ul>
+ [% FOREACH group IN groups %]
+ <li><a href="[%group.link%]">[%group.name%]</a></li>
+ [% END %]
+</ul>
+[% END %]
diff -r a250438f2f6e -r aad8d272cb59 views/journal/security.tt.text
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/views/journal/security.tt.text Tue May 24 16:25:27 2011 +0800
@@ -0,0 +1,5 @@
+.filter.custom=You can also filter by your custom access groups:
+
+.filter.levels=You can filter entries by the following security level:
+
+.header=Filter by security
--------------------------------------------------------------------------------
