]> sipb.mit.edu Git - ikiwiki.git/commitdiff
* Add a googlecalendar plugin. A bit special-purpose, but it shows
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Sat, 9 Sep 2006 07:11:51 +0000 (07:11 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Sat, 9 Sep 2006 07:11:51 +0000 (07:11 +0000)
  one way to to deal with user-supplied content that could cause XSS
  issues w/o the htmlscrubber, and won't survive the scrubber.

IkiWiki/Plugin/googlecalendar.pm [new file with mode: 0644]
debian/changelog
doc/plugins/type/special-purpose.mdwn [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/googlecalendar.pm b/IkiWiki/Plugin/googlecalendar.pm
new file mode 100644 (file)
index 0000000..c99563d
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::googlecalendar;
+
+use warnings;
+use strict;
+use IkiWiki;
+use IPC::Open2;
+
+sub import { #{{{
+       IkiWiki::hook(type => "preprocess", id => "googlecalendar",
+               call => \&preprocess);
+       IkiWiki::hook(type => "format", id => "googlecalendar",
+               call => \&format);
+} # }}}
+
+sub preprocess (@) { #{{{
+       my %params=@_;
+
+       # Parse the html, looking for the url to embed for the calendar.
+       # Avoid XSS attacks..
+       my ($url)=$params{html}=~m#iframe\s+src="http://www\.google\.com/calendar/embed\?([^"<>]+)"#;
+       if (! defined $url || ! length $url) {
+               return "[[googlecalendar failed to find url in html]]";
+       }
+       my ($height)=$params{html}=~m#height="(\d+)"#;
+       my ($width)=$params{html}=~m#width="(\d+)"#;
+
+       return "<div class=\"googlecalendar\" src=\"$url\" height=\"$height\" width=\"$width\"></div>";
+} # }}}
+
+sub format (@) { #{{{
+        my %params=@_;
+
+       $params{content}=~s/<div class=\"googlecalendar" src="([^"]+)" height="([^"]+)" width="([^"]+)"><\/div>/gencal($1,$2,$3)/eg;
+
+        return $params{content};
+} # }}}
+
+sub gencal ($$$) { #{{{
+       my $url=shift;
+       my $height=shift;
+       my $width=shift;
+       return qq{<iframe src="http://www.google.com/calendar/embed?$url" style=" border-width:0 " width="$width" frameborder="0" height="$height"></iframe>};
+} #}}}
+
+1
index 7be9e9bc339fec7550495b7bb8c55a297e2a105b..5f9190e68b65a0e5e9bef9c7f1bff188a00f3a65 100644 (file)
@@ -1,3 +1,11 @@
+ikiwiki (1.27) UNRELEASED; urgency=low
+
+  * Add a googlecalendar plugin. A bit special-purpose, but it shows
+    one way to to deal with user-supplied content that could cause XSS
+    issues w/o the htmlscrubber, and won't survive the scrubber.
+
+ -- Joey Hess <joeyh@debian.org>  Sat,  9 Sep 2006 03:00:45 -0400
+
 ikiwiki (1.26) unstable; urgency=low
 
   * Add a missing -n to tla undo call.
diff --git a/doc/plugins/type/special-purpose.mdwn b/doc/plugins/type/special-purpose.mdwn
new file mode 100644 (file)
index 0000000..b6ed045
--- /dev/null
@@ -0,0 +1 @@
+Special-purpose plugins.