Merge branch 'tova' into autoconfig

Conflicts:

	debian/changelog
master
Joey Hess 2008-07-29 15:54:45 -04:00
commit 12c5786df4
10 changed files with 292 additions and 1 deletions

View File

@ -0,0 +1,72 @@
#!/usr/bin/perl
package IkiWiki::Plugin::autoindex;
use warnings;
use strict;
use IkiWiki 2.00;
use Encode;
sub import { #{{{
hook(type => "refresh", id => "autoindex", call => \&refresh);
} # }}}
sub genindex ($) { #{{{
my $page=shift;
my $file=$page.".".$config{default_pageext};
my $template=template("autoindex.tmpl");
$template->param(page => $page);
writefile($file, $config{srcdir}, $template->output);
if ($config{rcs}) {
IkiWiki::rcs_add($file);
}
} #}}}
sub refresh () { #{{{
eval q{use File::Find};
error($@) if $@;
my (%pages, %dirs);
find({
no_chdir => 1,
wanted => sub {
$_=decode_utf8($_);
if (IkiWiki::file_pruned($_, $config{srcdir})) {
$File::Find::prune=1;
}
elsif (! -l $_) {
my ($f)=/$config{wiki_file_regexp}/; # untaint
return unless defined $f;
$f=~s/^\Q$config{srcdir}\E\/?//;
return unless length $f;
if (! -d _) {
$pages{pagename($f)}=1;
}
else {
$dirs{$f}=1;
}
}
}
}, $config{srcdir});
my @needed;
foreach my $dir (keys %dirs) {
if (! exists $pages{$dir}) {
push @needed, $dir;
}
}
if (@needed) {
if ($config{rcs}) {
IkiWiki::disable_commit_hook();
}
genindex($_) foreach @needed;
if ($config{rcs}) {
IkiWiki::rcs_commit_staged(
gettext("automatic index generation"),
undef, undef);
IkiWiki::enable_commit_hook();
}
}
} #}}}
1

View File

@ -12,6 +12,7 @@ sub import { #{{{
hook(type => "getopt", id => "skeleton", call => \&getopt);
hook(type => "getsetup", id => "skeleton", call => \&getsetup);
hook(type => "checkconfig", id => "skeleton", call => \&checkconfig);
hook(type => "refresh", id => "skeleton", call => \&refresh);
hook(type => "needsbuild", id => "skeleton", call => \&needsbuild);
hook(type => "preprocess", id => "skeleton", call => \&preprocess);
hook(type => "filter", id => "skeleton", call => \&filter);
@ -54,6 +55,10 @@ sub checkconfig () { #{{{
debug("skeleton plugin checkconfig");
} #}}}
sub refresh () { #{{{
debug("skeleton plugin refresh");
} #}}}
sub needsbuild () { #{{{
debug("skeleton plugin needsbuild");
} #}}}

7
debian/changelog vendored
View File

@ -14,6 +14,13 @@ ikiwiki (2.60) UNRELEASED; urgency=low
-- Joey Hess <joeyh@debian.org> Mon, 21 Jul 2008 11:35:46 -0400
ikiwiki (2.56) UNRELEASED; urgency=low
* autoindex: New plugin that generates missing index pages.
(Sponsored by The TOVA Company.)
-- Joey Hess <joeyh@debian.org> Tue, 29 Jul 2008 15:53:26 -0400
ikiwiki (2.55) unstable; urgency=low
* remove: New plugin that adds the ability to remove pages via the web.

View File

@ -28,7 +28,7 @@ There is also an unofficial backport of ikiwiki for Ubuntu Hardy, provided by
[[Paweł_Tęcza|users/ptecza]],
at [http://gpa.net.icm.edu.pl/ubuntu/](http://gpa.net.icm.edu.pl/ubuntu/index-en.html).
NetBSD pkgsrc has an [ikiwiki package](ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/www/ikiwiki/README.html).
NetBSD and many other platforms: pkgsrc has an [ikiwiki package](ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/www/ikiwiki/README.html).
FreeBSD has ikiwiki in its
[ports collection](http://www.freshports.org/www/ikiwiki/).

View File

@ -0,0 +1,7 @@
[[!template id=plugin name=autoindex core=0 author="[[Joey]]"]]
[[!tag type/useful]]
This plugin searches for [[SubPages|ikiwiki/subpage]] with a missing parent
page, and generates a parent page for them. The generated page content is
controlled by the autoindex [[template|wikitemplates]], which by default,
uses a [[map]] to list the SubPages.

View File

@ -0,0 +1,154 @@
[[!template id=plugin name=unixauth core=0 author="[[schmonz]]"]]
[[!tag type/auth]]
This plugin authenticates users against the Unix user database. It presents a similar UI to [[plugins/passwordauth]], but simpler, as there's no need to be able to register or change one's password.
[pwauth](http://www.unixpapa.com/pwauth/) must be installed and working. In particular, it must be configured to recognize the UID of the calling web server, or authentication will always fail. Set `pwauth_path` to the full path of your pwauth binary.
As [with passwordauth](/security/#index14h2), be wary of sending usernames and passwords in cleartext. Unlike with passwordauth, sniffing these credentials can get an attacker much further than mere wiki access. SSL with this plugin is a __must__.
[[!toggle id="code" text="unixauth.pm"]]
[[!toggleable id="code" text="""
#!/usr/bin/perl
# Ikiwiki unixauth authentication.
package IkiWiki::Plugin::unixauth;
use warnings;
use strict;
use IkiWiki 2.00;
sub import { #{{{
hook(type => "formbuilder_setup", id => "unixauth",
call => \&formbuilder_setup);
hook(type => "formbuilder", id => "unixauth",
call => \&formbuilder);
hook(type => "sessioncgi", id => "unixauth", call => \&sessioncgi);
} # }}}
# Checks if a string matches a user's password, and returns true or false.
sub checkpassword ($$;$) { #{{{
my $user=shift;
my $password=shift;
my $field=shift || "password";
# It's very important that the user not be allowed to log in with
# an empty password!
if (! length $password) {
return 0;
}
my $ret=0;
if (! exists $config{pwauth_path}) {
$config{pwauth_path}="/usr/libexec/pwauth";
}
open PWAUTH, "|$config{pwauth_path}" or die("Could not run pwauth");
print PWAUTH "$user\n$password\n";
close PWAUTH;
$ret=!($?>>8);
if ($ret) {
my $userinfo=IkiWiki::userinfo_retrieve();
if (! length $user || ! defined $userinfo ||
! exists $userinfo->{$user} || ! ref $userinfo->{$user}) {
IkiWiki::userinfo_setall($user, {
'email' => '',
'regdate' => time,
});
}
}
return $ret;
} #}}}
sub formbuilder_setup (@) { #{{{
my %params=@_;
my $form=$params{form};
my $session=$params{session};
my $cgi=$params{cgi};
if ($form->title eq "signin") {
$form->field(name => "name", required => 0);
$form->field(name => "password", type => "password", required => 0);
if ($form->submitted) {
my $submittype=$form->submitted;
# Set required fields based on how form was submitted.
my %required=(
"Login" => [qw(name password)],
);
foreach my $opt (@{$required{$submittype}}) {
$form->field(name => $opt, required => 1);
}
# Validate password against name for Login.
if ($submittype eq "Login") {
$form->field(
name => "password",
validate => sub {
checkpassword($form->field("name"), shift);
},
);
}
elsif ($submittype eq "Login") {
$form->field(
name => "name",
validate => sub {
my $name=shift;
length $name &&
IkiWiki::userinfo_get($name, "regdate");
},
);
}
}
else {
# First time settings.
$form->field(name => "name");
if ($session->param("name")) {
$form->field(name => "name", value => $session->param("name"));
}
}
}
elsif ($form->title eq "preferences") {
$form->field(name => "name", disabled => 1,
value => $session->param("name"), force => 1,
fieldset => "login");
$form->field(name => "password", disabled => 1, type => "password",
fieldset => "login"),
}
}
sub formbuilder (@) { #{{{
my %params=@_;
my $form=$params{form};
my $session=$params{session};
my $cgi=$params{cgi};
my $buttons=$params{buttons};
if ($form->title eq "signin") {
if ($form->submitted && $form->validate) {
if ($form->submitted eq 'Login') {
$session->param("name", $form->field("name"));
IkiWiki::cgi_postsignin($cgi, $session);
}
}
}
elsif ($form->title eq "preferences") {
if ($form->submitted eq "Save Preferences" && $form->validate) {
my $user_name=$form->field('name');
}
}
} #}}}
sub sessioncgi ($$) { #{{{
my $q=shift;
my $session=shift;
} #}}}
1
"""]]

View File

@ -0,0 +1,44 @@
I would like to add next plugin to Ikiwiki. It's `progressbar` or simply `progress`.
I'm not sure what plugin name better is, probably that shorter ;) I know that
[DokuWiki](http://wiki.splitbrain.org/plugin:progressbar) has similar plugin,
so I think it can be useful also for Ikiwiki users.
Here is proposition of the plugin syntax:
\[[!progress done=50]]
Of course, `done` argument is integer from 0 to 100.
A here is its HTML result:
<div class="progress">
<div class="progress-done" style="width: 50%">50%</div>
</div>
Note: I was trying with `<span>` tags too, but that tag is inline, so I can't
set `width` property for it.
Default CSS styles for the plugin can be like below:
div.progress {
border: 1px solid #ddd;
/* border: 2px solid #ddd; */
width: 200px;
background: #fff;
padding: 2px;
/* padding: 0px; */
border: 2px solid #aaa;
background: #eee;
}
div.progress-done {
height: 14px;
background: #ff6600;
font-size: 12px;
text-align: center;
vertical-align: middle;
}
You can use alternative, commented CSS code for `div.progress` if you dislike
padding around done strip.
Any comments? --[[Paweł|ptecza]]

View File

@ -0,0 +1 @@
[Amitai Schlair](http://www.schmonz.com/) recently discovered ikiwiki.

View File

@ -0,0 +1 @@
[[!map pages="<TMPL_VAR PAGE>/* and ! <TMPL_VAR PAGE>/*/*"]]