This commit is contained in:
Ruidy 2020-12-30 16:23:33 +01:00
parent 5813dd6ad5
commit 96e2f42cfe
5 changed files with 36 additions and 2 deletions

3
.env
View file

@ -1 +1,2 @@
BASE_URL=127.0.0.1:8000 BASE_URL=127.0.0.1:8000
CLIENT_URL=http://localhost:63342

View file

@ -1 +1,2 @@
BASE_URL=127.0.0.1:8000 BASE_URL=127.0.0.1:8000
CLIENT_URL=localhost:63342

15
Cargo.lock generated
View file

@ -35,6 +35,20 @@ dependencies = [
"trust-dns-resolver", "trust-dns-resolver",
] ]
[[package]]
name = "actix-cors"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f3a3d5493dbc9b8769fe88c030d057ef8d2edc5728e5e26267780e8fc5db0be"
dependencies = [
"actix-web",
"derive_more",
"futures-util",
"log",
"once_cell",
"tinyvec",
]
[[package]] [[package]]
name = "actix-http" name = "actix-http"
version = "2.2.0" version = "2.2.0"
@ -1762,6 +1776,7 @@ checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
name = "web" name = "web"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"actix-cors",
"actix-web", "actix-web",
"dotenv", "dotenv",
"env_logger", "env_logger",

View file

@ -7,6 +7,7 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
actix-cors = "0.5.3"
actix-web = "3" actix-web = "3"
dotenv = "0.15.0" dotenv = "0.15.0"
env_logger = "0.8.2" env_logger = "0.8.2"

View file

@ -1,6 +1,8 @@
use std::env; use std::env;
use std::sync::Mutex; use std::sync::Mutex;
use actix_cors::Cors;
use actix_web::http::header::{AUTHORIZATION, CONTENT_TYPE};
use actix_web::{middleware, web, App, HttpServer}; use actix_web::{middleware, web, App, HttpServer};
use env_logger::Env; use env_logger::Env;
@ -13,6 +15,7 @@ async fn main() -> std::io::Result<()> {
dotenv::dotenv().ok(); dotenv::dotenv().ok();
let addr = env::var("BASE_URL").unwrap(); let addr = env::var("BASE_URL").unwrap();
let client_addr = env::var("CLIENT_URL").ok();
let tasks = web::Data::new(task::TaskList { let tasks = web::Data::new(task::TaskList {
tasks: Mutex::new(vec![ tasks: Mutex::new(vec![
@ -30,8 +33,21 @@ async fn main() -> std::io::Result<()> {
}); });
HttpServer::new(move || { HttpServer::new(move || {
let cors = match &client_addr {
Some(ref origin) => Cors::default()
.allowed_origin(origin)
.allowed_methods(vec!["GET", "POST"])
.allowed_headers(vec![AUTHORIZATION, CONTENT_TYPE])
.max_age(3600),
None => Cors::default()
.allowed_origin("*")
.allowed_methods(vec!["GET", "POST"])
.allowed_headers(vec![AUTHORIZATION, CONTENT_TYPE])
.max_age(3600),
};
App::new() App::new()
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
.wrap(cors)
.app_data(tasks.clone()) .app_data(tasks.clone())
.configure(task::init) .configure(task::init)
}) })