mirror of
https://github.com/actix/actix-extras.git
synced 2025-06-26 10:27:42 +02:00
Update dependencies (Tokio 1.0) (#144)
This commit is contained in:
@ -145,7 +145,7 @@ impl Cors {
|
||||
match TryInto::<Uri>::try_into(origin) {
|
||||
Ok(_) if origin == "*" => {
|
||||
error!("Wildcard in `allowed_origin` is not allowed. Use `send_wildcard`.");
|
||||
self.error = Some(Either::B(CorsError::WildcardOrigin));
|
||||
self.error = Some(Either::Right(CorsError::WildcardOrigin));
|
||||
}
|
||||
|
||||
Ok(_) => {
|
||||
@ -162,7 +162,7 @@ impl Cors {
|
||||
}
|
||||
|
||||
Err(err) => {
|
||||
self.error = Some(Either::A(err.into()));
|
||||
self.error = Some(Either::Left(err.into()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -224,7 +224,7 @@ impl Cors {
|
||||
}
|
||||
|
||||
Err(err) => {
|
||||
self.error = Some(Either::A(err.into()));
|
||||
self.error = Some(Either::Left(err.into()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -266,7 +266,7 @@ impl Cors {
|
||||
}
|
||||
}
|
||||
|
||||
Err(err) => self.error = Some(Either::A(err.into())),
|
||||
Err(err) => self.error = Some(Either::Left(err.into())),
|
||||
}
|
||||
}
|
||||
|
||||
@ -303,7 +303,7 @@ impl Cors {
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
self.error = Some(Either::A(err.into()));
|
||||
self.error = Some(Either::Left(err.into()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -351,7 +351,7 @@ impl Cors {
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
self.error = Some(Either::A(err.into()));
|
||||
self.error = Some(Either::Left(err.into()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -483,13 +483,12 @@ impl Default for Cors {
|
||||
}
|
||||
}
|
||||
|
||||
impl<S, B> Transform<S> for Cors
|
||||
impl<S, B> Transform<S, ServiceRequest> for Cors
|
||||
where
|
||||
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S::Future: 'static,
|
||||
B: 'static,
|
||||
{
|
||||
type Request = ServiceRequest;
|
||||
type Response = ServiceResponse<B>;
|
||||
type Error = Error;
|
||||
type InitError = ();
|
||||
@ -499,8 +498,8 @@ where
|
||||
fn new_transform(&self, service: S) -> Self::Future {
|
||||
if let Some(ref err) = self.error {
|
||||
match err {
|
||||
Either::A(err) => error!("{}", err),
|
||||
Either::B(err) => error!("{}", err),
|
||||
Either::Left(err) => error!("{}", err),
|
||||
Either::Right(err) => error!("{}", err),
|
||||
}
|
||||
|
||||
return future::err(());
|
||||
@ -592,15 +591,16 @@ mod test {
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn restrictive_defaults() {
|
||||
let mut cors = Cors::default()
|
||||
let cors = Cors::default()
|
||||
.new_transform(test::ok_service())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let req = TestRequest::with_header("Origin", "https://www.example.com")
|
||||
let req = TestRequest::default()
|
||||
.insert_header(("Origin", "https://www.example.com"))
|
||||
.to_srv_request();
|
||||
|
||||
let resp = test::call_service(&mut cors, req).await;
|
||||
let resp = test::call_service(&cors, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
||||
}
|
||||
|
||||
|
@ -235,8 +235,8 @@ mod test {
|
||||
.unwrap();
|
||||
|
||||
let req = TestRequest::get()
|
||||
.header(header::ORIGIN, "https://www.unknown.com")
|
||||
.header(header::ACCESS_CONTROL_REQUEST_HEADERS, "DNT")
|
||||
.insert_header((header::ORIGIN, "https://www.unknown.com"))
|
||||
.insert_header((header::ACCESS_CONTROL_REQUEST_HEADERS, "DNT"))
|
||||
.to_srv_request();
|
||||
|
||||
assert!(cors.inner.validate_origin(req.head()).is_err());
|
||||
@ -257,34 +257,37 @@ mod test {
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let req = TestRequest::with_header("Origin", "https://www.example.com")
|
||||
let req = TestRequest::default()
|
||||
.method(Method::OPTIONS)
|
||||
.header(header::ACCESS_CONTROL_REQUEST_HEADERS, "X-Not-Allowed")
|
||||
.insert_header(("Origin", "https://www.example.com"))
|
||||
.insert_header((header::ACCESS_CONTROL_REQUEST_HEADERS, "X-Not-Allowed"))
|
||||
.to_srv_request();
|
||||
|
||||
assert!(cors.inner.validate_allowed_method(req.head()).is_err());
|
||||
assert!(cors.inner.validate_allowed_headers(req.head()).is_err());
|
||||
let resp = test::call_service(&mut cors, req).await;
|
||||
let resp = test::call_service(&cors, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
||||
|
||||
let req = TestRequest::with_header("Origin", "https://www.example.com")
|
||||
.header(header::ACCESS_CONTROL_REQUEST_METHOD, "put")
|
||||
let req = TestRequest::default()
|
||||
.method(Method::OPTIONS)
|
||||
.insert_header(("Origin", "https://www.example.com"))
|
||||
.insert_header((header::ACCESS_CONTROL_REQUEST_METHOD, "put"))
|
||||
.to_srv_request();
|
||||
|
||||
assert!(cors.inner.validate_allowed_method(req.head()).is_err());
|
||||
assert!(cors.inner.validate_allowed_headers(req.head()).is_ok());
|
||||
|
||||
let req = TestRequest::with_header("Origin", "https://www.example.com")
|
||||
.header(header::ACCESS_CONTROL_REQUEST_METHOD, "POST")
|
||||
.header(
|
||||
let req = TestRequest::default()
|
||||
.method(Method::OPTIONS)
|
||||
.insert_header(("Origin", "https://www.example.com"))
|
||||
.insert_header((header::ACCESS_CONTROL_REQUEST_METHOD, "POST"))
|
||||
.insert_header((
|
||||
header::ACCESS_CONTROL_REQUEST_HEADERS,
|
||||
"AUTHORIZATION,ACCEPT",
|
||||
)
|
||||
.method(Method::OPTIONS)
|
||||
))
|
||||
.to_srv_request();
|
||||
|
||||
let resp = test::call_service(&mut cors, req).await;
|
||||
let resp = test::call_service(&cors, req).await;
|
||||
assert_eq!(
|
||||
Some(&b"*"[..]),
|
||||
resp.headers()
|
||||
@ -319,16 +322,17 @@ mod test {
|
||||
|
||||
Rc::get_mut(&mut cors.inner).unwrap().preflight = false;
|
||||
|
||||
let req = TestRequest::with_header("Origin", "https://www.example.com")
|
||||
.header(header::ACCESS_CONTROL_REQUEST_METHOD, "POST")
|
||||
.header(
|
||||
let req = TestRequest::default()
|
||||
.method(Method::OPTIONS)
|
||||
.insert_header(("Origin", "https://www.example.com"))
|
||||
.insert_header((header::ACCESS_CONTROL_REQUEST_METHOD, "POST"))
|
||||
.insert_header((
|
||||
header::ACCESS_CONTROL_REQUEST_HEADERS,
|
||||
"AUTHORIZATION,ACCEPT",
|
||||
)
|
||||
.method(Method::OPTIONS)
|
||||
))
|
||||
.to_srv_request();
|
||||
|
||||
let resp = test::call_service(&mut cors, req).await;
|
||||
let resp = test::call_service(&cors, req).await;
|
||||
assert_eq!(resp.status(), StatusCode::OK);
|
||||
}
|
||||
}
|
||||
|
@ -42,34 +42,34 @@ impl<S> CorsMiddleware<S> {
|
||||
let mut res = HttpResponse::Ok();
|
||||
|
||||
if let Some(origin) = inner.access_control_allow_origin(req.head()) {
|
||||
res.header(header::ACCESS_CONTROL_ALLOW_ORIGIN, origin);
|
||||
res.insert_header((header::ACCESS_CONTROL_ALLOW_ORIGIN, origin));
|
||||
}
|
||||
|
||||
if let Some(ref allowed_methods) = inner.allowed_methods_baked {
|
||||
res.header(
|
||||
res.insert_header((
|
||||
header::ACCESS_CONTROL_ALLOW_METHODS,
|
||||
allowed_methods.clone(),
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
if let Some(ref headers) = inner.allowed_headers_baked {
|
||||
res.header(header::ACCESS_CONTROL_ALLOW_HEADERS, headers.clone());
|
||||
res.insert_header((header::ACCESS_CONTROL_ALLOW_HEADERS, headers.clone()));
|
||||
} else if let Some(headers) =
|
||||
req.headers().get(header::ACCESS_CONTROL_REQUEST_HEADERS)
|
||||
{
|
||||
// all headers allowed, return
|
||||
res.header(header::ACCESS_CONTROL_ALLOW_HEADERS, headers.clone());
|
||||
res.insert_header((header::ACCESS_CONTROL_ALLOW_HEADERS, headers.clone()));
|
||||
}
|
||||
|
||||
if inner.supports_credentials {
|
||||
res.header(
|
||||
res.insert_header((
|
||||
header::ACCESS_CONTROL_ALLOW_CREDENTIALS,
|
||||
HeaderValue::from_static("true"),
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
if let Some(max_age) = inner.max_age {
|
||||
res.header(header::ACCESS_CONTROL_MAX_AGE, max_age.to_string());
|
||||
res.insert_header((header::ACCESS_CONTROL_MAX_AGE, max_age.to_string()));
|
||||
}
|
||||
|
||||
let res = res.finish();
|
||||
@ -121,22 +121,21 @@ type CorsMiddlewareServiceFuture<B> = Either<
|
||||
LocalBoxFuture<'static, Result<ServiceResponse<B>, Error>>,
|
||||
>;
|
||||
|
||||
impl<S, B> Service for CorsMiddleware<S>
|
||||
impl<S, B> Service<ServiceRequest> for CorsMiddleware<S>
|
||||
where
|
||||
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S::Future: 'static,
|
||||
B: 'static,
|
||||
{
|
||||
type Request = ServiceRequest;
|
||||
type Response = ServiceResponse<B>;
|
||||
type Error = Error;
|
||||
type Future = CorsMiddlewareServiceFuture<B>;
|
||||
|
||||
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
fn poll_ready(&self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
|
||||
self.service.poll_ready(cx)
|
||||
}
|
||||
|
||||
fn call(&mut self, req: ServiceRequest) -> Self::Future {
|
||||
fn call(&self, req: ServiceRequest) -> Self::Future {
|
||||
if self.inner.preflight && req.method() == Method::OPTIONS {
|
||||
let inner = Rc::clone(&self.inner);
|
||||
let res = Self::handle_preflight(&inner, req);
|
||||
@ -187,7 +186,7 @@ mod tests {
|
||||
// Tests case where allowed_origins is All but there are validate functions to run incase.
|
||||
// In this case, origins are only allowed when the DNT header is sent.
|
||||
|
||||
let mut cors = Cors::default()
|
||||
let cors = Cors::default()
|
||||
.allow_any_origin()
|
||||
.allowed_origin_fn(|origin, req_head| {
|
||||
assert_eq!(&origin, req_head.headers.get(header::ORIGIN).unwrap());
|
||||
@ -199,7 +198,7 @@ mod tests {
|
||||
.unwrap();
|
||||
|
||||
let req = TestRequest::get()
|
||||
.header(header::ORIGIN, "http://example.com")
|
||||
.insert_header((header::ORIGIN, "http://example.com"))
|
||||
.to_srv_request();
|
||||
let res = cors.call(req).await.unwrap();
|
||||
assert_eq!(
|
||||
@ -210,8 +209,8 @@ mod tests {
|
||||
);
|
||||
|
||||
let req = TestRequest::get()
|
||||
.header(header::ORIGIN, "http://example.com")
|
||||
.header(header::DNT, "1")
|
||||
.insert_header((header::ORIGIN, "http://example.com"))
|
||||
.insert_header((header::DNT, "1"))
|
||||
.to_srv_request();
|
||||
let res = cors.call(req).await.unwrap();
|
||||
assert_eq!(
|
||||
|
Reference in New Issue
Block a user