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

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.


*