1234567891011121314151617181920212223242526272829303132333435363738394041 |
- const SEA = require('./sea');
- const Gun = SEA.Gun;
- const Buffer = require('./buffer')
- const authsettings = require('./settings')
- const updateStorage = require('./update')
- // This internal func persists User authentication if so configured
- const authPersist = async (user, proof, opts) => {
- // opts = { pin: 'string' }
- // no opts.pin then uses random PIN
- // How this works:
- // called when app bootstraps, with wanted options
- // IF authsettings.validity === 0 THEN no remember-me, ever
- // IF PIN then signed 'remember' to window.sessionStorage and 'auth' to IndexedDB
- const pin = Buffer.from(
- (Gun.obj.has(opts, 'pin') && opts.pin) || Gun.text.random(10),
- 'utf8'
- ).toString('base64')
- const alias = user.alias
- const exp = authsettings.validity // seconds // @mhelander what is `exp`???
- if (proof && alias && exp) {
- const iat = Math.ceil(Date.now() / 1000) // seconds
- const remember = Gun.obj.has(opts, 'pin') || undefined // for hook - not stored
- const props = authsettings.hook({ alias: alias, iat: iat, exp: exp, remember: remember })
- const pub = user.pub
- const epub = user.epub
- const priv = user.sea.priv
- const epriv = user.sea.epriv
- const key = { pub: pub, priv: priv, epub: epub, epriv: epriv }
- if (props instanceof Promise) {
- const asyncProps = await props.then()
- return await updateStorage(proof, key, pin)(asyncProps)
- }
- return await updateStorage(proof, key, pin)(props)
- }
- return await updateStorage()({ alias: 'delete' })
- }
- module.exports = authPersist
-
|