initial version
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Wed, 12 Feb 2014 22:39:50 +0100
changeset 0 5e0fc4f25c44
child 1 0fde44ae8f1d
initial version
redisplay
--- /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;