@@ -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}
12721284var security = new Security ( ) ;
12731285
12741286// let appVersion = 'v3.0.12'; // Default placeholder
12751287async 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
12921304class 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 ;
0 commit comments