# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1392241190 -3600 # Node ID 5e0fc4f25c44440b16f7a840daa785c80a23f9a5 initial version diff -r 000000000000 -r 5e0fc4f25c44 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;