nearly works again :)

This commit is contained in:
AJ ONeal 2018-06-15 09:00:16 +00:00
parent 8a1e2f14e0
commit 96631d1369
3 changed files with 20 additions and 15 deletions

View File

@ -7,6 +7,10 @@
<script>document.body.hidden = true;</script> <script>document.body.hidden = true;</script>
<div class="js-error" hidden> <div class="js-error" hidden>
<h1>Invalid Magic Link</h1>
<div class="js-magic-link">'{{magic_link}}' isn't a valid magic link code.
<br>Links are only good for 5 minutes, so you gotta act fast.
</div>
</div> </div>
<div class="js-magic" hidden> <div class="js-magic" hidden>
@ -22,8 +26,3 @@
<script src="js/app.js"></script> <script src="js/app.js"></script>
</body> </body>
</html> </html>
res.send("<h1>Invalid Magic Link</h1>"
+ "<pre><code>'" + magic + "' isn't a valid link.\nLinks are only good for 5 minutes, so act fast.\n"
+ "(" + new Date(1000*((_auths[magic]||{}).dt||0)).toISOString() + ")</code></pre>\n"
);

View File

@ -9,15 +9,21 @@ if (magic) {
, cors: true , cors: true
}).then(function (resp) { }).then(function (resp) {
return resp.json().then(function (json) { return resp.json().then(function (json) {
if (json.error) {
document.querySelector('.js-error').hidden = false;
document.querySelector('.js-magic-link').innerText = magic;
return;
}
document.querySelector('body').hidden = false; document.querySelector('body').hidden = false;
document.querySelector('js-magic').hidden = false; document.querySelector('.js-magic').hidden = false;
document.querySelector('js-token-data').innerText = JSON.stringify(json, null, 2); document.querySelector('.js-token-data').innerText = JSON.stringify(json, null, 2);
document.querySelector('js-new-href').href = json.domains[0]; document.querySelector('.js-new-href').href = json.domains[0];
document.querySelector('js-new-href').innerText = json.domains[0]; document.querySelector('.js-new-href').innerText = json.domains[0];
}); });
}); });
} else { } else {
document.querySelector('body').hidden = false; document.querySelector('body').hidden = false;
document.querySelector('.js-error').hidden = false;
} }
}()); }());

View File

@ -74,7 +74,7 @@ module.exports.authenticate = function (opts) {
// TODO use global interval whenever the number of active links is high // TODO use global interval whenever the number of active links is high
var t = setTimeout(function () { var t = setTimeout(function () {
console.log("[Magic Link] Timeout for '" + auth.subject + "'"); console.log("[Magic Link] Timeout for '" + auth.subject + "'");
delete _auths[id]; delete _auths[auth.id];
var err = new Error("Login Failure: Magic Link was not clicked within 5 minutes"); var err = new Error("Login Failure: Magic Link was not clicked within 5 minutes");
err.code = 'E_LOGIN_TIMEOUT'; err.code = 'E_LOGIN_TIMEOUT';
reject(); reject();
@ -83,7 +83,7 @@ module.exports.authenticate = function (opts) {
function authorize() { function authorize() {
console.log("mighty auth'n ranger!"); console.log("mighty auth'n ranger!");
clearTimeout(t); clearTimeout(t);
delete _auths[id]; delete _auths[auth.id];
var hri = require('human-readable-ids').hri; var hri = require('human-readable-ids').hri;
var hrname = hri.random() + '.' + state.config.sharedDomain; var hrname = hri.random() + '.' + state.config.sharedDomain;
var jwt = require('jsonwebtoken'); var jwt = require('jsonwebtoken');
@ -92,7 +92,7 @@ module.exports.authenticate = function (opts) {
, ports: [ 1024 + Math.round(Math.random() * 6300) ] , ports: [ 1024 + Math.round(Math.random() * 6300) ]
, aud: state.config.webminDomain , aud: state.config.webminDomain
, iss: Math.round(Date.now() / 1000) , iss: Math.round(Date.now() / 1000)
, id: id , id: auth.id
, hostname: auth.hostname , hostname: auth.hostname
}; };
tokenData.jwt = jwt.sign(tokenData, state.secret); tokenData.jwt = jwt.sign(tokenData, state.secret);
@ -106,7 +106,7 @@ module.exports.authenticate = function (opts) {
return tokenData; return tokenData;
} }
_auths[id] = { _auths[auth.id] = {
dt: Date.now() dt: Date.now()
, resolve: authorize , resolve: authorize
, reject: reject , reject: reject
@ -139,7 +139,7 @@ app.get('/api/telebit.cloud/magic/:magic', function (req, res) {
console.log("DEBUG telebit.cloud magic"); console.log("DEBUG telebit.cloud magic");
var tokenData; var tokenData;
var magic = req.params.magic || req.query.magic; var magic = req.params.magic || req.query.magic;
console.log("DEBUG telebit.cloud magic 1a"); console.log("DEBUG telebit.cloud magic 1a", magic);
if (_auths[magic]) { if (_auths[magic]) {
console.log("DEBUG telebit.cloud magic 1b"); console.log("DEBUG telebit.cloud magic 1b");
tokenData = _auths[magic].resolve(); tokenData = _auths[magic].resolve();
@ -147,7 +147,7 @@ app.get('/api/telebit.cloud/magic/:magic', function (req, res) {
res.send(tokenData); res.send(tokenData);
} else { } else {
console.log("DEBUG telebit.cloud magic 2"); console.log("DEBUG telebit.cloud magic 2");
res.send({ error: { code: "E_TOKEN", message: "Invalid or expired magic link." } }); res.send({ error: { code: "E_TOKEN", message: "Invalid or expired magic link. (" + magic + ")" } });
console.log("DEBUG telebit.cloud magic 2b"); console.log("DEBUG telebit.cloud magic 2b");
} }
}); });