forked from JulienKode/react-native-keychain
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
134 lines (123 loc) · 4.74 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import { NativeModules, Platform } from 'react-native';
const { RNKeychainManager } = NativeModules;
type SecAccessible =
| 'AccessibleWhenUnlocked'
| 'AccessibleAfterFirstUnlock'
| 'AccessibleAlways'
| 'AccessibleWhenPasscodeSetThisDeviceOnly'
| 'AccessibleWhenUnlockedThisDeviceOnly'
| 'AccessibleAfterFirstUnlockThisDeviceOnly'
| 'AccessibleAlwaysThisDeviceOnly'
type Options = {
accessible?: SecAccessible;
accessGroup?: string;
service?: string;
};
/**
* Saves the `username` and `password` combination for `server`.
* @param {string} server URL to server.
* @param {string} username Associated username or e-mail to be saved.
* @param {string} password Associated password to be saved.
* @param {object} options Keychain options, iOS only
* @return {Promise} Resolves to `true` when successful
*/
export function setInternetCredentials(
server: string,
username: string,
password: string,
options?: Options
): Promise {
return RNKeychainManager.setInternetCredentialsForServer(server, username, password, options);
}
/**
* Fetches login combination for `server`.
* @param {string} server URL to server.
* @param {object} options Keychain options, iOS only
* @return {Promise} Resolves to `{ server, username, password }` when successful
*/
export function getInternetCredentials(
server: string,
options?: Options
): Promise {
return RNKeychainManager.getInternetCredentialsForServer(server, options);
}
/**
* Deletes all internet password keychain entries for `server`.
* @param {string} server URL to server.
* @param {object} options Keychain options, iOS only
* @return {Promise} Resolves to `true` when successful
*/
export function resetInternetCredentials(
server: string,
options?: Options
): Promise {
return RNKeychainManager.resetInternetCredentialsForServer(server, options);
}
function getOptionsArgument(serviceOrOptions?: string | KeychainOptions) {
if (Platform.OS !== 'ios') {
return typeof serviceOrOptions === 'object' ? serviceOrOptions.service : serviceOrOptions;
}
return typeof serviceOrOptions === 'string' ? { service: serviceOrOptions } : serviceOrOptions;
}
/**
* Saves the `username` and `password` combination for `service`.
* @param {string} username Associated username or e-mail to be saved.
* @param {string} password Associated password to be saved.
* @param {string|object} serviceOrOptions Reverse domain name qualifier for the service, defaults to `bundleId` or an options object.
* @return {Promise} Resolves to `true` when successful
*/
export function setGenericPassword(
username: string,
password: string,
serviceOrOptions?: string | KeychainOptions
): Promise {
return RNKeychainManager.setGenericPasswordForOptions(getOptionsArgument(serviceOrOptions), username, password);
}
/**
* Fetches login combination for `service`.
* @param {string|object} serviceOrOptions Reverse domain name qualifier for the service, defaults to `bundleId` or an options object.
* @return {Promise} Resolves to `{ service, username, password }` when successful
*/
export function getGenericPassword(
serviceOrOptions?: string | KeychainOptions
): Promise {
return RNKeychainManager.getGenericPasswordForOptions(getOptionsArgument(serviceOrOptions));
}
/**
* Deletes all generic password keychain entries for `service`.
* @param {string|object} serviceOrOptions Reverse domain name qualifier for the service, defaults to `bundleId` or an options object.
* @return {Promise} Resolves to `true` when successful
*/
export function resetGenericPassword(
serviceOrOptions?: string | KeychainOptions
): Promise {
return RNKeychainManager.resetGenericPasswordForOptions(getOptionsArgument(serviceOrOptions));
}
/**
* Asks the user for a shared web credential.
* @return {Promise} Resolves to `{ server, username, password }` if approved and
* `false` if denied and throws an error if not supported on platform or there's no shared credentials
*/
export function requestSharedWebCredentials() : Promise {
if (Platform.OS !== 'ios') {
return Promise.reject(new Error(`requestSharedWebCredentials() is not supported on ${Platform.OS} yet`));
}
return RNKeychainManager.requestSharedWebCredentials();
}
/**
* Sets a shared web credential.
* @param {string} server URL to server.
* @param {string} username Associated username or e-mail to be saved.
* @param {string} password Associated password to be saved.
* @return {Promise} Resolves to `true` when successful
*/
export function setSharedWebCredentials(
server: string,
username: string,
password: string
) : Promise {
if (Platform.OS !== 'ios') {
return Promise.reject(new Error(`setSharedWebCredentials() is not supported on ${Platform.OS} yet`));
}
return RNKeychainManager.setSharedWebCredentialsForServer(server, username, password);
}