Fully functioning auth and refresh, and oauth links display
This commit is contained in:
48
Cargo.lock
generated
48
Cargo.lock
generated
@@ -739,6 +739,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"shlex",
|
"shlex",
|
||||||
|
"webbrowser",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -764,6 +765,37 @@ dependencies = [
|
|||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ndk-context"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "objc2"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
|
||||||
|
dependencies = [
|
||||||
|
"objc2-encode",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "objc2-encode"
|
||||||
|
version = "4.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "objc2-foundation"
|
||||||
|
version = "0.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"objc2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.21.3"
|
version = "1.21.3"
|
||||||
@@ -1591,6 +1623,22 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "webbrowser"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation 0.10.1",
|
||||||
|
"jni",
|
||||||
|
"log",
|
||||||
|
"ndk-context",
|
||||||
|
"objc2",
|
||||||
|
"objc2-foundation",
|
||||||
|
"url",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webpki-root-certs"
|
name = "webpki-root-certs"
|
||||||
version = "1.0.6"
|
version = "1.0.6"
|
||||||
|
|||||||
@@ -11,3 +11,4 @@ reqwest = { version = "0.13.2", features = ["blocking", "form"] }
|
|||||||
serde = { version = "1.0.228", features = ["derive"] }
|
serde = { version = "1.0.228", features = ["derive"] }
|
||||||
serde_json = "1.0.149"
|
serde_json = "1.0.149"
|
||||||
shlex = "1.3.0"
|
shlex = "1.3.0"
|
||||||
|
webbrowser = "1.1.0"
|
||||||
|
|||||||
52
src/app.rs
52
src/app.rs
@@ -132,6 +132,8 @@ impl App {
|
|||||||
|
|
||||||
println!("Device Grant: {:?}", device_grant);
|
println!("Device Grant: {:?}", device_grant);
|
||||||
|
|
||||||
|
webbrowser::open(&device_grant.verification_uri_complete).unwrap();
|
||||||
|
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let expiry = Duration::from_secs(device_grant.expires_in);
|
let expiry = Duration::from_secs(device_grant.expires_in);
|
||||||
let interval = Duration::from_secs(device_grant.interval);
|
let interval = Duration::from_secs(device_grant.interval);
|
||||||
@@ -174,7 +176,50 @@ impl App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn show_oath_links(&self) {
|
pub fn refresh_auth(&mut self) {
|
||||||
|
let auth_metadata = self
|
||||||
|
.auth_metadata
|
||||||
|
.as_ref()
|
||||||
|
.expect("Can't refresh without auth");
|
||||||
|
|
||||||
|
let client_registration = self
|
||||||
|
.client_registration
|
||||||
|
.as_ref()
|
||||||
|
.expect("Can't refresh without registration..");
|
||||||
|
|
||||||
|
let auth_token = self
|
||||||
|
.auth_token
|
||||||
|
.as_ref()
|
||||||
|
.expect("Can't refresh without auth");
|
||||||
|
|
||||||
|
let client = reqwest::blocking::Client::new();
|
||||||
|
|
||||||
|
let req = client
|
||||||
|
.post(&auth_metadata.token_endpoint)
|
||||||
|
.header("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
.header("Accept", "application/json")
|
||||||
|
.form(&[
|
||||||
|
("client_id", client_registration.client_id.as_str()),
|
||||||
|
("refresh_token", auth_token.refresh_token.as_str()),
|
||||||
|
("grant_type", "refresh_token"),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let res = req.send().unwrap();
|
||||||
|
let status = res.status();
|
||||||
|
let res_text = res.text().unwrap();
|
||||||
|
|
||||||
|
if status != StatusCode::OK {
|
||||||
|
panic!("Error refreshing token");
|
||||||
|
}
|
||||||
|
|
||||||
|
let token = serde_json::from_str::<AuthorizationToken>(&res_text)
|
||||||
|
.expect("Couldn't decode auth token");
|
||||||
|
println!("{:?}", token);
|
||||||
|
println!("Authorized!");
|
||||||
|
self.auth_token = Some(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn show_oauth_links(&self) {
|
||||||
let auth_token = self
|
let auth_token = self
|
||||||
.auth_token
|
.auth_token
|
||||||
.as_ref()
|
.as_ref()
|
||||||
@@ -194,11 +239,12 @@ impl App {
|
|||||||
.header("Content-Type", "application/json")
|
.header("Content-Type", "application/json")
|
||||||
.body(include_str!("../oauthlinks.json"));
|
.body(include_str!("../oauthlinks.json"));
|
||||||
|
|
||||||
println!("Req {:?}", req);
|
// println!("Req {:?}", req);
|
||||||
|
|
||||||
let res = req.send().unwrap();
|
let res = req.send().unwrap();
|
||||||
|
|
||||||
println!("{}", res.text().unwrap());
|
let json = prettify_json_str(res.text().unwrap().as_str()).unwrap();
|
||||||
|
println!("{}", json);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,8 @@ fn main() {
|
|||||||
Commands::GetAuthMetadata => app.get_auth_metadata(),
|
Commands::GetAuthMetadata => app.get_auth_metadata(),
|
||||||
Commands::RegisterClient => app.register_client(),
|
Commands::RegisterClient => app.register_client(),
|
||||||
Commands::AuthorizeDevice => app.authorize_device(),
|
Commands::AuthorizeDevice => app.authorize_device(),
|
||||||
Commands::ShowOauthLinks => app.show_oath_links(),
|
Commands::RefreshAuth => app.refresh_auth(),
|
||||||
|
Commands::ShowOauthLinks => app.show_oauth_links(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -153,5 +154,6 @@ enum Commands {
|
|||||||
GetAuthMetadata,
|
GetAuthMetadata,
|
||||||
RegisterClient,
|
RegisterClient,
|
||||||
AuthorizeDevice,
|
AuthorizeDevice,
|
||||||
|
RefreshAuth,
|
||||||
ShowOauthLinks,
|
ShowOauthLinks,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user