--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/redisplay Wed Feb 12 22:39:50 2014 +0100
@@ -0,0 +1,38 @@
+#! /usr/bin/perl
+# Heiko Schlittermann
+use 5.014;
+use warnings;
+use Sys::Hostname;
+
+sub url_encode {
+ shift =~ s/(?i:([^a-z]))/sprintf '%%%02x', ord $1/rge;
+}
+
+sub main {
+ if (@ARGV) { splice @ARGV, 1 }
+ else { @ARGV = ("$ENV{HOME}/.google_authenticator") }
+
+ my $google = do { local $/ = undef; <> }
+ or die "$0: Can't read any input from $ARGV.\n";
+
+ my ($secret) = $google =~ /\A(\S+)/
+ or die "$0: Can't read secret from $ARGV.\n";
+
+ my ($method) = map { lc } $google =~ /^"\s(.)\S+_AUTH$/m
+ or die "$0: Can't read method (time/hash) from $ARGV.\n";
+
+ my $user = $ENV{USER} // $ENV{LOGNAME} // getpwuid $>;
+ my $host = hostname;
+
+ open my $qr, '|qrencode -t ansi256'
+ or die "$0: Can't open qrencode: $!\n";
+
+ $qr->printf(
+ "otpauth://%sotp/%s?secret=%s\n", $method,
+ url_encode("$user\@$host"), $secret
+ );
+
+ close $qr;
+}
+
+exit main unless caller;