From 5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb Mon Sep 17 00:00:00 2001 From: Kirill Rogovoy Date: Tue, 20 Jul 2021 21:24:52 +0300 Subject: WIP --- app_expo/utils/keychain.ts | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 app_expo/utils/keychain.ts (limited to 'app_expo/utils/keychain.ts') diff --git a/app_expo/utils/keychain.ts b/app_expo/utils/keychain.ts new file mode 100644 index 0000000..bcbc379 --- /dev/null +++ b/app_expo/utils/keychain.ts @@ -0,0 +1,63 @@ +import * as ReactNativeKeychain from 'react-native-keychain' + +/** + * Saves some credentials securely. + * + * @param username The username + * @param password The password + * @param server The server these creds are for. + */ +export async function save(username: string, password: string, server?: string) { + if (server) { + await ReactNativeKeychain.setInternetCredentials(server, username, password) + return true + } else { + return ReactNativeKeychain.setGenericPassword(username, password) + } +} + +/** + * Loads credentials that were already saved. + * + * @param server The server that these creds are for + */ +export async function load(server?: string) { + if (server) { + const creds = await ReactNativeKeychain.getInternetCredentials(server) + return { + username: creds ? creds.username : null, + password: creds ? creds.password : null, + server, + } + } else { + const creds = await ReactNativeKeychain.getGenericPassword() + if (typeof creds === 'object') { + return { + username: creds.username, + password: creds.password, + server: null, + } + } else { + return { + username: null, + password: null, + server: null, + } + } + } +} + +/** + * Resets any existing credentials for the given server. + * + * @param server The server which has these creds + */ +export async function reset(server?: string) { + if (server) { + await ReactNativeKeychain.resetInternetCredentials(server) + return true + } else { + const result = await ReactNativeKeychain.resetGenericPassword() + return result + } +} -- cgit v1.2.3