From 20b85eb966bdf5faafe7be7aec3c5676bb6df51a Mon Sep 17 00:00:00 2001 From: sil Date: Sun, 8 Sep 2013 12:29:02 +0100 Subject: [PATCH] Initial import --- .htaccess | 2 + README.md | 10 + canauth.appcache | 6 + canonical_aubergine_hex_crushed.png | Bin 0 -> 6757 bytes favicon.ico | Bin 0 -> 1150 bytes index.html | 528 ++++++++++++++++++++++++++++ 6 files changed, 546 insertions(+) create mode 100644 .htaccess create mode 100644 README.md create mode 100644 canauth.appcache create mode 100644 canonical_aubergine_hex_crushed.png create mode 100644 favicon.ico create mode 100644 index.html diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..b1f8462 --- /dev/null +++ b/.htaccess @@ -0,0 +1,2 @@ +AddType text/cache-manifest .appcache + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ccf3f0b --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +Canonical Two-Factor Auth HTML5 client +======================================= + +[Ubuntu One login](https://login.ubuntu.com), used for many Ubuntu and Canonical services (the Ubuntu wiki, Discourse, Ubuntu One itself, Launchpad, etc) has the option of allowing two-factor-auth. This is implemented using HOTP, a standard way to do this: when you log in, you go to your HOTP device and generate a new code, and then use that code along with your password to log in. There are many HOTP clients out there: Google Authenticator is a common one. It's nice to not have to rely on a native app, though, especially if that native app is not available for your platform. + +Therefore, an HTML5 client-side app. + +This is not specific to Ubuntu One login: this code is actually a completely generic JavaScript HOTP client for HTML5. It was written for Ubuntu One sign-in, though, so that's the language it uses. + +It comes with an appcache, so if it's served over HTTP, it can be bookmarked as an "app" and will work offline. It contains no server components, so your HOTP keys are not used or even seen by the server. diff --git a/canauth.appcache b/canauth.appcache new file mode 100644 index 0000000..3c67f7f --- /dev/null +++ b/canauth.appcache @@ -0,0 +1,6 @@ +CACHE MANIFEST +# version 4 +index.html +canonical_aubergine_hex_crushed.png +favicon.ico + diff --git a/canonical_aubergine_hex_crushed.png b/canonical_aubergine_hex_crushed.png new file mode 100644 index 0000000000000000000000000000000000000000..e739287ec956c0aef74c46f848497590b8708232 GIT binary patch literal 6757 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 Hu0mjfp5oit literal 0 HcmV?d00001 diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5910affa267d71a89e2a24b9b26cfaaf2b57890a GIT binary patch literal 1150 zcmb7EOGuPa6h4wP%Urq5RYc^YLWrPMK`m5VsEI{HWLZHEqZ%ERQBl+J(a?kqnhzXI z(ZVPsGh!BnE^?uWgXm2C{NrO7#cJb>I2`YH<-*U;Xmp1&_ug~9@7(j^CrS{%q$Cpm zDO8e3luSfNg$R|G%O2V7%Zbjl{U|iAui2rl|B%Ma81a!Ak`WJF1)YEkY<$_V-C>0>-fs+tAC_l*yg9TOn3F$cASUZUu2w!-^eqce|YD3q{}NYPV1XK zRp*etE@L+1&3ELr5&kRrx6ak+m(t6&@FrHt`TBj|hOg^qt0fk-1Q&wbQ0xEY!{7bv zW*>Icz3q|bpYJ1n)EOM)-s|}2z#0A37guHfaoSWg+q&AhIXyiuoI%?#d4A??Xi3?f}f{g_-~W literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..d23756a --- /dev/null +++ b/index.html @@ -0,0 +1,528 @@ + + + + +Canonical auth + + + + + + + + + + + +

Canonical 2-factor-auth

+
+

Add your key

+

Sign into Ubuntu single-sign-on (login.ubuntu.com). +Choose Authentication devices > +Add a new authentication device > +Generic HOTP device > +Add device. Enter the "Shared AES key" below.

+

(Lowercase is fine)

+

+

+
+
+

Your one-time password

+

+

+

debug

+
+
+

Your key (last four characters): ????

+

Your key counter: ?

+

+

+

+
+ + +