fixed infinite redirect (#257)

This commit is contained in:
Eugene Pankov 2022-08-15 09:19:51 +02:00
parent d292cca03e
commit 52edf524ae
No known key found for this signature in database
GPG key ID: 5896FCBBDD1CF4F4
2 changed files with 18 additions and 14 deletions

22
Cargo.lock generated
View file

@ -4573,7 +4573,7 @@ dependencies = [
[[package]]
name = "warpgate"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"ansi_term",
"anyhow",
@ -4607,7 +4607,7 @@ dependencies = [
[[package]]
name = "warpgate-admin"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"anyhow",
"async-trait",
@ -4635,7 +4635,7 @@ dependencies = [
[[package]]
name = "warpgate-common"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"anyhow",
"argon2",
@ -4675,7 +4675,7 @@ dependencies = [
[[package]]
name = "warpgate-database-protocols"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"bitflags",
"bytes 1.2.1",
@ -4688,7 +4688,7 @@ dependencies = [
[[package]]
name = "warpgate-db-entities"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"chrono",
"poem-openapi",
@ -4700,7 +4700,7 @@ dependencies = [
[[package]]
name = "warpgate-db-migrations"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"async-std",
"chrono",
@ -4711,7 +4711,7 @@ dependencies = [
[[package]]
name = "warpgate-protocol-http"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"anyhow",
"async-trait",
@ -4742,7 +4742,7 @@ dependencies = [
[[package]]
name = "warpgate-protocol-mysql"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"anyhow",
"async-trait",
@ -4768,7 +4768,7 @@ dependencies = [
[[package]]
name = "warpgate-protocol-ssh"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"ansi_term",
"anyhow",
@ -4792,7 +4792,7 @@ dependencies = [
[[package]]
name = "warpgate-sso"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"async-trait",
"bytes 1.2.1",
@ -4808,7 +4808,7 @@ dependencies = [
[[package]]
name = "warpgate-web"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"rust-embed",
"serde",

View file

@ -2,14 +2,14 @@ use std::sync::Arc;
use poem::session::Session;
use poem::web::websocket::WebSocket;
use poem::web::{Data, FromRequest};
use poem::web::{Data, FromRequest, Redirect};
use poem::{handler, Body, IntoResponse, Request, Response};
use serde::Deserialize;
use tokio::sync::Mutex;
use tracing::*;
use warpgate_common::{Services, Target, TargetHTTPOptions, TargetOptions, WarpgateServerHandle};
use crate::common::{gateway_redirect, SessionAuthorization, SessionExt};
use crate::common::{SessionAuthorization, SessionExt};
use crate::proxy::{proxy_normal_request, proxy_websocket_request};
#[derive(Deserialize)]
@ -18,6 +18,10 @@ struct QueryParams {
warpgate_target: Option<String>,
}
pub fn target_select_redirect() -> Response {
Redirect::temporary("/@warpgate").into_response()
}
#[handler]
pub async fn catchall_endpoint(
req: &Request,
@ -28,7 +32,7 @@ pub async fn catchall_endpoint(
server_handle: Option<Data<&Arc<Mutex<WarpgateServerHandle>>>>,
) -> poem::Result<Response> {
let Some((target, options)) = get_target_for_request(req, services.0).await? else {
return Ok(gateway_redirect(req).into_response());
return Ok(target_select_redirect());
};
session.set_target_name(target.name.clone());