diff options
Diffstat (limited to 'vendor/security-framework/examples')
3 files changed, 93 insertions, 0 deletions
diff --git a/vendor/security-framework/examples/client.rs b/vendor/security-framework/examples/client.rs new file mode 100644 index 000000000..a352bf94f --- /dev/null +++ b/vendor/security-framework/examples/client.rs @@ -0,0 +1,24 @@ +use security_framework::secure_transport::ClientBuilder; +use std::io::{Read, Write}; +use std::net::TcpStream; + +fn main() { + let stream = TcpStream::connect("google.com:443").unwrap(); + let mut stream = ClientBuilder::new() + .handshake("google.com", stream) + .unwrap(); + println!( + "negotiated chipher: {:?}", + stream.context().negotiated_cipher().unwrap() + ); + println!( + "negotiated version: {:?}", + stream.context().negotiated_protocol_version().unwrap() + ); + + stream.write_all(b"GET / HTTP/1.0\r\n\r\n").unwrap(); + stream.flush().unwrap(); + let mut buf = vec![]; + stream.read_to_end(&mut buf).unwrap(); + println!("{}", String::from_utf8_lossy(&buf)); +} diff --git a/vendor/security-framework/examples/find_internet_password.rs b/vendor/security-framework/examples/find_internet_password.rs new file mode 100644 index 000000000..58a2d8bea --- /dev/null +++ b/vendor/security-framework/examples/find_internet_password.rs @@ -0,0 +1,36 @@ +#[cfg(target_os = "macos")] +use security_framework::os::macos::keychain::SecKeychain; +#[cfg(target_os = "macos")] +use security_framework::os::macos::passwords::{SecAuthenticationType, SecProtocolType}; + +fn main() { + #[cfg(target_os = "macos")] { + let hostname = "example.com"; + let username = "rusty"; + let res = SecKeychain::default().unwrap().find_internet_password( + hostname, + None, + username, + "", + None, + SecProtocolType::Any, + SecAuthenticationType::Any, + ); + match res { + Ok((password, _)) => { + println!( + "Password for {}@{} is {} bytes long", + username, + hostname, + password.len() + ); + } + Err(err) if err.code() == -128 => { + eprintln!("Account was found in the Keychain, but user denied access"); + } + Err(err) => { + eprintln!("Password not found. Open Keychain Access.app and add internet password for '{}' at 'https://{}': {:?}", + username, hostname, err); + } + } +}} diff --git a/vendor/security-framework/examples/set_internet_password.rs b/vendor/security-framework/examples/set_internet_password.rs new file mode 100644 index 000000000..9c5e2cc1b --- /dev/null +++ b/vendor/security-framework/examples/set_internet_password.rs @@ -0,0 +1,33 @@ +#[cfg(target_os = "macos")] +use security_framework::os::macos::keychain::SecKeychain; +#[cfg(target_os = "macos")] +use security_framework::os::macos::passwords::{SecAuthenticationType, SecProtocolType}; + +fn main() { + #[cfg(target_os = "macos")] { + let hostname = "example.com"; + let username = "rusty"; + let password = b"oxidize"; + + let res = SecKeychain::default().unwrap().set_internet_password( + hostname, + None, + username, + "", + None, + SecProtocolType::HTTPS, + SecAuthenticationType::HTMLForm, + password, + ); + match res { + Ok(_) => { + println!( + "Password set for {}@{}. You can read it using find_internet_password example", + username, hostname + ); + } + Err(err) => { + eprintln!("Could not set password: {:?}", err); + } + } +}} |