add missing setup options, tweak others' display
[ikiwiki.git] / IkiWiki / Plugin / amazon_s3.pm
index 6652b9fba6a424512f95db2234160721e24c7881..d9279b6800d5df0ea594543f48daf10b0699c5f9 100644 (file)
@@ -17,9 +17,75 @@ BEGIN {
 };
 
 sub import { #{{{
 };
 
 sub import { #{{{
+       hook(type => "getopt", id => "amazon_s3", call => \&getopt);
+       hook(type => "getsetup", id => "amazon_s3", call => \&getsetup);
        hook(type => "checkconfig", id => "amazon_s3", call => \&checkconfig);
 } # }}}
 
        hook(type => "checkconfig", id => "amazon_s3", call => \&checkconfig);
 } # }}}
 
+sub getopt () { #{{{
+        eval q{use Getopt::Long};
+        error($@) if $@;
+        Getopt::Long::Configure('pass_through');
+        GetOptions("delete-bucket" => sub {
+               my $bucket=getbucket();
+               debug(gettext("deleting bucket.."));
+               my $resp = $bucket->list_all or die $bucket->err . ": " . $bucket->errstr;
+               foreach my $key (@{$resp->{keys}}) {
+                       debug("\t".$key->{key});
+                       $bucket->delete_key($key->{key}) or die $bucket->err . ": " . $bucket->errstr;
+               }
+               $bucket->delete_bucket or die $bucket->err . ": " . $bucket->errstr;
+               debug(gettext("done"));
+               exit(0);
+       });
+} #}}}
+
+sub getsetup () { #{{{
+       return
+                amazon_s3_key_id => {
+                       type => "string",
+                       example => "XXXXXXXXXXXXXXXXXXXX",
+                       description => "public access key id",
+                       safe => 1,
+                       rebuild => 0,
+               },
+               amazon_s3_key_id => {
+                       type => "string",
+                       example => "$ENV{HOME}/.s3_key",
+                       description => "file holding secret key (must not be readable by others!)",
+                       safe => 0, # ikiwiki reads this file
+                       rebuild => 0,
+               },
+               amazon_s3_bucket => {
+                       type => "string",
+                       example => "mywiki",
+                       description => "globally unique name of bucket to store wiki in",
+                       safe => 1,
+                       rebuild => 1,
+               },
+               amazon_s3_prefix => {
+                       type => "string",
+                       example => "wiki/",
+                       description => "a prefix to prepend to each page name",
+                       safe => 1,
+                       rebuild => 1,
+               },
+               amazon_s3_location => {
+                       type => "string",
+                       example => "EU",
+                       description => "which S3 datacenter to use (leave blank for default)",
+                       safe => 1,
+                       rebuild => 1,
+               },
+               amazon_s3_dupindex => {
+                       type => "boolean",
+                       default => 0,
+                       description => "store each index file twice? (allows urls ending in \"/index.html\" and \"/\")",
+                       safe => 1,
+                       rebuild => 1,
+               },
+} #}}}
+
 sub checkconfig { #{{{
        foreach my $field (qw{amazon_s3_key_id amazon_s3_key_file
                              amazon_s3_bucket}) {
 sub checkconfig { #{{{
        foreach my $field (qw{amazon_s3_key_id amazon_s3_key_file
                              amazon_s3_bucket}) {
@@ -131,7 +197,6 @@ sub writefile ($$$;$$) { #{{{
                # TODO: investigate using the new copy operation.
                #       (It may not be robust enough.)
                foreach my $key (@keys) {
                # TODO: investigate using the new copy operation.
                #       (It may not be robust enough.)
                foreach my $key (@keys) {
-                       debug("storing $key");
                        my $res;
                        if (! $writer) {
                                $res=$bucket->add_key($key, $content, \%opts);
                        my $res;
                        if (! $writer) {
                                $res=$bucket->add_key($key, $content, \%opts);
@@ -169,7 +234,6 @@ sub prune ($) { #{{{
                my $bucket=IkiWiki::Plugin::amazon_s3::getbucket();
 
                foreach my $key (@keys) {
                my $bucket=IkiWiki::Plugin::amazon_s3::getbucket();
 
                foreach my $key (@keys) {
-                       debug("deleting $key");
                        my $res=$bucket->delete_key($key);
                        if (! $res) {
                                error(gettext("Failed to delete file from S3: ").
                        my $res=$bucket->delete_key($key);
                        if (! $res) {
                                error(gettext("Failed to delete file from S3: ").