mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 20:47:01 +01:00
* Bump the all group with 22 updates Bumps the all group with 22 updates: | Package | From | To | | --- | --- | --- | | [async-trait](https://github.com/dtolnay/async-trait) | `0.1.83` | `0.1.85` | | [bitflags](https://github.com/bitflags/bitflags) | `2.6.0` | `2.8.0` | | [clap](https://github.com/clap-rs/clap) | `4.5.23` | `4.5.27` | | [clap_complete](https://github.com/clap-rs/clap) | `4.5.40` | `4.5.42` | | [lodepng](https://github.com/kornelski/lodepng-rust) | `3.10.7` | `3.11.0` | | [openssl](https://github.com/sfackler/rust-openssl) | `0.10.68` | `0.10.69` | | [proc-macro2](https://github.com/dtolnay/proc-macro2) | `1.0.92` | `1.0.93` | | [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.11` | `0.12.12` | | [rustls](https://github.com/rustls/rustls) | `0.23.20` | `0.23.21` | | [sd-notify](https://github.com/lnicola/sd-notify) | `0.4.4` | `0.4.5` | | [serde_json](https://github.com/serde-rs/json) | `1.0.134` | `1.0.137` | | [syn](https://github.com/dtolnay/syn) | `2.0.93` | `2.0.96` | | [tempfile](https://github.com/Stebalien/tempfile) | `3.14.0` | `3.15.0` | | [tokio](https://github.com/tokio-rs/tokio) | `1.42.0` | `1.43.0` | | [uuid](https://github.com/uuid-rs/uuid) | `1.11.0` | `1.12.1` | | [oauth2](https://github.com/ramosbugs/oauth2-rs) | `4.4.2` | `5.0.0` | | [cc](https://github.com/rust-lang/cc-rs) | `1.2.6` | `1.2.10` | | [axum-extra](https://github.com/tokio-rs/axum) | `0.9.6` | `0.10.0` | | [axum-macros](https://github.com/tokio-rs/axum) | `0.4.2` | `0.5.0` | | [fantoccini](https://github.com/jonhoo/fantoccini) | `0.21.3` | `0.21.4` | | [petgraph](https://github.com/petgraph/petgraph) | `0.6.5` | `0.7.1` | | [jsonschema](https://github.com/Stranger6667/jsonschema) | `0.28.0` | `0.28.3` | Updates `async-trait` from 0.1.83 to 0.1.85 - [Release notes](https://github.com/dtolnay/async-trait/releases) - [Commits](https://github.com/dtolnay/async-trait/compare/0.1.83...0.1.85) Updates `bitflags` from 2.6.0 to 2.8.0 - [Release notes](https://github.com/bitflags/bitflags/releases) - [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md) - [Commits](https://github.com/bitflags/bitflags/compare/2.6.0...2.8.0) Updates `clap` from 4.5.23 to 4.5.27 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.23...clap_complete-v4.5.27) Updates `clap_complete` from 4.5.40 to 4.5.42 - [Release notes](https://github.com/clap-rs/clap/releases) - [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md) - [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.40...clap_complete-v4.5.42) Updates `lodepng` from 3.10.7 to 3.11.0 - [Commits](https://github.com/kornelski/lodepng-rust/compare/v3.10.7...v3.11.0) Updates `openssl` from 0.10.68 to 0.10.69 - [Release notes](https://github.com/sfackler/rust-openssl/releases) - [Commits](https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.68...openssl-v0.10.69) Updates `proc-macro2` from 1.0.92 to 1.0.93 - [Release notes](https://github.com/dtolnay/proc-macro2/releases) - [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.92...1.0.93) Updates `reqwest` from 0.12.11 to 0.12.12 - [Release notes](https://github.com/seanmonstar/reqwest/releases) - [Changelog](https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md) - [Commits](https://github.com/seanmonstar/reqwest/compare/v0.12.11...v0.12.12) Updates `rustls` from 0.23.20 to 0.23.21 - [Release notes](https://github.com/rustls/rustls/releases) - [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md) - [Commits](https://github.com/rustls/rustls/compare/v/0.23.20...v/0.23.21) Updates `sd-notify` from 0.4.4 to 0.4.5 - [Changelog](https://github.com/lnicola/sd-notify/blob/master/CHANGELOG.md) - [Commits](https://github.com/lnicola/sd-notify/compare/v0.4.4...v0.4.5) Updates `serde_json` from 1.0.134 to 1.0.137 - [Release notes](https://github.com/serde-rs/json/releases) - [Commits](https://github.com/serde-rs/json/compare/v1.0.134...v1.0.137) Updates `syn` from 2.0.93 to 2.0.96 - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/2.0.93...2.0.96) Updates `tempfile` from 3.14.0 to 3.15.0 - [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stebalien/tempfile/compare/v3.14.0...v3.15.0) Updates `tokio` from 1.42.0 to 1.43.0 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.42.0...tokio-1.43.0) Updates `uuid` from 1.11.0 to 1.12.1 - [Release notes](https://github.com/uuid-rs/uuid/releases) - [Commits](https://github.com/uuid-rs/uuid/compare/1.11.0...1.12.1) Updates `oauth2` from 4.4.2 to 5.0.0 - [Release notes](https://github.com/ramosbugs/oauth2-rs/releases) - [Upgrade guide](https://github.com/ramosbugs/oauth2-rs/blob/main/UPGRADE.md) - [Commits](https://github.com/ramosbugs/oauth2-rs/compare/4.4.2...5.0.0) Updates `cc` from 1.2.6 to 1.2.10 - [Release notes](https://github.com/rust-lang/cc-rs/releases) - [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.6...cc-v1.2.10) Updates `axum-extra` from 0.9.6 to 0.10.0 - [Release notes](https://github.com/tokio-rs/axum/releases) - [Changelog](https://github.com/tokio-rs/axum/blob/main/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/axum/compare/axum-extra-v0.9.6...axum-extra-v0.10.0) Updates `axum-macros` from 0.4.2 to 0.5.0 - [Release notes](https://github.com/tokio-rs/axum/releases) - [Changelog](https://github.com/tokio-rs/axum/blob/main/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/axum/compare/axum-macros-v0.4.2...axum-macros-v0.5.0) Updates `fantoccini` from 0.21.3 to 0.21.4 - [Commits](https://github.com/jonhoo/fantoccini/compare/v0.21.3...v0.21.4) Updates `petgraph` from 0.6.5 to 0.7.1 - [Changelog](https://github.com/petgraph/petgraph/blob/master/RELEASES.rst) - [Commits](https://github.com/petgraph/petgraph/compare/petgraph@v0.6.5...petgraph@v0.7.1) Updates `jsonschema` from 0.28.0 to 0.28.3 - [Release notes](https://github.com/Stranger6667/jsonschema/releases) - [Changelog](https://github.com/Stranger6667/jsonschema/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stranger6667/jsonschema/compare/rust-v0.28.0...rust-v0.28.3) --- updated-dependencies: - dependency-name: async-trait dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: bitflags dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: clap dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: clap_complete dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: lodepng dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: openssl dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: proc-macro2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: reqwest dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: rustls dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: sd-notify dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: serde_json dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: tempfile dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: uuid dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: oauth2 dependency-type: direct:production update-type: version-update:semver-major dependency-group: all - dependency-name: cc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: axum-extra dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: axum-macros dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: fantoccini dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: petgraph dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: jsonschema dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all ... Signed-off-by: dependabot[bot] <support@github.com> * ok the otel stuff works now * linting fixes * fix: less parse more from_str, adding a todo * fix: removing a TODO --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: James Hodgkinson <james@terminaloutcomes.com>
129 lines
4.3 KiB
Rust
129 lines
4.3 KiB
Rust
use std::str::FromStr;
|
|
|
|
use kanidm_proto::constants::uri::{
|
|
OAUTH2_AUTHORISE, OAUTH2_AUTHORISE_DEVICE, OAUTH2_TOKEN_ENDPOINT,
|
|
};
|
|
use oauth2::basic::BasicClient;
|
|
|
|
use oauth2::http::StatusCode;
|
|
use oauth2::{
|
|
AuthUrl, ClientId, DeviceAuthorizationUrl, HttpRequest, HttpResponse, Scope,
|
|
StandardDeviceAuthorizationResponse, TokenUrl,
|
|
};
|
|
use reqwest::Client;
|
|
use sketching::tracing_subscriber::layer::SubscriberExt;
|
|
use sketching::tracing_subscriber::util::SubscriberInitExt;
|
|
use sketching::tracing_subscriber::{fmt, EnvFilter};
|
|
use tracing::level_filters::LevelFilter;
|
|
use tracing::{debug, error, info};
|
|
|
|
async fn http_client(request: HttpRequest) -> Result<HttpResponse, oauth2::reqwest::Error> {
|
|
let client = Client::builder()
|
|
.danger_accept_invalid_certs(true)
|
|
// Following redirects opens the client up to SSRF vulnerabilities.
|
|
.redirect(reqwest::redirect::Policy::none())
|
|
.build()?;
|
|
|
|
let method = reqwest::Method::from_str(request.method().as_str())
|
|
.expect("this is definitely a bug but OK in an example!");
|
|
|
|
let mut request_builder = client
|
|
.request(method, request.uri().to_string())
|
|
.body(request.body().to_vec());
|
|
|
|
for (name, value) in request.headers().iter() {
|
|
request_builder = request_builder.header(name.as_str(), value.as_bytes());
|
|
}
|
|
|
|
let response = client
|
|
.execute(request_builder.build()?)
|
|
.await
|
|
.inspect_err(|err| {
|
|
error!("Failed to query url {} error={:?}", request.uri(), err);
|
|
})?;
|
|
|
|
let status_code =
|
|
StatusCode::from_u16(response.status().as_u16()).expect("This'll work, for an example");
|
|
let headers: Vec<(oauth2::http::HeaderName, oauth2::http::HeaderValue)> = response
|
|
.headers()
|
|
.into_iter()
|
|
.map(|(k, v)| {
|
|
debug!("header key={:?} value={:?}", k, v);
|
|
(
|
|
oauth2::http::HeaderName::from_str(k.as_str()).expect("Failed to parse header"),
|
|
oauth2::http::HeaderValue::from_str(
|
|
v.to_str().expect("Failed to parse header value"),
|
|
)
|
|
.expect("Failed to parse header value"),
|
|
)
|
|
})
|
|
.collect();
|
|
|
|
let body = response.bytes().await?;
|
|
info!("Response body: {:?}", String::from_utf8(body.to_vec()));
|
|
|
|
let mut response = HttpResponse::new(body.to_vec());
|
|
|
|
let headers_mut = response.headers_mut();
|
|
headers_mut.extend(headers);
|
|
|
|
*response.status_mut() = status_code;
|
|
|
|
Ok(response)
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let fmt_layer = fmt::layer().with_writer(std::io::stderr);
|
|
|
|
let filter_layer = EnvFilter::builder()
|
|
.with_default_directive(LevelFilter::INFO.into())
|
|
.parse_lossy("info,kanidm_client=warn,kanidm_cli=info");
|
|
|
|
sketching::tracing_subscriber::registry()
|
|
.with(filter_layer)
|
|
.with(fmt_layer)
|
|
.init();
|
|
|
|
info!("building client...");
|
|
|
|
// kanidm system oauth2 create-public device_flow device_flow 'https://deviceauth'
|
|
let client = BasicClient::new(ClientId::new("device_code".to_string()))
|
|
.set_token_uri(TokenUrl::from_url(
|
|
format!("https://localhost:8443{}", OAUTH2_TOKEN_ENDPOINT).parse()?,
|
|
))
|
|
.set_auth_uri(AuthUrl::from_url(
|
|
format!("https://localhost:8443{}", OAUTH2_AUTHORISE).parse()?,
|
|
))
|
|
.set_device_authorization_url(DeviceAuthorizationUrl::new(format!(
|
|
"https://localhost:8443{}",
|
|
OAUTH2_AUTHORISE_DEVICE
|
|
))?);
|
|
|
|
info!("Getting details...");
|
|
|
|
let details: StandardDeviceAuthorizationResponse = client
|
|
.exchange_device_code()
|
|
// .inspect_err(|err| error!("configuration error: {:?}", err))?
|
|
.add_scope(Scope::new("read".to_string()))
|
|
.request_async(&http_client)
|
|
.await?;
|
|
|
|
println!(
|
|
"Open this URL in your browser: {}",
|
|
match details.verification_uri_complete() {
|
|
Some(uri) => uri.secret().as_str(),
|
|
None => details.verification_uri().as_str(),
|
|
}
|
|
);
|
|
|
|
println!("the code is {}", details.user_code().secret());
|
|
|
|
let token_result = client
|
|
.exchange_device_access_token(&details)
|
|
.request_async(&http_client, tokio::time::sleep, None)
|
|
.await?;
|
|
println!("Result: {:?}", token_result);
|
|
Ok(())
|
|
}
|