From 2522bc0147be080456d00e5e984864f7fb13b9ca Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Tue, 6 Apr 2021 12:08:13 +0100 Subject: [PATCH] remove cookie method from httpmessage trait --- Cargo.toml | 1 + actix-http/Cargo.toml | 2 +- actix-http/src/http_message.rs | 13 ------------- actix-http/src/lib.rs | 4 +--- actix-http/src/request.rs | 15 +++++++++++++++ awc/Cargo.toml | 1 + awc/src/lib.rs | 7 +++---- awc/src/request.rs | 2 +- awc/src/response.rs | 15 ++++++++++++++- awc/src/test.rs | 8 +++----- awc/src/ws.rs | 4 ++-- awc/tests/test_client.rs | 2 +- src/lib.rs | 4 ++-- src/request.rs | 14 ++++++++++++++ src/test.rs | 4 +--- 15 files changed, 60 insertions(+), 36 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 52db6c335..7ee100c1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,6 +88,7 @@ actix-http = "3.0.0-beta.5" ahash = "0.7" bytes = "1" +cookie = "0.15" derive_more = "0.99.5" either = "1.5.3" encoding_rs = "0.8" diff --git a/actix-http/Cargo.toml b/actix-http/Cargo.toml index e77d1139c..840304966 100644 --- a/actix-http/Cargo.toml +++ b/actix-http/Cargo.toml @@ -55,7 +55,7 @@ base64 = "0.13" bitflags = "1.2" bytes = "1" bytestring = "1" -cookie = { version = "0.14.1", features = ["percent-encode"], optional = true } +cookie = { version = "0.15", features = ["percent-encode"], optional = true } derive_more = "0.99.5" encoding_rs = "0.8" futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] } diff --git a/actix-http/src/http_message.rs b/actix-http/src/http_message.rs index b1f04e50d..700346f37 100644 --- a/actix-http/src/http_message.rs +++ b/actix-http/src/http_message.rs @@ -126,19 +126,6 @@ pub trait HttpMessage: Sized { &ext.get::().unwrap().0 })) } - - /// Return request cookie. - #[cfg(feature = "cookies")] - fn cookie(&self, name: &str) -> Option> { - if let Ok(cookies) = self.cookies() { - for cookie in cookies.iter() { - if cookie.name() == name { - return Some(cookie.to_owned()); - } - } - } - None - } } impl<'a, T> HttpMessage for &'a mut T diff --git a/actix-http/src/lib.rs b/actix-http/src/lib.rs index 574d4ef68..c94ebbd4a 100644 --- a/actix-http/src/lib.rs +++ b/actix-http/src/lib.rs @@ -6,13 +6,11 @@ //! | `openssl` | TLS support via [OpenSSL]. | //! | `rustls` | TLS support via [rustls]. | //! | `compress` | Payload compression support. (Deflate, Gzip & Brotli) | -//! | `cookies` | Support for cookies backed by the [cookie] crate. | //! | `secure-cookies` | Adds for secure cookies. Enables `cookies` feature. | //! | `trust-dns` | Use [trust-dns] as the client DNS resolver. | //! //! [OpenSSL]: https://crates.io/crates/openssl //! [rustls]: https://crates.io/crates/rustls -//! [cookie]: https://crates.io/crates/cookie //! [trust-dns]: https://crates.io/crates/trust-dns #![deny(rust_2018_idioms, nonstandard_style)] @@ -56,7 +54,7 @@ pub mod test; pub mod ws; #[cfg(feature = "cookies")] -pub use cookie; +use cookie; pub use self::builder::HttpServiceBuilder; pub use self::config::{KeepAlive, ServiceConfig}; diff --git a/actix-http/src/request.rs b/actix-http/src/request.rs index 197ec11c6..fa3e6cff9 100644 --- a/actix-http/src/request.rs +++ b/actix-http/src/request.rs @@ -5,6 +5,7 @@ use std::{ fmt, net, }; +use cookie::Cookie; use http::{header, Method, Uri, Version}; use crate::extensions::Extensions; @@ -168,6 +169,20 @@ impl

Request

{ pub fn peer_addr(&self) -> Option { self.head().peer_addr } + + /// Return request cookie. + #[cfg(feature = "cookies")] + pub fn cookie(&self, name: &str) -> Option> { + if let Ok(cookies) = self.cookies() { + for cookie in cookies.iter() { + if cookie.name() == name { + return Some(cookie.to_owned()); + } + } + } + + None + } } impl

fmt::Debug for Request

{ diff --git a/awc/Cargo.toml b/awc/Cargo.toml index aebf73ef5..c793972dd 100644 --- a/awc/Cargo.toml +++ b/awc/Cargo.toml @@ -54,6 +54,7 @@ actix-rt = { version = "2.1", default-features = false } base64 = "0.13" bytes = "1" +cookie = "0.15" derive_more = "0.99.5" futures-core = { version = "0.3.7", default-features = false } itoa = "0.4" diff --git a/awc/src/lib.rs b/awc/src/lib.rs index f1aecbd37..562d6ee7f 100644 --- a/awc/src/lib.rs +++ b/awc/src/lib.rs @@ -93,12 +93,11 @@ #![doc(html_logo_url = "https://actix.rs/img/logo.png")] #![doc(html_favicon_url = "https://actix.rs/favicon.ico")] -use std::convert::TryFrom; -use std::rc::Rc; -use std::time::Duration; +use std::{convert::TryFrom, rc::Rc, time::Duration}; #[cfg(feature = "cookies")] -pub use actix_http::cookie; +pub use cookie; + pub use actix_http::{client::Connector, http}; use actix_http::{ diff --git a/awc/src/request.rs b/awc/src/request.rs index 6ecb64f81..fe0f6bfc5 100644 --- a/awc/src/request.rs +++ b/awc/src/request.rs @@ -9,13 +9,13 @@ use serde::Serialize; use actix_http::body::Body; #[cfg(feature = "cookies")] -use actix_http::cookie::{Cookie, CookieJar}; use actix_http::http::header::{self, IntoHeaderPair}; use actix_http::http::{ uri, ConnectionType, Error as HttpError, HeaderMap, HeaderValue, Method, Uri, Version, }; use actix_http::{Error, RequestHead}; +use crate::cookie::{Cookie, CookieJar}; use crate::error::{FreezeRequestError, InvalidUrl}; use crate::frozen::FrozenClientRequest; use crate::sender::{PrepForSendingError, RequestSender, SendClientRequest}; diff --git a/awc/src/response.rs b/awc/src/response.rs index 27ba83af7..06468500a 100644 --- a/awc/src/response.rs +++ b/awc/src/response.rs @@ -20,7 +20,7 @@ use futures_core::{ready, Stream}; use serde::de::DeserializeOwned; #[cfg(feature = "cookies")] -use actix_http::{cookie::Cookie, error::CookieParseError}; +use {crate::cookie::Cookie, actix_http::error::CookieParseError}; use crate::error::JsonPayloadError; @@ -180,6 +180,19 @@ impl ClientResponse { self.timeout = ResponseTimeout::Disabled(timeout); self } + + /// Return request cookie. + #[cfg(feature = "cookies")] + pub fn cookie(&self, name: &str) -> Option> { + if let Ok(cookies) = self.cookies() { + for cookie in cookies.iter() { + if cookie.name() == name { + return Some(cookie.to_owned()); + } + } + } + None + } } impl ClientResponse diff --git a/awc/src/test.rs b/awc/src/test.rs index 8e95396b3..4bdefda97 100644 --- a/awc/src/test.rs +++ b/awc/src/test.rs @@ -1,14 +1,12 @@ //! Test helpers for actix http client to use during testing. use actix_http::http::header::IntoHeaderPair; +use actix_http::http::header::{self, HeaderValue}; use actix_http::http::{StatusCode, Version}; -#[cfg(feature = "cookies")] -use actix_http::{ - cookie::{Cookie, CookieJar}, - http::header::{self, HeaderValue}, -}; use actix_http::{h1, Payload, ResponseHead}; use bytes::Bytes; +#[cfg(feature = "cookies")] +use crate::cookie::{Cookie, CookieJar}; use crate::ClientResponse; /// Test `ClientResponse` builder diff --git a/awc/src/ws.rs b/awc/src/ws.rs index 8458d3e31..70d7681f5 100644 --- a/awc/src/ws.rs +++ b/awc/src/ws.rs @@ -31,14 +31,14 @@ use std::net::SocketAddr; use std::{fmt, str}; use actix_codec::Framed; -#[cfg(feature = "cookies")] -use actix_http::cookie::{Cookie, CookieJar}; use actix_http::{ws, Payload, RequestHead}; use actix_rt::time::timeout; use actix_service::Service; pub use actix_http::ws::{CloseCode, CloseReason, Codec, Frame, Message}; +#[cfg(feature = "cookies")] +use crate::cookie::{Cookie, CookieJar}; use crate::connect::{BoxedSocket, ConnectRequest}; use crate::error::{InvalidUrl, SendRequestError, WsClientError}; use crate::http::header::{self, HeaderName, HeaderValue, IntoHeaderValue, AUTHORIZATION}; diff --git a/awc/tests/test_client.rs b/awc/tests/test_client.rs index a393a6415..e2a8fdbff 100644 --- a/awc/tests/test_client.rs +++ b/awc/tests/test_client.rs @@ -24,7 +24,7 @@ use actix_web::{ dev::{AppConfig, BodyEncoding}, http::{header, Cookie}, middleware::Compress, - web, App, Error, HttpMessage, HttpRequest, HttpResponse, + web, App, Error, HttpRequest, HttpResponse, }; use awc::error::{JsonPayloadError, PayloadError, SendRequestError}; diff --git a/src/lib.rs b/src/lib.rs index 1d5d5b83d..57b782ac8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -95,13 +95,13 @@ pub mod test; pub(crate) mod types; pub mod web; -#[cfg(feature = "cookies")] -pub use actix_http::cookie; pub use actix_http::Response as HttpResponse; pub use actix_http::{body, Error, HttpMessage, ResponseError, Result}; #[doc(inline)] pub use actix_rt as rt; pub use actix_web_codegen::*; +#[cfg(feature = "cookies")] +pub use cookie; pub use crate::app::App; pub use crate::extract::FromRequest; diff --git a/src/request.rs b/src/request.rs index f3cbc07b8..1c6d0f45b 100644 --- a/src/request.rs +++ b/src/request.rs @@ -6,6 +6,7 @@ use actix_http::http::{HeaderMap, Method, Uri, Version}; use actix_http::{Error, Extensions, HttpMessage, Message, Payload, RequestHead}; use actix_router::{Path, Url}; use actix_utils::future::{ok, Ready}; +use cookie::Cookie; use smallvec::SmallVec; use crate::app_service::AppInitServiceState; @@ -260,6 +261,19 @@ impl HttpRequest { fn app_state(&self) -> &AppInitServiceState { &*self.inner.app_state } + + /// Return request cookie. + #[cfg(feature = "cookies")] + pub fn cookie(&self, name: &str) -> Option> { + if let Ok(cookies) = self.cookies() { + for cookie in cookies.iter() { + if cookie.name() == name { + return Some(cookie.to_owned()); + } + } + } + None + } } impl HttpMessage for HttpRequest { diff --git a/src/test.rs b/src/test.rs index 37fb96e0e..73d7ad56f 100644 --- a/src/test.rs +++ b/src/test.rs @@ -2,8 +2,6 @@ use std::{net::SocketAddr, rc::Rc}; -#[cfg(feature = "cookies")] -use actix_http::cookie::Cookie; pub use actix_http::test::TestBuffer; use actix_http::{ http::{header::IntoHeaderPair, Method, StatusCode, Uri, Version}, @@ -444,7 +442,7 @@ impl TestRequest { /// Set cookie for this request. #[cfg(feature = "cookies")] - pub fn cookie(mut self, cookie: Cookie<'_>) -> Self { + pub fn cookie(mut self, cookie: crate::cookie::Cookie<'_>) -> Self { self.req.cookie(cookie); self }