React Native – How to save sensitive data inside the app?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { AsyncStorage } from 'react-native'
import { getGenericPassword, resetGenericPassword, setGenericPassword } from 'react-native-keychain'
const noop = () => null
export default ({ service = 'safestorage' }) => {
return {
prependService (key) {
return `${service}:${key}`
},
async getItem (key, callback = noop) {
try {
const serviceKey = this.prependService(key)
const entry = await getGenericPassword(serviceKey)
if (entry) {
const { password } = entry
callback(null, password)
return password
}
return null
} catch (e) {
callback(e)
throw e
}
},
async setItem (key, value, callback = noop) {
try {
const serviceKey = this.prependService(key)
await [
AsyncStorage.setItem(serviceKey, '1'),
setGenericPassword(key, value, serviceKey)
]
callback(null)
} catch (e) {
callback(e)
throw e
}
},
async removeItem (key, callback = noop) {
try {
const serviceKey = this.prependService(key)
await [
AsyncStorage.removeItem(serviceKey),
resetGenericPassword(serviceKey)
]
callback(null)
} catch (e) {
callback(e)
throw e
}
},
async getAllKeys (callback = noop) {
try {
const keys = await AsyncStorage.getAllKeys()
callback(null, keys)
return keys
} catch (e) {
callback(e)
throw e
}
}
}
}
import { AsyncStorage } from 'react-native' import { getGenericPassword, resetGenericPassword, setGenericPassword } from 'react-native-keychain' const noop = () => null export default ({ service = 'safestorage' }) => { return { prependService (key) { return `${service}:${key}` }, async getItem (key, callback = noop) { try { const serviceKey = this.prependService(key) const entry = await getGenericPassword(serviceKey) if (entry) { const { password } = entry callback(null, password) return password } return null } catch (e) { callback(e) throw e } }, async setItem (key, value, callback = noop) { try { const serviceKey = this.prependService(key) await [ AsyncStorage.setItem(serviceKey, '1'), setGenericPassword(key, value, serviceKey) ] callback(null) } catch (e) { callback(e) throw e } }, async removeItem (key, callback = noop) { try { const serviceKey = this.prependService(key) await [ AsyncStorage.removeItem(serviceKey), resetGenericPassword(serviceKey) ] callback(null) } catch (e) { callback(e) throw e } }, async getAllKeys (callback = noop) { try { const keys = await AsyncStorage.getAllKeys() callback(null, keys) return keys } catch (e) { callback(e) throw e } } } }
import { AsyncStorage } from 'react-native'
import { getGenericPassword, resetGenericPassword, setGenericPassword } from 'react-native-keychain'

const noop = () => null

export default ({ service = 'safestorage' }) => {
  return {
    prependService (key) {
      return `${service}:${key}`
    },

    async getItem (key, callback = noop) {
      try {
        const serviceKey = this.prependService(key)
        const entry = await getGenericPassword(serviceKey)

        if (entry) {
          const { password } = entry

          callback(null, password)

          return password
        }

        return null
      } catch (e) {
        callback(e)
        throw e
      }
    },

    async setItem (key, value, callback = noop) {
      try {
        const serviceKey = this.prependService(key)

        await [
          AsyncStorage.setItem(serviceKey, '1'),
          setGenericPassword(key, value, serviceKey)
        ]

        callback(null)
      } catch (e) {
        callback(e)
        throw e
      }
    },

    async removeItem (key, callback = noop) {
      try {
        const serviceKey = this.prependService(key)

        await [
          AsyncStorage.removeItem(serviceKey),
          resetGenericPassword(serviceKey)
        ]

        callback(null)
      } catch (e) {
        callback(e)
        throw e
      }
    },

    async getAllKeys (callback = noop) {
      try {
        const keys = await AsyncStorage.getAllKeys()

        callback(null, keys)

        return keys
      } catch (e) {
        callback(e)

        throw e
      }
    }
  }
}

Be the first to comment

Leave a Reply

Your email address will not be published.


*