diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-02-16 13:50:27 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-16 13:50:27 +1100 |
commit | 879897ada6247e1bb19905b12e5d2fd99965089e (patch) | |
tree | 6ca174ec6b6408cfd21746ca1703d188782c4094 /test_util/src | |
parent | ccd6ee5c2394418c078f1a1be9e5cc1012829cbc (diff) |
feat(cli): support auth tokens for accessing private modules (#9508)
Closes #5239
Diffstat (limited to 'test_util/src')
-rw-r--r-- | test_util/src/lib.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test_util/src/lib.rs b/test_util/src/lib.rs index 37b1819d8..a2c0b2396 100644 --- a/test_util/src/lib.rs +++ b/test_util/src/lib.rs @@ -49,11 +49,13 @@ use tokio_rustls::TlsAcceptor; use tokio_tungstenite::accept_async; const PORT: u16 = 4545; +const TEST_AUTH_TOKEN: &str = "abcdef123456789"; const REDIRECT_PORT: u16 = 4546; const ANOTHER_REDIRECT_PORT: u16 = 4547; const DOUBLE_REDIRECTS_PORT: u16 = 4548; const INF_REDIRECTS_PORT: u16 = 4549; const REDIRECT_ABSOLUTE_PORT: u16 = 4550; +const AUTH_REDIRECT_PORT: u16 = 4551; const HTTPS_PORT: u16 = 5545; const WS_PORT: u16 = 4242; const WSS_PORT: u16 = 4243; @@ -201,6 +203,25 @@ async fn another_redirect(req: Request<Body>) -> hyper::Result<Response<Body>> { Ok(redirect_resp(url)) } +async fn auth_redirect(req: Request<Body>) -> hyper::Result<Response<Body>> { + if let Some(auth) = req + .headers() + .get("authorization") + .map(|v| v.to_str().unwrap()) + { + if auth.to_lowercase() == format!("bearer {}", TEST_AUTH_TOKEN) { + let p = req.uri().path(); + assert_eq!(&p[0..1], "/"); + let url = format!("http://localhost:{}{}", PORT, p); + return Ok(redirect_resp(url)); + } + } + + let mut resp = Response::new(Body::empty()); + *resp.status_mut() = StatusCode::NOT_FOUND; + Ok(resp) +} + async fn run_ws_server(addr: &SocketAddr) { let listener = TcpListener::bind(addr).await.unwrap(); while let Ok((stream, _addr)) = listener.accept().await { @@ -666,6 +687,19 @@ async fn wrap_another_redirect_server() { } } +async fn wrap_auth_redirect_server() { + let auth_redirect_svc = make_service_fn(|_| async { + Ok::<_, Infallible>(service_fn(auth_redirect)) + }); + let auth_redirect_addr = + SocketAddr::from(([127, 0, 0, 1], AUTH_REDIRECT_PORT)); + let auth_redirect_server = + Server::bind(&auth_redirect_addr).serve(auth_redirect_svc); + if let Err(e) = auth_redirect_server.await { + eprintln!("Auth redirect error: {:?}", e); + } +} + async fn wrap_abs_redirect_server() { let abs_redirect_svc = make_service_fn(|_| async { Ok::<_, Infallible>(service_fn(absolute_redirect)) @@ -740,6 +774,7 @@ pub async fn run_all_servers() { let double_redirects_server_fut = wrap_double_redirect_server(); let inf_redirects_server_fut = wrap_inf_redirect_server(); let another_redirect_server_fut = wrap_another_redirect_server(); + let auth_redirect_server_fut = wrap_auth_redirect_server(); let abs_redirect_server_fut = wrap_abs_redirect_server(); let ws_addr = SocketAddr::from(([127, 0, 0, 1], WS_PORT)); @@ -756,6 +791,7 @@ pub async fn run_all_servers() { ws_server_fut, wss_server_fut, another_redirect_server_fut, + auth_redirect_server_fut, inf_redirects_server_fut, double_redirects_server_fut, abs_redirect_server_fut, |