summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-07-29 15:54:45 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-07-29 15:54:45 -0400
commit12c5786df4e74c143f24398b8d0028000b61daba (patch)
treea0f3136499610571b47289f6aa55659094024620
parent73af360e994306c1d0b14a69a4aa04750e61f0ef (diff)
parent106578f524a7ef8184029ac393dbe9d68b017756 (diff)
Merge branch 'tova' into autoconfig
Conflicts: debian/changelog
-rw-r--r--IkiWiki/Plugin/autoindex.pm72
-rw-r--r--IkiWiki/Plugin/skeleton.pm.example5
-rw-r--r--debian/changelog7
-rw-r--r--doc/download.mdwn2
-rw-r--r--doc/plugins/autoindex.mdwn7
-rw-r--r--doc/plugins/contrib/unixauth.mdwn154
-rw-r--r--doc/plugins/txt/discussion.mdwn (renamed from doc/plugins/plaintext/discussion.mdwn)0
-rw-r--r--doc/todo/progressbar_plugin.mdwn44
-rw-r--r--doc/users/schmonz.mdwn1
-rw-r--r--templates/autoindex.tmpl1
10 files changed, 292 insertions, 1 deletions
diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm
new file mode 100644
index 000000000..8179ee1e7
--- /dev/null
+++ b/IkiWiki/Plugin/autoindex.pm
@@ -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
diff --git a/IkiWiki/Plugin/skeleton.pm.example b/IkiWiki/Plugin/skeleton.pm.example
index 49c4d88f2..bbf11e603 100644
--- a/IkiWiki/Plugin/skeleton.pm.example
+++ b/IkiWiki/Plugin/skeleton.pm.example
@@ -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");
} #}}}
diff --git a/debian/changelog b/debian/changelog
index 7b4bc4215..c4e4b7f48 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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.
diff --git a/doc/download.mdwn b/doc/download.mdwn
index 71d333ad4..6566dc122 100644
--- a/doc/download.mdwn
+++ b/doc/download.mdwn
@@ -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/).
diff --git a/doc/plugins/autoindex.mdwn b/doc/plugins/autoindex.mdwn
new file mode 100644
index 000000000..66e0163c2
--- /dev/null
+++ b/doc/plugins/autoindex.mdwn
@@ -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.
diff --git a/doc/plugins/contrib/unixauth.mdwn b/doc/plugins/contrib/unixauth.mdwn
new file mode 100644
index 000000000..12f885c33
--- /dev/null
+++ b/doc/plugins/contrib/unixauth.mdwn
@@ -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
+
+"""]]
diff --git a/doc/plugins/plaintext/discussion.mdwn b/doc/plugins/txt/discussion.mdwn
index 6b907e65c..6b907e65c 100644
--- a/doc/plugins/plaintext/discussion.mdwn
+++ b/doc/plugins/txt/discussion.mdwn
diff --git a/doc/todo/progressbar_plugin.mdwn b/doc/todo/progressbar_plugin.mdwn
new file mode 100644
index 000000000..d586ce79c
--- /dev/null
+++ b/doc/todo/progressbar_plugin.mdwn
@@ -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]]
diff --git a/doc/users/schmonz.mdwn b/doc/users/schmonz.mdwn
new file mode 100644
index 000000000..7e297fbf0
--- /dev/null
+++ b/doc/users/schmonz.mdwn
@@ -0,0 +1 @@
+[Amitai Schlair](http://www.schmonz.com/) recently discovered ikiwiki.
diff --git a/templates/autoindex.tmpl b/templates/autoindex.tmpl
new file mode 100644
index 000000000..d5ec3b8ee
--- /dev/null
+++ b/templates/autoindex.tmpl
@@ -0,0 +1 @@
+[[!map pages="<TMPL_VAR PAGE>/* and ! <TMPL_VAR PAGE>/*/*"]]