prep for ACME-style account for Telebit

This commit is contained in:
AJ ONeal 2019-05-11 02:17:12 -06:00
parent 0080cec081
commit b81ff7550b
1 changed files with 71 additions and 41 deletions

View File

@ -3,6 +3,7 @@
var Vue = window.Vue; var Vue = window.Vue;
var Telebit = window.TELEBIT; var Telebit = window.TELEBIT;
var Keypairs = window.Keypairs;
var api = {}; var api = {};
/* /*
@ -462,7 +463,14 @@ new Vue({
, methods: appMethods , methods: appMethods
}); });
function run(key) {
// 1. Get ACME directory
// 2. Fetch ACME account
// 3. Test if account has access
// 4. Show command line auth instructions to auth
// 5. Sign requests / use JWT
// 6. Enforce token required for config, status, etc
// 7. Move admin interface to standard ports (admin.foo-bar-123.telebit.xyz)
api.config().then(function (config) { api.config().then(function (config) {
telebitState.config = config; telebitState.config = config;
if (config.greenlock) { if (config.greenlock) {
@ -503,11 +511,33 @@ api.config().then(function (config) {
}).catch(function (err) { }).catch(function (err) {
appData.views.flash.error = err.message || JSON.stringify(err, null, 2); appData.views.flash.error = err.message || JSON.stringify(err, null, 2);
}); });
}
// TODO protect key with passphrase (or QR code?)
function getKey() {
var key;
try {
key = JSON.parse(localStorage.getItem('key'));
} catch(e) {
// ignore
}
if (key && key.kid && key.d) {
return Promise.resolve(key);
}
return Keypairs.generate().then(function (pair) {
key = pair.private;
localStorage.setItem('key', JSON.stringify(key));
return key;
});
}
window.api = api; window.api = api;
getKey().then(function (key) {
run(key);
setTimeout(function () { setTimeout(function () {
document.body.hidden = false; document.body.hidden = false;
}, 50); }, 50);
});
}()); }());