diff --git a/proxy/src/cplane_mock.rs b/proxy/src/cplane_mock.rs new file mode 100644 index 0000000000..cfff3e8f9f --- /dev/null +++ b/proxy/src/cplane_mock.rs @@ -0,0 +1,66 @@ +use anyhow::anyhow; +use hyper::{Body, Request, Response, StatusCode}; +use routerify::RouterBuilder; +use routerify::ext::RequestExt; +use tokio::net::TcpStream; +use std::net::TcpListener; +use zenith_utils::http::endpoint; +use zenith_utils::http::error::ApiError; +use zenith_utils::http::json::json_response; + +use crate::{cplane_api::{DatabaseInfo, ProxyAuthResponse}, mgmt::{PsqlSessionResponse, PsqlSessionResult}}; + +async fn auth_handler(_: Request) -> Result, ApiError> { + Ok(json_response(StatusCode::OK, ProxyAuthResponse::Ready { + conn_info: DatabaseInfo { + host: "127.0.0.1".into(), + port: 5432, + dbname: "postgres".into(), + user: "postgres".into(), + password: Some("postgres".into()), + } + })?) +} + +async fn link_handler(req: Request) -> Result, ApiError> { + let session_id = req.param("sessionId").unwrap().to_string(); + + let payload = PsqlSessionResponse { + session_id, + result: PsqlSessionResult::Success(DatabaseInfo { + host: "127.0.0.1".into(), + port: 5432, + dbname: "postgres".into(), + user: "postgres".into(), + password: Some("postgres".into()), + }) + + }; + let query_text = &serde_json::to_string(&payload).unwrap(); + + let _output = std::process::Command::new("psql") + .args(["-h", "127.0.0.1", + "-p", "7000", + "-c", query_text]) + .output() + .unwrap(); + + Ok(json_response(StatusCode::OK, "")?) +} + +fn make_router() -> RouterBuilder { + let router = endpoint::make_router(); + router + .get("/authenticate_proxy_request", auth_handler) + .get("/psql_session/:sessionId", link_handler) +} + +pub async fn thread_main(http_listener: TcpListener) -> anyhow::Result<()> { + let service = || routerify::RouterService::new(make_router().build()?); + + hyper::Server::from_tcp(http_listener)? + .serve(service().map_err(|e| anyhow!(e))?) + .await?; + + Ok(()) +} diff --git a/proxy/src/main.rs b/proxy/src/main.rs index 84230de65c..caa5b2706f 100644 --- a/proxy/src/main.rs +++ b/proxy/src/main.rs @@ -46,8 +46,7 @@ async fn main() -> anyhow::Result<()> { ) .arg( Arg::new("auth-method") - .short('a') - .long("router") + .long("auth-method") .takes_value(true) .help("Possible values: password | link | mixed") .default_value("mixed"),