Skip to content

Commit 6f856ff

Browse files
authored
Merge pull request #26 from cjkas/scz/fix-login-pass
fix the version number in UI. Enable the remember username/password functionality in browser.
2 parents 15e7dd1 + 4f7fa73 commit 6f856ff

3 files changed

Lines changed: 33 additions & 16 deletions

File tree

data-src/index.html

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,21 +1026,23 @@ <h1 style="text-align: center;"><img src="icon.png" style="width:127px;margin-le
10261026
<label for="fldPinEntry" style="margin-top:7px;">Enter Pin</label>
10271027
</div>
10281028
</div>
1029-
<div id="divLoginPassword" style="display:none;" onkeyup="if (event.code === 'Enter') security.login();">
1029+
<form id="frmUnauthLogin" action="/login" method="post" onsubmit="security.login(event); return false;">
1030+
<div id="divLoginPassword" style="display:none;">
10301031
<div class="field-group">
1031-
<input id="fldLoginUsername" name="username" type="text" data-bind="login.username" length=32 placeholder="Username" />
1032+
<input id="fldLoginUsername" name="username" type="text" autocomplete="username" data-bind="login.username" length=32 placeholder="Username" />
10321033
<label for="fldLoginUsername">Username</label>
10331034
</div>
10341035
<div class="field-group">
1035-
<input id="fldLoginPassword" name="password" type="password" data-bind="login.password" length=32 placeholder="Password" />
1036+
<input id="fldLoginPassword" name="password" type="password" autocomplete="current-password" data-bind="login.password" length=32 placeholder="Password" />
10361037
<label for="fldLoginPassword">Password</label>
10371038
</div>
10381039
</div>
10391040
<div style="text-align:center;"><span id="spanLoginMessage" style="color:red"></span></div>
10401041
<div id="loginButtons" class="button-container" style="display:none;text-align:center;">
1041-
<button id="btnLogin" type="button" onclick="security.login();" style="display:inline-block;width:42%;">Login</button>
1042+
<button id="btnLogin" type="submit" style="display:inline-block;width:42%;">Login</button>
10421043
<button id="btnCancelLogin" type="button" onclick="security.cancelLogin();" style="display:none;width:42%;">Cancel</button>
10431044
</div>
1045+
</form>
10441046
</div>
10451047
</div>
10461048
<script type="text/javascript">

data-src/index.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,7 +1228,8 @@ class Security {
12281228
document.getElementById('divUnauthenticated').style.display = 'none';
12291229
document.getElementById('divContainer').dispatchEvent(evt);
12301230
}
1231-
login() {
1231+
login(evt) {
1232+
if (evt && evt.preventDefault) evt.preventDefault();
12321233
console.log('Logging in...');
12331234
let pnl = document.getElementById('divUnauthenticated');
12341235
let msg = pnl.querySelector('#spanLoginMessage');
@@ -1241,7 +1242,7 @@ class Security {
12411242
for (let i = 0; i < 4; i++) {
12421243
pin += sec.pin[`d${i}`];
12431244
}
1244-
if (pin.length !== 4) return;
1245+
if (pin.length !== 4) return false;
12451246
break;
12461247
case 2:
12471248
break;
@@ -1252,6 +1253,16 @@ class Security {
12521253
else {
12531254
console.log(log);
12541255
if (log.success) {
1256+
if (sec.type === 2 && window.PasswordCredential && navigator.credentials) {
1257+
try {
1258+
const cred = new PasswordCredential({
1259+
id: sec.username,
1260+
password: sec.password,
1261+
name: sec.username
1262+
});
1263+
navigator.credentials.store(cred);
1264+
} catch (e) { /* ignore; browsers without support fall back to the form-submit heuristic */ }
1265+
}
12551266
if (typeof socket === 'undefined' || !socket) (async () => { await initSockets(); })();
12561267
//ui.setMode(mode);
12571268

@@ -1260,21 +1271,22 @@ class Security {
12601271
document.getElementById('divContainer').setAttribute('data-auth', true);
12611272
this.apiKey = log.apiKey;
12621273
this.authenticated = true;
1263-
let evt = new CustomEvent('afterlogin', { detail: { authenticated: true } });
1264-
document.getElementById('divContainer').dispatchEvent(evt);
1274+
let evt2 = new CustomEvent('afterlogin', { detail: { authenticated: true } });
1275+
document.getElementById('divContainer').dispatchEvent(evt2);
12651276
}
12661277
else
12671278
msg.innerHTML = log.msg;
12681279
}
12691280
});
1281+
return false;
12701282
}
12711283
}
12721284
var security = new Security();
12731285

12741286
// let appVersion = 'v3.0.12'; // Default placeholder
12751287
async function getAppVersion() {
12761288
try {
1277-
const response = await fetch('/appversion');
1289+
const response = await fetch('/appversion?v='+Date.now());
12781290
if (!response.ok) throw new Error('File not found');
12791291

12801292
const data = await response.text();
@@ -1290,8 +1302,8 @@ async function getAppVersion() {
12901302
}
12911303

12921304
class General {
1293-
initialized = false;
1294-
appVersion = getAppVersion();
1305+
initialized = false;
1306+
appVersion = '';
12951307
reloadApp = false;
12961308
init() {
12971309
if (this.initialized) return;
@@ -1468,7 +1480,10 @@ class General {
14681480
}
14691481
});
14701482
}
1471-
setAppVersion() { document.getElementById('spanAppVersion').innerText = this.appVersion; }
1483+
async setAppVersion() {
1484+
this.appVersion = await getAppVersion();
1485+
document.getElementById('spanAppVersion').innerText = this.appVersion;
1486+
}
14721487
setTimeZones() {
14731488
let dd = document.getElementById('selTimeZone');
14741489
dd.length = 0;

data-src/login.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<h1 style="text-align: center;"><img src="icon.png" style="width:127px;margin-left:1px;margin-top:-10px;" /></h1>
1515
<div id="divLoginPnl" class="login-content" style="position:relative;">
1616
<div style="max-width:270px;margin:0px auto;">
17-
<form id="frmLogin" action="/login" method="post" class="login-form">
17+
<form id="frmLogin" action="/login" method="post" class="login-form" onsubmit="general.login(event); return false;">
1818
<input id="fldPin" type="hidden" name="pin">
1919
<div id="divPinSecurity" style="display:none;">
2020
<div class="field-group" style="text-align:center;">
@@ -29,17 +29,17 @@ <h1 style="text-align: center;"><img src="icon.png" style="width:127px;margin-le
2929
</div>
3030
<div id="divPasswordSecurity" style="display:none;">
3131
<div class="field-group">
32-
<input id="fldUsername" name="username" type="text" data-bind="security.username" length=32 placeholder="Username">
32+
<input id="fldUsername" name="username" type="text" autocomplete="username" data-bind="security.username" length=32 placeholder="Username">
3333
<label for="fldUsername">Username</label>
3434
</div>
3535
<div class="field-group">
36-
<input id="fldPassword" name="password" type="password" data-bind="security.password" length=32 placeholder="Password">
36+
<input id="fldPassword" name="password" type="password" autocomplete="current-password" data-bind="security.password" length=32 placeholder="Password">
3737
<label for="fldPassword">Password</label>
3838
</div>
3939
</div>
4040
<div style="text-align:center;"><span id="spanLoginMessage" style="color:red"></span></div>
4141
<div class="button-container">
42-
<button id="btnLogin" type="button" value="Submit" onclick="general.login();">
42+
<button id="btnLogin" type="submit" value="Submit">
4343
Login
4444
</button>
4545
</div>

0 commit comments

Comments
 (0)