|
1 | 1 | //! Cargo registry macos keychain credential process.
|
2 | 2 |
|
3 |
| -use cargo_credential::{Credential, Error}; |
4 |
| -use security_framework::os::macos::keychain::SecKeychain; |
| 3 | +mod macos { |
| 4 | + use cargo_credential::{Credential, Error}; |
| 5 | + use security_framework::os::macos::keychain::SecKeychain; |
5 | 6 |
|
6 |
| -struct MacKeychain; |
| 7 | + pub(crate) struct MacKeychain; |
7 | 8 |
|
8 |
| -/// The account name is not used. |
9 |
| -const ACCOUNT: &'static str = ""; |
| 9 | + /// The account name is not used. |
| 10 | + const ACCOUNT: &'static str = ""; |
10 | 11 |
|
11 |
| -fn registry(registry_name: &str) -> String { |
12 |
| - format!("cargo-registry:{}", registry_name) |
13 |
| -} |
14 |
| - |
15 |
| -impl Credential for MacKeychain { |
16 |
| - fn name(&self) -> &'static str { |
17 |
| - env!("CARGO_PKG_NAME") |
| 12 | + fn registry(registry_name: &str) -> String { |
| 13 | + format!("cargo-registry:{}", registry_name) |
18 | 14 | }
|
19 | 15 |
|
20 |
| - fn get(&self, index_url: &str) -> Result<String, Error> { |
21 |
| - let keychain = SecKeychain::default().unwrap(); |
22 |
| - let service_name = registry(index_url); |
23 |
| - let (pass, _item) = keychain.find_generic_password(&service_name, ACCOUNT)?; |
24 |
| - String::from_utf8(pass.as_ref().to_vec()) |
25 |
| - .map_err(|_| "failed to convert token to UTF8".into()) |
26 |
| - } |
| 16 | + impl Credential for MacKeychain { |
| 17 | + fn name(&self) -> &'static str { |
| 18 | + env!("CARGO_PKG_NAME") |
| 19 | + } |
27 | 20 |
|
28 |
| - fn store(&self, index_url: &str, token: &str, name: Option<&str>) -> Result<(), Error> { |
29 |
| - let keychain = SecKeychain::default().unwrap(); |
30 |
| - let service_name = registry(name.unwrap_or(index_url)); |
31 |
| - if let Ok((_pass, mut item)) = keychain.find_generic_password(&service_name, ACCOUNT) { |
32 |
| - item.set_password(token.as_bytes())?; |
33 |
| - } else { |
34 |
| - keychain.add_generic_password(&service_name, ACCOUNT, token.as_bytes())?; |
| 21 | + fn get(&self, index_url: &str) -> Result<String, Error> { |
| 22 | + let keychain = SecKeychain::default().unwrap(); |
| 23 | + let service_name = registry(index_url); |
| 24 | + let (pass, _item) = keychain.find_generic_password(&service_name, ACCOUNT)?; |
| 25 | + String::from_utf8(pass.as_ref().to_vec()) |
| 26 | + .map_err(|_| "failed to convert token to UTF8".into()) |
| 27 | + } |
| 28 | + |
| 29 | + fn store(&self, index_url: &str, token: &str, name: Option<&str>) -> Result<(), Error> { |
| 30 | + let keychain = SecKeychain::default().unwrap(); |
| 31 | + let service_name = registry(name.unwrap_or(index_url)); |
| 32 | + if let Ok((_pass, mut item)) = keychain.find_generic_password(&service_name, ACCOUNT) { |
| 33 | + item.set_password(token.as_bytes())?; |
| 34 | + } else { |
| 35 | + keychain.add_generic_password(&service_name, ACCOUNT, token.as_bytes())?; |
| 36 | + } |
| 37 | + Ok(()) |
35 | 38 | }
|
36 |
| - Ok(()) |
37 |
| - } |
38 | 39 |
|
39 |
| - fn erase(&self, index_url: &str) -> Result<(), Error> { |
40 |
| - let keychain = SecKeychain::default().unwrap(); |
41 |
| - let service_name = registry(index_url); |
42 |
| - let (_pass, item) = keychain.find_generic_password(&service_name, ACCOUNT)?; |
43 |
| - item.delete(); |
44 |
| - Ok(()) |
| 40 | + fn erase(&self, index_url: &str) -> Result<(), Error> { |
| 41 | + let keychain = SecKeychain::default().unwrap(); |
| 42 | + let service_name = registry(index_url); |
| 43 | + let (_pass, item) = keychain.find_generic_password(&service_name, ACCOUNT)?; |
| 44 | + item.delete(); |
| 45 | + Ok(()) |
| 46 | + } |
45 | 47 | }
|
46 | 48 | }
|
47 | 49 |
|
48 | 50 | fn main() {
|
49 |
| - cargo_credential::main(MacKeychain); |
| 51 | + cargo_credential::main(macos::MacKeychain); |
50 | 52 | }
|
0 commit comments