summaryrefslogtreecommitdiff
path: root/test_util/src
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2021-02-16 13:50:27 +1100
committerGitHub <noreply@github.com>2021-02-16 13:50:27 +1100
commit879897ada6247e1bb19905b12e5d2fd99965089e (patch)
tree6ca174ec6b6408cfd21746ca1703d188782c4094 /test_util/src
parentccd6ee5c2394418c078f1a1be9e5cc1012829cbc (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.rs36
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,