summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki.pm11
-rw-r--r--IkiWiki/CGI.pm28
-rw-r--r--IkiWiki/Plugin/underlay.pm11
-rw-r--r--debian/changelog4
-rw-r--r--doc/banned_users.mdwn8
-rw-r--r--doc/plugins/po.mdwn23
-rw-r--r--doc/plugins/underlay.mdwn8
-rw-r--r--doc/todo/blocking_ip_ranges.mdwn3
-rw-r--r--po/underlays/basewiki/shortcuts.cs.po2
9 files changed, 64 insertions, 34 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 453bc9f8c..48780ae51 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -33,6 +33,7 @@ use Memoize;
memoize("abs2rel");
memoize("pagespec_translate");
memoize("file_pruned");
+memoize("template_file");
sub getsetup () {
wikiname => {
@@ -149,6 +150,13 @@ sub getsetup () {
safe => 0, # path
rebuild => 1,
},
+ templatedirs => {
+ type => "internal",
+ default => [],
+ description => "additional directories containing template files",
+ safe => 0,
+ rebuild => 0,
+ },
underlaydir => {
type => "string",
default => "$installdir/share/ikiwiki/basewiki",
@@ -1609,7 +1617,8 @@ sub saveindex () {
sub template_file ($) {
my $template=shift;
- foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") {
+ foreach my $dir ($config{templatedir}, @{$config{templatedirs}},
+ "$installdir/share/ikiwiki/templates") {
return "$dir/$template" if -e "$dir/$template";
}
return;
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index af58d7cb5..52cafade0 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -252,16 +252,30 @@ sub check_banned ($$) {
my $q=shift;
my $session=shift;
+ my $banned=0;
my $name=$session->param("name");
- if (defined $name) {
- if (grep { $name eq $_ } @{$config{banned_users}}) {
- $session->delete();
- cgi_savesession($session);
- cgi_custom_failure(
- $q->header(-status => "403 Forbidden"),
- gettext("You are banned."));
+ if (defined $name &&
+ grep { $name eq $_ } @{$config{banned_users}}) {
+ $banned=1;
+ }
+
+ foreach my $b (@{$config{banned_users}}) {
+ if (pagespec_match("", $b,
+ ip => $ENV{REMOTE_ADDR},
+ name => defined $name ? $name : "",
+ )) {
+ $banned=1;
+ last;
}
}
+
+ if ($banned) {
+ $session->delete();
+ cgi_savesession($session);
+ cgi_custom_failure(
+ $q->header(-status => "403 Forbidden"),
+ gettext("You are banned."));
+ }
}
sub cgi_getsession ($) {
diff --git a/IkiWiki/Plugin/underlay.pm b/IkiWiki/Plugin/underlay.pm
index 380d418fb..c59935672 100644
--- a/IkiWiki/Plugin/underlay.pm
+++ b/IkiWiki/Plugin/underlay.pm
@@ -27,14 +27,21 @@ sub getsetup () {
safe => 0,
rebuild => 1,
},
+ add_templates => {
+ type => "string",
+ default => [],
+ description => "extra template directories to add",
+ advanced => 1,
+ safe => 0,
+ rebuild => 1,
+ },
}
sub checkconfig () {
- return unless exists $config{add_underlays};
-
foreach my $dir (@{$config{add_underlays}}) {
add_underlay($dir);
}
+ push @{$config{templatedirs}}, @{$config{add_templates}};
}
1;
diff --git a/debian/changelog b/debian/changelog
index 6109a7012..de165e4ff 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,10 @@ ikiwiki (3.14159265) UNRELEASED; urgency=low
* Add French basewiki translation from the Debian French l10n team,
including Philippe Batailler, Alexandre Dupas, and Steve Petruzzello.
+ * Expand banned_users; it can now include PageSpecs, which
+ allows banning by IP address.
+ * underlay: Also allow configuring additional directories to search
+ for template files in.
-- Joey Hess <joeyh@debian.org> Wed, 02 Sep 2009 15:01:27 -0400
diff --git a/doc/banned_users.mdwn b/doc/banned_users.mdwn
index d2bec90f0..c44f8c587 100644
--- a/doc/banned_users.mdwn
+++ b/doc/banned_users.mdwn
@@ -1,4 +1,10 @@
-Banned users can be configured in the setup file.
+Banned users can be configured in the setup file via the `banned_users`
+setting. This is a list of user names, or [[PageSpecs|ikiwiki/PageSpec]]
+to ban. Using a PageSpec is useful to block an IP address.
+
+For example:
+
+ banned_users => ['evilspammer', 'ip(192.168.1.1)'],
If a banned user attempts to use the ikiwiki CGI, they will receive a 403
Forbidden webpage indicating they are banned.
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index 38b6b12cd..f3b70b5f7 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -317,27 +317,8 @@ text, or text in whatever single language ikiwiki is configured to "speak".
Maybe there could be a way to switch ikiwiki to speaking another language
when building a non-english page? Then the directives would get translated.
-2 test suite failures
---------------------
-
-t/po is currently failing tests 57 and 59 (and I would like to release
-soon..) --[[Joey]]
-
-> They are failing because of commit cdc3576c8d1e (po: do not inject
-> custom bestlink function when `po_link_to` eq `default`). The test
-> suite changes `$config{po_link_to}`, but the `checkconfig` hook is
-> not re-run. I could manually run it when needed in the test-suite,
-> but this would lead to this function being injected several times,
-> and then `$origsubs{'bestlink'}` to be sometimes set to a wrong
-> value, which would break other parts of the test-suite. The best
-> solution I can think of (apart of reverting this commit or disabling
-> these two tests) is to split the test-suite into 3 parts, depending
-> on the `$config{po_link_to}` setting, either in 3 different `.t`
-> files, or inside the existing one and completely reset the IkiWiki
-> environment at the start of these parts... which I did not manage to
-> achieve in the last 2 hours :/ --[[intrigeri]]
-
->> I've reverted it. --[[Joey]]
+(We also will need this in order to use translated templates, when they are
+available.)
Documentation
-------------
diff --git a/doc/plugins/underlay.mdwn b/doc/plugins/underlay.mdwn
index 09d096a6e..f7eafee7c 100644
--- a/doc/plugins/underlay.mdwn
+++ b/doc/plugins/underlay.mdwn
@@ -1,7 +1,7 @@
[[!template id=plugin name=underlay author="[[Simon_McVittie|smcv]]"]]
[[!tag type/useful]]
-This plugin adds an `add_underlays` option to the `.setup` file.
+This plugin adds an `add_underlays` option to the setup file.
Its value is a list of underlay directories whose content is added to the wiki.
Multiple underlays are normally set up automatically by other plugins (for
@@ -12,3 +12,9 @@ like photos or software releases.
Directories in `add_underlays` should usually be absolute. If relative, they're
interpreted as relative to the parent directory of the basewiki underlay, which
is probably not particularly useful in this context.
+
+--
+
+This plugin also adds an `add_templates` option to the setup file.
+Its value is a list of template directories to look for template files in,
+if they are not present in the `templatedir`.
diff --git a/doc/todo/blocking_ip_ranges.mdwn b/doc/todo/blocking_ip_ranges.mdwn
index 95026eef1..ac2344ece 100644
--- a/doc/todo/blocking_ip_ranges.mdwn
+++ b/doc/todo/blocking_ip_ranges.mdwn
@@ -2,3 +2,6 @@ Admins need the ability to block IP ranges. They can already ban users.
See [[fileupload]] for a propsal that grew to encompass the potential to do
this.
+
+[[done]] (well, there is no pagespec for IP ranges yet, but we can block
+individual IPs)
diff --git a/po/underlays/basewiki/shortcuts.cs.po b/po/underlays/basewiki/shortcuts.cs.po
index c842e249f..7ae43e31a 100644
--- a/po/underlays/basewiki/shortcuts.cs.po
+++ b/po/underlays/basewiki/shortcuts.cs.po
@@ -198,7 +198,7 @@ msgid ""
msgstr ""
"Pro přidání nové zkratky použijte [[direktivu|ikiwiki/directive]] "
"`shortcut`. Řetězec „%s“ je v adrese nahrazen textem předaným dané zkratce. "
-"Tento text je automaticky zakódován ([[! wikipedia url_encoding]]) do podoby "
+"Tento text je automaticky zakódován ([[!wikipedia url_encoding]]) do podoby "
"vhodné pro url. Nechcete-li text kódovat, použijte „%S“. Volitelný parametr "
"`desc` dovoluje změnit popis odkazu."