Put SQRL configuration into ini, better trap failed init

This commit is contained in:
Deon George 2020-08-14 12:33:33 +10:00
parent 38a88eb7c0
commit cdb0519c49
3 changed files with 99 additions and 91 deletions

View File

@ -4,6 +4,10 @@
;gpg_key=0@videotex ;gpg_key=0@videotex
; The prefix configurations need to be kept in sync with other nodes ; The prefix configurations need to be kept in sync with other nodes
[sqrl]
auth_url=http://ansitex.bbs.leenooks.net
auth_path=sqrl/login
auth_post=api/sqrl
; Frames with no specific owner are owned by this key ; Frames with no specific owner are owned by this key
[prefix] [prefix]

View File

@ -117,7 +117,7 @@ function getPageOwners() {
if (! pageowners.length) { if (! pageowners.length) {
var f = new File(file_cfgname(system.mods_dir,'ansitex/ctrl/videotex.ini')); var f = new File(file_cfgname(system.mods_dir,'ansitex/ctrl/videotex.ini'));
if (f.open("r")) { if (f.open('r')) {
var logoans = f.iniGetValue('prefix','logoans'); var logoans = f.iniGetValue('prefix','logoans');
var logovtx = f.iniGetValue('prefix','logovtx'); var logovtx = f.iniGetValue('prefix','logovtx');
var users = f.iniGetValue('prefix','user'); var users = f.iniGetValue('prefix','user');
@ -145,16 +145,16 @@ function getPageOwners() {
return pageowners; return pageowners;
} }
function loadOptions() { function loadOptions(option) {
ini = new File(file_cfgname(system.mods_dir,'ansitex/ctrl/videotex.ini')); var f = new File(file_cfgname(system.mods_dir,'ansitex/ctrl/videotex.ini'));
if (!ini.open("r")) { if (! f.open('r')) {
return undefined; return undefined;
} }
val = ini.iniGetObject(null); val = f.iniGetObject(option);
ini.close(); f.close();
return val; return val;
} }

View File

@ -30,8 +30,10 @@ function sqrllogin() {
page.open(); page.open();
page.cycle(); page.cycle();
log(LOG_DEBUG,'OPTIONS: '+JSON.stringify(loadOptions('sqrl')));
sqrl = loadOptions('sqrl');
http = new HTTPRequest(); http = new HTTPRequest();
http.SetupGet('/sqrl/login',undefined,'http://ansitex.leenooks.net'); http.SetupGet(sqrl.auth_path,undefined,sqrl.auth_url);
http.request_headers.push('Accept: application/json'); http.request_headers.push('Accept: application/json');
try { try {
@ -39,103 +41,105 @@ function sqrllogin() {
http.ReadResponse(); http.ReadResponse();
log(LOG_INFO,'SQRL: '+JSON.stringify(http.body)); log(LOG_INFO,'SQRL: '+JSON.stringify(http.body));
} catch(err) { var data = http.body
log(LOG_INFO, "http error: " + err); .split('')
return false; .map(function(x) {return x.charCodeAt(0)});
} var qr = qrcodegen.QrCode.encodeBinary(data,qrcodegen.QrCode.Ecc.LOW);
var data = http.body // SMALL Image
.split('') var full = ascii(0xdb);
.map(function(x) {return x.charCodeAt(0)}); var top = ascii(0xdf);
var qr = qrcodegen.QrCode.encodeBinary(data, qrcodegen.QrCode.Ecc.LOW); var bot = ascii(0xdc);
var blank = ' ';
// SMALL Image var qrcode = '';
var full = ascii(0xdb);
var top = ascii(0xdf);
var bot = ascii(0xdc);
var blank = ' ';
var qrcode = '';
// Render the top line
var line = ascii(27)+'[1;37m'+bot+bot;
for (var y = 0; y < qr.size; y++) {
line += bot;
}
qrcode += line+bot+bot+ascii(27)+'[0m'+"\r\n";
// Render the body
for (var x = -1; x < qr.size; x=x+2) {
line = ascii(27)+'[1;37m'+full+full;
// Render the top line
var line = ascii(27)+'[1;37m'+bot+bot;
for (var y = 0; y < qr.size; y++) { for (var y = 0; y < qr.size; y++) {
// Top is white line += bot;
if (((x==-1)? 0 : qr.getModule(x, y)) == 0) { }
line += (qr.getModule(x+1, y)) ? top : full; qrcode += line+bot+bot+ascii(27)+'[0m'+"\r\n";
// Render the body
for (var x = -1; x < qr.size; x=x+2) {
line = ascii(27)+'[1;37m'+full+full;
for (var y = 0; y < qr.size; y++) {
// Top is white
if (((x==-1)? 0 : qr.getModule(x, y)) == 0) {
line += (qr.getModule(x+1, y)) ? top : full;
// Top is black
} else {
line += (qr.getModule(x+1, y)) ? blank : bot;
}
}
qrcode += line+full+full+ascii(27)+'[0m'+"\r\n";
}
// Render the bottom
line = ascii(27)+'[1;37m'+full+full;
for (var y = 0; y < qr.size; y++) {
line += full;
}
qrcode += line+full+full+ascii(27)+'[0m'+"\r\n";
subframe = new Frame(39,2,42,22,BG_BLACK|LIGHTGRAY,page);
ans2bin(fo.parse(qrcode),subframe);
subframe.open();
subframe.cycle();
fo.sendBaseline('CANCEL_MSG',false);
// Loop and see if the user has logged in
nut = http.body.substr(http.body.indexOf('nut='),68);
var read = '';
while (read !== '2') {
read = console.inkey(K_NONE,1000);
if (read == 2)
cancel = true;
http = new HTTPRequest();
http.SetupGet(sqrl.auth_post+'?'+nut,undefined,sqrl.auth_url);
http.request_headers.push('Accept: application/json');
log(LOG_DEBUG,'Checking NUT in ['+nut+']');
http.SendRequest();
http.ReadResponse();
if (http.response_code == 404) {
log(LOG_DEBUG,'- NUT not Authorised yet.');
// Top is black
} else { } else {
line += (qr.getModule(x+1, y)) ? blank : bot; log(LOG_INFO,'NUT: ('+JSON.stringify(http.response_code)+'): '+JSON.stringify(http.body));
//@todo
action = ACTION_GOTO;
next_page = { frame: 98,index: 'a' };
complete = true;
subframe.close();
page.close();
// We are done
read = '2';
} }
} }
qrcode += line+full+full+ascii(27)+'[0m'+"\r\n"; } catch(err) {
} log(LOG_INFO,'SQRL Error: '+err);
cancel = true;
// Render the bottom
line = ascii(27)+'[1;37m'+full+full;
for (var y = 0; y < qr.size; y++) {
line += full;
}
qrcode += line+full+full+ascii(27)+'[0m'+"\r\n";
subframe = new Frame(39,2,42,22,BG_BLACK|LIGHTGRAY,page);
ans2bin(fo.parse(qrcode),subframe);
subframe.open();
subframe.cycle();
fo.sendBaseline('CANCEL_MSG',false);
// Loop and see if the user has logged in
nut = http.body.substr(http.body.indexOf('nut='),68);
var read = '';
while (read !== '2') {
read = console.inkey(K_NONE,1000);
if (read == 2)
cancel = true;
http = new HTTPRequest();
http.SetupGet('/api/sqrl?'+nut,undefined,'http://ansitex.leenooks.net');
http.request_headers.push('Accept: application/json');
log(LOG_DEBUG,'Checking NUT in ['+nut+']');
http.SendRequest();
http.ReadResponse();
if (http.response_code == 404) {
log(LOG_DEBUG,'- NUT not Authorised yet.');
} else {
log(LOG_INFO,'NUT: ('+JSON.stringify(http.response_code)+'): '+JSON.stringify(http.body));
//@todo
action = ACTION_GOTO;
next_page = { frame: 98,index: 'a' };
complete = true;
subframe.close();
page.close();
// We are done
read = '2';
}
} }
if (cancel) { if (cancel) {
complete = true; complete = true;
subframe.close(); log(LOG_INFO,'DEBUG: ' + typeof subframe);
if (typeof subframe !== 'undefined')
subframe.close();
page.close(); page.close();
action = ACTION_GOTO; action = ACTION_GOTO;
next_page = { frame: 98,index: 'a' }; next_page = { frame: 98,index: 'a' };