Skip to content

Commit

Permalink
remove cookie support from -http (#2065)
Browse files Browse the repository at this point in the history
  • Loading branch information
robjtede committed Apr 9, 2021
1 parent c72d770 commit 44c55dd
Show file tree
Hide file tree
Showing 40 changed files with 1,337 additions and 568 deletions.
4 changes: 4 additions & 0 deletions .cargo/config.toml
@@ -1,3 +1,7 @@
[alias]
chk = "hack check --workspace --all-features --tests --examples"
lint = "hack --clean-per-run clippy --workspace --tests --examples"
ci-min = "hack check --workspace --no-default-features"
ci-min-test = "hack check --workspace --no-default-features --tests --examples"
ci-default = "hack check --workspace"
ci-full = "check --workspace --bins --examples --tests"
3 changes: 3 additions & 0 deletions CHANGES.md
@@ -1,7 +1,10 @@
# Changes

## Unreleased - 2021-xx-xx
### Added
* `HttpResponse` and `HttpResponseBuilder` structs. [#2065]

[#2065]: https://github.com/actix/actix-web/pull/2065

## 4.0.0-beta.5 - 2021-04-02
### Added
Expand Down
46 changes: 23 additions & 23 deletions Cargo.toml
Expand Up @@ -16,11 +16,7 @@ edition = "2018"

[package.metadata.docs.rs]
# features that docs.rs will build with
features = ["openssl", "rustls", "compress", "secure-cookies"]

[badges]
travis-ci = { repository = "actix/actix-web", branch = "master" }
codecov = { repository = "actix/actix-web", branch = "master", service = "github" }
features = ["openssl", "rustls", "compress", "cookies", "secure-cookies"]

[lib]
name = "actix_web"
Expand All @@ -38,6 +34,8 @@ members = [
"actix-http-test",
"actix-test",
]
# enable when MSRV is 1.51+
# resolver = "2"

[features]
default = ["compress", "cookies"]
Expand All @@ -46,33 +44,17 @@ default = ["compress", "cookies"]
compress = ["actix-http/compress"]

# support for cookies
cookies = ["actix-http/cookies"]
cookies = ["cookie"]

# secure cookies feature
secure-cookies = ["actix-http/secure-cookies"]
secure-cookies = ["cookie/secure"]

# openssl
openssl = ["actix-http/openssl", "actix-tls/accept", "actix-tls/openssl"]

# rustls
rustls = ["actix-http/rustls", "actix-tls/accept", "actix-tls/rustls"]

[[example]]
name = "basic"
required-features = ["compress"]

[[example]]
name = "uds"
required-features = ["compress"]

[[test]]
name = "test_server"
required-features = ["compress", "cookies"]

[[example]]
name = "on_connect"
required-features = []

[dependencies]
actix-codec = "0.4.0-beta.1"
actix-macros = "0.2.0"
Expand All @@ -88,11 +70,13 @@ actix-http = "3.0.0-beta.5"

ahash = "0.7"
bytes = "1"
cookie = { version = "0.15", features = ["percent-encode"], optional = true }
derive_more = "0.99.5"
either = "1.5.3"
encoding_rs = "0.8"
futures-core = { version = "0.3.7", default-features = false }
futures-util = { version = "0.3.7", default-features = false }
itoa = "0.4"
language-tags = "0.2"
once_cell = "1.5"
log = "0.4"
Expand Down Expand Up @@ -137,6 +121,22 @@ actix-web-actors = { path = "actix-web-actors" }
actix-web-codegen = { path = "actix-web-codegen" }
awc = { path = "awc" }

[[test]]
name = "test_server"
required-features = ["compress", "cookies"]

[[example]]
name = "basic"
required-features = ["compress"]

[[example]]
name = "uds"
required-features = ["compress"]

[[example]]
name = "on_connect"
required-features = []

[[bench]]
name = "server"
harness = false
Expand Down
6 changes: 3 additions & 3 deletions actix-files/src/error.rs
@@ -1,4 +1,4 @@
use actix_web::{http::StatusCode, HttpResponse, ResponseError};
use actix_web::{http::StatusCode, ResponseError};
use derive_more::Display;

/// Errors which can occur when serving static files.
Expand All @@ -16,8 +16,8 @@ pub enum FilesError {

/// Return `NotFound` for `FilesError`
impl ResponseError for FilesError {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::NOT_FOUND)
fn status_code(&self) -> StatusCode {
StatusCode::NOT_FOUND
}
}

Expand Down
7 changes: 7 additions & 0 deletions actix-http/CHANGES.md
@@ -1,6 +1,13 @@
# Changes

## Unreleased - 2021-xx-xx
### Removed
* `cookies` feature flag. [#2065]
* Top-level `cookies` mod (re-export). [#2065]
* `HttpMessage` trait loses the `cookies` and `cookie` methods. [#2065]
* `impl ResponseError for CookieParseError`. [#2065]

[#2065]: https://github.com/actix/actix-web/pull/2065


## 3.0.0-beta.5 - 2021-04-02
Expand Down
11 changes: 2 additions & 9 deletions actix-http/Cargo.toml
Expand Up @@ -16,7 +16,7 @@ edition = "2018"

[package.metadata.docs.rs]
# features that docs.rs will build with
features = ["openssl", "rustls", "compress", "cookies", "secure-cookies"]
features = ["openssl", "rustls", "compress"]

[lib]
name = "actix_http"
Expand All @@ -34,12 +34,6 @@ rustls = ["actix-tls/rustls"]
# enable compression support
compress = ["flate2", "brotli2"]

# support for cookies
cookies = ["cookie"]

# support for secure cookies
secure-cookies = ["cookies", "cookie/secure"]

# trust-dns as client dns resolver
trust-dns = ["trust-dns-resolver"]

Expand All @@ -55,7 +49,6 @@ base64 = "0.13"
bitflags = "1.2"
bytes = "1"
bytestring = "1"
cookie = { version = "0.14.1", 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"] }
Expand Down Expand Up @@ -95,7 +88,7 @@ actix-tls = { version = "3.0.0-beta.5", features = ["openssl"] }
criterion = "0.3"
env_logger = "0.8"
rcgen = "0.8"
serde_derive = "1.0"
serde = { version = "1.0", features = ["derive"] }
tls-openssl = { version = "0.10", package = "openssl" }
tls-rustls = { version = "0.19", package = "rustls" }

Expand Down
6 changes: 3 additions & 3 deletions actix-http/examples/ws.rs
Expand Up @@ -11,7 +11,7 @@ use std::{
};

use actix_codec::Encoder;
use actix_http::{error::Error, ws, HttpService, Request, Response};
use actix_http::{body::BodyStream, error::Error, ws, HttpService, Request, Response};
use actix_rt::time::{interval, Interval};
use actix_server::Server;
use bytes::{Bytes, BytesMut};
Expand All @@ -34,14 +34,14 @@ async fn main() -> io::Result<()> {
.await
}

async fn handler(req: Request) -> Result<Response, Error> {
async fn handler(req: Request) -> Result<Response<BodyStream<Heartbeat>>, Error> {
log::info!("handshaking");
let mut res = ws::handshake(req.head())?;

// handshake will always fail under HTTP/2

log::info!("responding");
Ok(res.streaming(Heartbeat::new(ws::Codec::new())))
Ok(res.message_body(BodyStream::new(Heartbeat::new(ws::Codec::new()))))
}

struct Heartbeat {
Expand Down
22 changes: 1 addition & 21 deletions actix-http/src/error.rs
Expand Up @@ -14,12 +14,7 @@ use serde::de::value::Error as DeError;
use serde_json::error::Error as JsonError;
use serde_urlencoded::ser::Error as FormError;

use crate::body::Body;
use crate::helpers::Writer;
use crate::response::{Response, ResponseBuilder};

#[cfg(feature = "cookies")]
pub use crate::cookie::ParseError as CookieParseError;
use crate::{body::Body, helpers::Writer, Response, ResponseBuilder};

/// A specialized [`std::result::Result`]
/// for actix web operations
Expand Down Expand Up @@ -378,14 +373,6 @@ impl ResponseError for PayloadError {
}
}

/// Return `BadRequest` for `cookie::ParseError`
#[cfg(feature = "cookies")]
impl ResponseError for crate::cookie::ParseError {
fn status_code(&self) -> StatusCode {
StatusCode::BAD_REQUEST
}
}

#[derive(Debug, Display, From)]
/// A set of errors that can occur during dispatching HTTP requests
pub enum DispatchError {
Expand Down Expand Up @@ -959,13 +946,6 @@ mod tests {
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
}

#[cfg(feature = "cookies")]
#[test]
fn test_cookie_parse() {
let resp: Response = CookieParseError::EmptyName.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
}

#[test]
fn test_as_response() {
let orig = io::Error::new(io::ErrorKind::Other, "other");
Expand Down
2 changes: 1 addition & 1 deletion actix-http/src/h1/dispatcher.rs
Expand Up @@ -346,7 +346,7 @@ where

// send service call error as response
Poll::Ready(Err(err)) => {
let res: Response = err.into().into();
let res = Response::from_error(err.into());
let (res, body) = res.replace_body(());
self.as_mut().send_response(res, body.into_body())?;
}
Expand Down
40 changes: 0 additions & 40 deletions actix-http/src/http_message.rs
Expand Up @@ -9,11 +9,6 @@ use crate::error::{ContentTypeError, ParseError};
use crate::extensions::Extensions;
use crate::header::{Header, HeaderMap};
use crate::payload::Payload;
#[cfg(feature = "cookies")]
use crate::{cookie::Cookie, error::CookieParseError};

#[cfg(feature = "cookies")]
struct Cookies(Vec<Cookie<'static>>);

/// Trait that implements general purpose operations on HTTP messages.
pub trait HttpMessage: Sized {
Expand Down Expand Up @@ -104,41 +99,6 @@ pub trait HttpMessage: Sized {
Ok(false)
}
}

/// Load request cookies.
#[cfg(feature = "cookies")]
fn cookies(&self) -> Result<Ref<'_, Vec<Cookie<'static>>>, CookieParseError> {
if self.extensions().get::<Cookies>().is_none() {
let mut cookies = Vec::new();
for hdr in self.headers().get_all(header::COOKIE) {
let s =
str::from_utf8(hdr.as_bytes()).map_err(CookieParseError::from)?;
for cookie_str in s.split(';').map(|s| s.trim()) {
if !cookie_str.is_empty() {
cookies.push(Cookie::parse_encoded(cookie_str)?.into_owned());
}
}
}
self.extensions_mut().insert(Cookies(cookies));
}

Ok(Ref::map(self.extensions(), |ext| {
&ext.get::<Cookies>().unwrap().0
}))
}

/// Return request cookie.
#[cfg(feature = "cookies")]
fn cookie(&self, name: &str) -> Option<Cookie<'static>> {
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
Expand Down
7 changes: 0 additions & 7 deletions actix-http/src/lib.rs
Expand Up @@ -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)]
Expand Down Expand Up @@ -55,9 +53,6 @@ pub mod h2;
pub mod test;
pub mod ws;

#[cfg(feature = "cookies")]
pub use cookie;

pub use self::builder::HttpServiceBuilder;
pub use self::config::{KeepAlive, ServiceConfig};
pub use self::error::{Error, ResponseError, Result};
Expand All @@ -78,8 +73,6 @@ pub mod http {
pub use http::{uri, Error, Uri};
pub use http::{Method, StatusCode, Version};

#[cfg(feature = "cookies")]
pub use crate::cookie::{Cookie, CookieBuilder};
pub use crate::header::HeaderMap;

/// A collection of HTTP headers and helpers.
Expand Down
4 changes: 2 additions & 2 deletions actix-http/src/message.rs
Expand Up @@ -345,8 +345,8 @@ impl ResponseHead {
}

pub struct Message<T: Head> {
// Rc here should not be cloned by anyone.
// It's used to reuse allocation of T and no shared ownership is allowed.
/// Rc here should not be cloned by anyone.
/// It's used to reuse allocation of T and no shared ownership is allowed.
head: Rc<T>,
}

Expand Down
14 changes: 8 additions & 6 deletions actix-http/src/request.rs
Expand Up @@ -2,16 +2,18 @@

use std::{
cell::{Ref, RefMut},
fmt, net,
fmt, net, str,
};

use http::{header, Method, Uri, Version};

use crate::extensions::Extensions;
use crate::header::HeaderMap;
use crate::message::{Message, RequestHead};
use crate::payload::{Payload, PayloadStream};
use crate::HttpMessage;
use crate::{
extensions::Extensions,
header::HeaderMap,
message::{Message, RequestHead},
payload::{Payload, PayloadStream},
HttpMessage,
};

/// Request
pub struct Request<P = PayloadStream> {
Expand Down

0 comments on commit 44c55dd

Please sign in to comment.