| 123 | |
| 124 | #[actix_web::main] |
| 125 | async fn main() -> io::Result<()> { |
| 126 | env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); |
| 127 | |
| 128 | let args = CliArguments::parse(); |
| 129 | |
| 130 | let forward_socket_addr = (args.forward_addr, args.forward_port) |
| 131 | .to_socket_addrs()? |
| 132 | .next() |
| 133 | .expect("given forwarding address was not valid"); |
| 134 | |
| 135 | let forward_url = format!("http://{forward_socket_addr}"); |
| 136 | let forward_url = Url::parse(&forward_url).unwrap(); |
| 137 | |
| 138 | log::info!( |
| 139 | "starting HTTP server at http://{}:{}", |
| 140 | args.listen_addr, |
| 141 | args.listen_port |
| 142 | ); |
| 143 | |
| 144 | log::info!("forwarding to {forward_url}"); |
| 145 | |
| 146 | let reqwest_client = reqwest::Client::default(); |
| 147 | |
| 148 | HttpServer::new(move || { |
| 149 | App::new() |
| 150 | .app_data(web::Data::new(Client::default())) |
| 151 | .app_data(web::Data::new(reqwest_client.clone())) |
| 152 | .app_data(web::Data::new(forward_url.clone())) |
| 153 | .wrap(middleware::Logger::default()) |
| 154 | .service(web::scope(REQWEST_PREFIX).default_service(web::to(forward_reqwest))) |
| 155 | .default_service(web::to(forward)) |
| 156 | }) |
| 157 | .bind((args.listen_addr, args.listen_port))? |
| 158 | .workers(2) |
| 159 | .run() |
| 160 | .await |
| 161 | } |