chiark / gitweb /
choose action
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 4 Sep 2013 22:00:56 +0000 (23:00 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 4 Sep 2013 22:00:56 +0000 (23:00 +0100)
service

diff --git a/service b/service
index a966409b8da72bc043b42c9a52506cbf689f6aac..1d64c5bd0708da373bddcde8640e69d9f4ff92da 100755 (executable)
--- a/service
+++ b/service
@@ -12,6 +12,7 @@ END
 our $usage2 = <<'END';
 actions
   create [REDIRECT] [#COMMENT]    (default for REDIRECT is your username)
+  choose [REDIRECT] [#COMMENT]    (interactively see and allocate suggestions)
   update ADDR [REDIRECT] [#COMMENT]
   show ADDR
   list
@@ -190,6 +191,45 @@ sub action_create {
     prow($newrow);
 }
 
+sub action_choose {
+    my $template = rhsargs({'redirect'=>$user, 'comment'=>''});
+    $template->{'user'} = $user;
+    prepare_create();
+    my %s;
+    while (keys %s < 10) {
+       my $s = generate_local_part();
+       next if $s{$s};
+       print $s or die $!;
+       print "\@$dom" or die $! if $dom;
+       print "\n" or die $!;
+       $s{$s} = 1;
+    }
+    print "# enter addresses or local parts to create,".
+       " then \`.' on a line by itself\n"
+       or die $!;
+
+    while (<STDIN>) {
+       chomp;
+       last if m/^\.$/;
+       my $s;
+       if (eval {
+           $s = addr2localpart $_;
+           $s{$s} or die "not an (as-yet-unused) suggestion\n";
+           delete $s{$s};
+           die "just taken in the meantime (bad luck!)\n"
+               if local_part_inuse $s;
+           1;
+       }) {
+           my $newrow = { %$template, 'localpart' => $s };
+           $dbh->commit();
+           prow($newrow);
+       } else {
+           $dbh->rollback();
+           print "!error: $@" or die $!;
+       }
+    }
+}
+
 sub selectrow ($) {
     my ($localpart) = @_;
     our $row_q ||= $dbh->prepare("SELECT * FROM addrs WHERE localpart=?");