aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-10-08 17:47:38 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-10-08 17:47:38 -0400
commitd3ca495e61e0e9d66095b1aba2fd1995e564e841 (patch)
tree1421821b8f15867d5ab5563ca6a4353e3021832c /IkiWiki
parent240b58c36c0d3ed9ecf89fc005364b769d0caf8e (diff)
downloadikiwiki-d3ca495e61e0e9d66095b1aba2fd1995e564e841.tar
ikiwiki-d3ca495e61e0e9d66095b1aba2fd1995e564e841.tar.gz
lockedit: Support specifying which users (and IP addresses) a page is locked for. This supports most of the ACL type things users have been wanting to be done. Closes: #443346 (It does not control who can read a page, but that's out of scope for ikiwiki.)
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/attachment.pm59
-rw-r--r--IkiWiki/Plugin/lockedit.pm10
2 files changed, 8 insertions, 61 deletions
diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm
index 2d1fe51cf..dcac3e820 100644
--- a/IkiWiki/Plugin/attachment.pm
+++ b/IkiWiki/Plugin/attachment.pm
@@ -289,63 +289,4 @@ sub attachment_list ($) { #{{{
return sort { $b->{mtime_raw} <=> $a->{mtime_raw} || $a->{link} cmp $b->{link} } @ret;
} #}}}
-package IkiWiki::PageSpec;
-
-sub match_user ($$;@) { #{{{
- shift;
- my $user=shift;
- my %params=@_;
-
- if (! exists $params{user}) {
- return IkiWiki::FailReason->new("no user specified");
- }
-
- if (defined $params{user} && lc $params{user} eq lc $user) {
- return IkiWiki::SuccessReason->new("user is $user");
- }
- elsif (! defined $params{user}) {
- return IkiWiki::FailReason->new("not logged in");
- }
- else {
- return IkiWiki::FailReason->new("user is $params{user}, not $user");
- }
-} #}}}
-
-sub match_admin ($$;@) { #{{{
- shift;
- shift;
- my %params=@_;
-
- if (! exists $params{user}) {
- return IkiWiki::FailReason->new("no user specified");
- }
-
- if (defined $params{user} && IkiWiki::is_admin($params{user})) {
- return IkiWiki::SuccessReason->new("user is an admin");
- }
- elsif (! defined $params{user}) {
- return IkiWiki::FailReason->new("not logged in");
- }
- else {
- return IkiWiki::FailReason->new("user is not an admin");
- }
-} #}}}
-
-sub match_ip ($$;@) { #{{{
- shift;
- my $ip=shift;
- my %params=@_;
-
- if (! exists $params{ip}) {
- return IkiWiki::FailReason->new("no IP specified");
- }
-
- if (defined $params{ip} && lc $params{ip} eq lc $ip) {
- return IkiWiki::SuccessReason->new("IP is $ip");
- }
- else {
- return IkiWiki::FailReason->new("IP is $params{ip}, not $ip");
- }
-} #}}}
-
1
diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm
index 7462de41c..f6cac6cdd 100644
--- a/IkiWiki/Plugin/lockedit.pm
+++ b/IkiWiki/Plugin/lockedit.pm
@@ -37,7 +37,10 @@ sub canedit ($$) { #{{{
return undef if defined $user && IkiWiki::is_admin($user);
if (defined $config{locked_pages} && length $config{locked_pages} &&
- pagespec_match($page, $config{locked_pages})) {
+ pagespec_match($page, $config{locked_pages},
+ user => $session->param("name"),
+ ip => $ENV{REMOTE_ADDR},
+ )) {
if (! defined $user ||
! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
return sub { IkiWiki::needsignin($cgi, $session) };
@@ -51,7 +54,10 @@ sub canedit ($$) { #{{{
# XXX deprecated, should be removed eventually
foreach my $admin (@{$config{adminuser}}) {
- if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
+ if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"),
+ user => $session->param("name"),
+ ip => $ENV{REMOTE_ADDR},
+ )) {
if (! defined $user ||
! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
return sub { IkiWiki::needsignin($cgi, $session) };