diff --git a/Cargo.lock b/Cargo.lock index 6cf7f3a..a45c63a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -183,9 +183,9 @@ dependencies = [ [[package]] name = "actix-files" -version = "0.6.0-beta.15" +version = "0.6.0-beta.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66862400e0b79538bc52926dadd965d01c9320b0477eecedac2d3d6bda5e9b92" +checksum = "0b49f1b48724a52605ba40b67ede24f5a6cbc246817f9278d280d393a28e8b0e" dependencies = [ "actix-http 3.0.0-rc.1", "actix-service 2.0.2", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "actix-multipart" -version = "0.4.0-beta.12" +version = "0.4.0-beta.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8362a002d669c85fea5504737a68b9f2d5538069ddd9ccd7d6d5f3eaa62cc000" +checksum = "c59b1f14a8b2bc14df9be544d173f5390da5b62d531e406fd0f0ce9b825fea5a" dependencies = [ "actix-utils 3.0.0", "actix-web 4.0.0-rc.1", @@ -367,7 +367,7 @@ dependencies = [ "actix-http 2.2.2", "actix-rt 1.1.1", "actix-service 1.0.6", - "actix-session", + "actix-session 0.4.1", "actix-utils 2.0.0", "actix-web 3.3.3", "backoff", @@ -510,6 +510,23 @@ dependencies = [ "time 0.2.27", ] +[[package]] +name = "actix-session" +version = "0.5.0-beta.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8984fa6256873b5075143ef662898ed6699bcd0ca094d8a6e40048c12af8d591" +dependencies = [ + "actix-service 2.0.2", + "actix-utils 3.0.0", + "actix-web 4.0.0-rc.1", + "derive_more", + "futures-util", + "log", + "serde 1.0.136", + "serde_json", + "time 0.3.7", +] + [[package]] name = "actix-testing" version = "1.0.1" @@ -579,7 +596,7 @@ name = "actix-todo" version = "2.0.0" dependencies = [ "actix-files 0.3.0", - "actix-session", + "actix-session 0.4.1", "actix-web 3.3.3", "diesel", "dotenv", @@ -800,6 +817,15 @@ dependencies = [ "generic-array 0.14.5", ] +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array 0.14.5", +] + [[package]] name = "aes" version = "0.6.0" @@ -808,7 +834,19 @@ checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" dependencies = [ "aes-soft", "aesni", - "cipher", + "cipher 0.2.5", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if 1.0.0", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug 0.3.0", ] [[package]] @@ -817,11 +855,25 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", + "aead 0.3.2", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash 0.3.1", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", "subtle", ] @@ -831,7 +883,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" dependencies = [ - "cipher", + "cipher 0.2.5", "opaque-debug 0.3.0", ] @@ -841,7 +893,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" dependencies = [ - "cipher", + "cipher 0.2.5", "opaque-debug 0.3.0", ] @@ -1336,11 +1388,13 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" name = "basics" version = "2.0.0" dependencies = [ - "actix-files 0.3.0", - "actix-session", - "actix-utils 2.0.0", - "actix-web 3.3.3", - "env_logger 0.8.4", + "actix-files 0.6.0-beta.16", + "actix-session 0.5.0-beta.7", + "actix-utils 3.0.0", + "actix-web 4.0.0-rc.1", + "env_logger 0.9.0", + "tokio 1.16.1", + "tokio-stream", ] [[package]] @@ -1622,7 +1676,7 @@ dependencies = [ "num-integer", "num-traits 0.2.14", "serde 1.0.136", - "time 0.1.44", + "time 0.1.43", "winapi 0.3.9", ] @@ -1657,6 +1711,15 @@ dependencies = [ "generic-array 0.14.5", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array 0.14.5", +] + [[package]] name = "clap" version = "2.34.0" @@ -1759,9 +1822,9 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" dependencies = [ - "aes-gcm", + "aes-gcm 0.8.0", "base64 0.13.0", - "hkdf", + "hkdf 0.10.0", "hmac 0.10.1", "percent-encoding", "rand 0.8.4", @@ -1776,7 +1839,14 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" dependencies = [ + "aes-gcm 0.9.4", + "base64 0.13.0", + "hkdf 0.12.2", + "hmac 0.12.0", "percent-encoding", + "rand 0.8.4", + "sha2 0.10.1", + "subtle", "time 0.3.7", "version_check 0.9.4", ] @@ -1795,7 +1865,7 @@ dependencies = [ name = "cookie-session" version = "1.0.0" dependencies = [ - "actix-session", + "actix-session 0.4.1", "actix-web 3.3.3", "env_logger 0.8.4", ] @@ -1968,7 +2038,16 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" dependencies = [ - "cipher", + "cipher 0.2.5", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher 0.3.0", ] [[package]] @@ -2187,6 +2266,7 @@ dependencies = [ "block-buffer 0.10.0", "crypto-common", "generic-array 0.14.5", + "subtle", ] [[package]] @@ -2597,7 +2677,7 @@ checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.10.2+wasi-snapshot-preview1", ] [[package]] @@ -2607,7 +2687,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" dependencies = [ "opaque-debug 0.3.0", - "polyval", + "polyval 0.4.5", +] + +[[package]] +name = "ghash" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +dependencies = [ + "opaque-debug 0.3.0", + "polyval 0.5.3", ] [[package]] @@ -2764,6 +2854,15 @@ dependencies = [ "hmac 0.10.1", ] +[[package]] +name = "hkdf" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "158bc31e00a68e380286904cc598715f861f2b0ccf7aa6fe20c6d0c49ca5d0f6" +dependencies = [ + "hmac 0.12.0", +] + [[package]] name = "hmac" version = "0.9.0" @@ -2794,6 +2893,15 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddca131f3e7f2ce2df364b57949a9d47915cfbd35e46cfee355ccebbf794d6a2" +dependencies = [ + "digest 0.10.1", +] + [[package]] name = "hostname" version = "0.3.1" @@ -3741,7 +3849,7 @@ dependencies = [ "serde_json", "sha1", "sha2 0.8.2", - "time 0.1.44", + "time 0.1.43", "twox-hash", "uuid 0.8.2", ] @@ -4237,6 +4345,18 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "postgres-protocol" version = "0.5.3" @@ -4579,7 +4699,7 @@ dependencies = [ "actix-redis", "actix-rt 1.1.1", "actix-service 1.0.6", - "actix-session", + "actix-session 0.4.1", "actix-web 3.3.3", "env_logger 0.8.4", "rand 0.7.3", @@ -4866,9 +4986,9 @@ checksum = "3e52c148ef37f8c375d49d5a73aa70713125b7f19095948a923f80afdeb22ec2" [[package]] name = "rust_decimal" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0593ce4677e3800ddafb3de917e8397b1348e06e688128ade722d88fbe11ebf" +checksum = "4214023b1223d02a4aad9f0bb9828317634a56530870a2eaf7200a99c0c10f68" dependencies = [ "arrayvec 0.7.2", "num-traits 0.2.14", @@ -4940,7 +5060,7 @@ dependencies = [ name = "rustls-example" version = "1.0.0" dependencies = [ - "actix-files 0.6.0-beta.15", + "actix-files 0.6.0-beta.16", "actix-web 4.0.0-rc.1", "env_logger 0.9.0", "rustls 0.20.2", @@ -5034,9 +5154,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09d3c15d814eda1d6a836f2f2b56a6abc1446c8a34351cb3180d3db92ffe4ce" +checksum = "3fed7948b6c68acbb6e20c334f55ad635dc0f75506963de4464289fbd3b051ac" dependencies = [ "bitflags", "core-foundation", @@ -5047,9 +5167,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e90dd10c41c6bfc633da6e0c659bd25d31e0791e5974ac42970267d59eba87f7" +checksum = "a57321bf8bc2362081b2599912d2961fe899c0efadf1b4b2f8d48b3e253bb96c" dependencies = [ "core-foundation-sys", "libc", @@ -5266,6 +5386,17 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha2" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.1", +] + [[package]] name = "shlex" version = "1.1.0" @@ -5540,7 +5671,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" name = "static_index" version = "2.0.0" dependencies = [ - "actix-files 0.6.0-beta.15", + "actix-files 0.6.0-beta.16", "actix-web 4.0.0-rc.1", "env_logger 0.9.0", ] @@ -5839,12 +5970,11 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "wasi 0.10.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -6670,9 +6800,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" @@ -7100,9 +7230,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4062c749be08d90be727e9c5895371c3a0e49b90ba2b9592dc7afda95cc2b719" +checksum = "7c88870063c39ee00ec285a2f8d6a966e5b6fb2becc4e8dac77ed0d370ed6006" [[package]] name = "zstd" diff --git a/basics/basics/Cargo.toml b/basics/basics/Cargo.toml index 53fdda1..9ff7958 100644 --- a/basics/basics/Cargo.toml +++ b/basics/basics/Cargo.toml @@ -5,8 +5,10 @@ authors = ["Nikolay Kim "] edition = "2018" [dependencies] -actix-web = "3" -actix-files = "0.3" -actix-session = "0.4" -actix-utils = "2" -env_logger = "0.8" +actix-web = "4.0.0-beta.21" +actix-files = "0.6.0-beta.15" +actix-session = "0.5.0-beta.7" +actix-utils = "3" +tokio = "1" +tokio-stream = "0.1" +env_logger = "0.9" diff --git a/basics/basics/src/main.rs b/basics/basics/src/main.rs index aa91b75..ef459d4 100644 --- a/basics/basics/src/main.rs +++ b/basics/basics/src/main.rs @@ -1,12 +1,13 @@ use actix_files as fs; use actix_session::{CookieSession, Session}; -use actix_utils::mpsc; use actix_web::http::{header, Method, StatusCode}; use actix_web::{ - error, get, guard, middleware, web, App, Error, HttpRequest, HttpResponse, + error, get, middleware, web, App, Either, Error, HttpRequest, HttpResponse, HttpServer, Result, }; use std::{env, io}; +use tokio::sync::mpsc; +use tokio_stream::wrappers::UnboundedReceiverStream; /// favicon handler #[get("/favicon")] @@ -27,7 +28,7 @@ async fn welcome(session: Session, req: HttpRequest) -> Result { } // set counter to session - session.set("counter", counter)?; + session.insert("counter", counter)?; // response Ok(HttpResponse::build(StatusCode::OK) @@ -35,31 +36,36 @@ async fn welcome(session: Session, req: HttpRequest) -> Result { .body(include_str!("../static/welcome.html"))) } -/// 404 handler -async fn p404() -> Result { - Ok(fs::NamedFile::open("static/404.html")?.set_status_code(StatusCode::NOT_FOUND)) +async fn default_handler( + request: HttpRequest, +) -> Result> { + match *request.method() { + actix_web::http::Method::GET => { + let file = fs::NamedFile::open("static/404.html")? + .set_status_code(StatusCode::NOT_FOUND); + Ok(Either::Left(file)) + } + _ => Ok(Either::Right(HttpResponse::MethodNotAllowed().finish())), + } } /// response body async fn response_body(path: web::Path) -> HttpResponse { let text = format!("Hello {}!", *path); - let (tx, rx_body) = mpsc::channel(); + let (tx, rx_body) = mpsc::unbounded_channel(); let _ = tx.send(Ok::<_, Error>(web::Bytes::from(text))); - HttpResponse::Ok().streaming(rx_body) + HttpResponse::Ok().streaming(UnboundedReceiverStream::from(rx_body)) } /// handler with path parameters like `/user/{name}/` -async fn with_param( - req: HttpRequest, - web::Path((name,)): web::Path<(String,)>, -) -> HttpResponse { +async fn with_param(req: HttpRequest, path: web::Path<(String,)>) -> HttpResponse { println!("{:?}", req); HttpResponse::Ok() .content_type("text/plain") - .body(format!("Hello {}!", name)) + .body(format!("Hello {}!", path.0)) } #[actix_web::main] @@ -102,21 +108,11 @@ async fn main() -> io::Result<()> { .service(web::resource("/").route(web::get().to(|req: HttpRequest| { println!("{:?}", req); HttpResponse::Found() - .header(header::LOCATION, "static/welcome.html") + .insert_header((header::LOCATION, "static/welcome.html")) .finish() }))) // default - .default_service( - // 404 for GET request - web::resource("") - .route(web::get().to(p404)) - // all requests that are not `GET` - .route( - web::route() - .guard(guard::Not(guard::Get())) - .to(HttpResponse::MethodNotAllowed), - ), - ) + .default_service(web::route().to(default_handler)) }) .bind("127.0.0.1:8080")? .run()