summaryrefslogtreecommitdiffstats
path: root/vendor/security-framework/examples
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/security-framework/examples')
-rw-r--r--vendor/security-framework/examples/client.rs24
-rw-r--r--vendor/security-framework/examples/find_internet_password.rs36
-rw-r--r--vendor/security-framework/examples/set_internet_password.rs33
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);
+ }
+ }
+}}