feat(web): Removed Cors impl and replaced with tower-http's CorsLayer (#1123)

Fix #1122, see the issue for more details.

Signed-off-by: slinkydeveloper <[email protected]>
This commit is contained in:
Francesco Guardiani
2022-10-31 13:56:36 -04:00
committed by GitHub
parent 40536dc134
commit a98d719fb4
9 changed files with 153 additions and 848 deletions
+3 -5
View File
@@ -11,6 +11,7 @@ use tonic::{Response, Streaming};
use integration::pb::{test_client::TestClient, test_server::TestServer, Input};
use integration::Svc;
use tonic_web::GrpcWebLayer;
#[tokio::test]
async fn smoke_unary() {
@@ -113,13 +114,10 @@ async fn grpc(accept_h1: bool) -> (impl Future<Output = Result<(), Error>>, Stri
async fn grpc_web(accept_h1: bool) -> (impl Future<Output = Result<(), Error>>, String) {
let (listener, url) = bind().await;
let svc = tonic_web::config()
.allow_origins(vec!["http://foo.com"])
.enable(TestServer::new(Svc));
let fut = Server::builder()
.accept_http1(accept_h1)
.add_service(svc)
.layer(GrpcWebLayer::new())
.add_service(TestServer::new(Svc))
.serve_with_incoming(TcpListenerStream::new(listener));
(fut, url)
+6 -19
View File
@@ -10,10 +10,11 @@ use tonic::transport::Server;
use integration::pb::{test_server::TestServer, Input, Output};
use integration::Svc;
use tonic_web::GrpcWebLayer;
#[tokio::test]
async fn binary_request() {
let server_url = spawn("http://example.com").await;
let server_url = spawn().await;
let client = Client::new();
let req = build_request(server_url, "grpc-web", "grpc-web");
@@ -36,7 +37,7 @@ async fn binary_request() {
#[tokio::test]
async fn text_request() {
let server_url = spawn("http://example.com").await;
let server_url = spawn().await;
let client = Client::new();
let req = build_request(server_url, "grpc-web-text", "grpc-web-text");
@@ -57,31 +58,17 @@ async fn text_request() {
assert_eq!(&trailers[..], b"grpc-status:0\r\n");
}
#[tokio::test]
async fn origin_not_allowed() {
let server_url = spawn("http://foo.com").await;
let client = Client::new();
let req = build_request(server_url, "grpc-web-text", "grpc-web-text");
let res = client.request(req).await.unwrap();
assert_eq!(res.status(), StatusCode::FORBIDDEN);
}
async fn spawn(allowed_origin: &str) -> String {
async fn spawn() -> String {
let addr = SocketAddr::from(([127, 0, 0, 1], 0));
let listener = TcpListener::bind(addr).await.expect("listener");
let url = format!("http://{}", listener.local_addr().unwrap());
let listener_stream = TcpListenerStream::new(listener);
let svc = tonic_web::config()
.allow_origins(vec![allowed_origin])
.enable(TestServer::new(Svc));
let _ = tokio::spawn(async move {
Server::builder()
.accept_http1(true)
.add_service(svc)
.layer(GrpcWebLayer::new())
.add_service(TestServer::new(Svc))
.serve_with_incoming(listener_stream)
.await
.unwrap()