mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
|
|
const authsettings = require('./settings')
|
|
const SEA = require('./sea');
|
|
const Gun = SEA.Gun;
|
|
//const { scope: seaIndexedDb } = require('./indexed')
|
|
// This updates sessionStorage & IndexedDB to persist authenticated "session"
|
|
const updateStorage = (proof, key, pin) => async (props) => {
|
|
if (!Gun.obj.has(props, 'alias')) {
|
|
return // No 'alias' - we're done.
|
|
}
|
|
if (authsettings.validity && proof && Gun.obj.has(props, 'iat')) {
|
|
props.proof = proof
|
|
delete props.remember // Not stored if present
|
|
|
|
const alias = props.alias
|
|
const id = props.alias
|
|
const remember = { alias: alias, pin: pin }
|
|
|
|
try {
|
|
const signed = await SEA.sign(JSON.stringify(remember), key)
|
|
|
|
sessionStorage.setItem('user', alias)
|
|
sessionStorage.setItem('remember', signed)
|
|
|
|
const encrypted = await SEA.encrypt(props, pin)
|
|
|
|
if (encrypted) {
|
|
const auth = await SEA.sign(encrypted, key)
|
|
await seaIndexedDb.wipe() // NO! Do not do this. It ruins other people's sessionStorage code. This is bad/wrong, commenting it out.
|
|
await seaIndexedDb.put(id, { auth: auth })
|
|
}
|
|
|
|
return props
|
|
} catch (err) {
|
|
throw { err: 'Session persisting failed!' }
|
|
}
|
|
}
|
|
|
|
// Wiping IndexedDB completely when using random PIN
|
|
await seaIndexedDb.wipe() // NO! Do not do this. It ruins other people's sessionStorage code. This is bad/wrong, commenting it out.
|
|
// And remove sessionStorage data
|
|
sessionStorage.removeItem('user')
|
|
sessionStorage.removeItem('remember')
|
|
|
|
return props
|
|
}
|
|
module.exports = updateStorage
|
|
|