From 9d2b6ee10ec5359cc91769d430485c8c869ba1a8 Mon Sep 17 00:00:00 2001 From: Akshay Date: Thu, 24 Dec 2020 10:51:40 +0530 Subject: monorepo --- backend/src/bin/server.rs | 94 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 backend/src/bin/server.rs (limited to 'backend/src/bin') diff --git a/backend/src/bin/server.rs b/backend/src/bin/server.rs new file mode 100644 index 0000000..7c67e4f --- /dev/null +++ b/backend/src/bin/server.rs @@ -0,0 +1,94 @@ +use actix_cors::Cors; +use actix_identity::{CookieIdentityPolicy, IdentityService}; +use actix_web::middleware; +use actix_web::{web, App, HttpServer}; +use diesel::r2d2::{ConnectionManager, Pool}; +use diesel::MysqlConnection; +use furby::handlers::smoke::manual_hello; +use furby::handlers::{cart_items, product, rating, users}; +use rand::Rng; + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + pretty_env_logger::init(); + + let db_url = env!("DATABASE_URL"); + let manager = ConnectionManager::::new(db_url); + let pool = Pool::builder() + .build(manager) + .expect("Failed to create pool."); + + let private_key = rand::thread_rng().gen::<[u8; 32]>(); + HttpServer::new(move || { + App::new() + .wrap(IdentityService::new( + CookieIdentityPolicy::new(&private_key) + .name("user-login") + .domain("127.0.0.1") + .path("/") + .same_site(actix_web::cookie::SameSite::None) + .http_only(true) + .secure(false), + )) + .wrap( + Cors::default() + .allowed_origin("http://127.0.0.1:8000") + .allowed_origin("http://localhost:8000") + .allow_any_method() + .allow_any_header(), + ) + .wrap( + middleware::DefaultHeaders::new() + .header("Access-Control-Allow-Credentials", "true") + .header("Access-Control-Expose-Headers", "set-cookie"), + ) + .wrap(middleware::Logger::default()) + .data(pool.clone()) + .service( + web::scope("/user") + .route("/existing", web::post().to(users::name_exists)) + .route("/login", web::post().to(users::login)) + .route("/{uname}", web::get().to(users::user_details)) + .route("/new", web::post().to(users::new_user)) + .route( + "/change_password", + web::post().to(users::change_password), + ), + ) + .service( + web::scope("/product") + .route("/catalog", web::get().to(product::get_all_products)) + .route("/new", web::post().to(product::new_product)) + .route("/{id}", web::get().to(product::product_details)) + .route( + "/reviews/{id}", + web::get().to(product::get_product_reviews), + ) + .route( + "/update_product/{id}", + web::post().to(product::update_product), + ), + ) + .service( + web::scope("/cart") + .route( + "/items", + web::get().to(cart_items::get_user_cart_items), + ) + .route("/add", web::post().to(cart_items::add_to_cart)) + .route( + "/remove", + web::post().to(cart_items::remove_from_cart), + ), + ) + .service( + web::scope("/rating") + .route("/add", web::post().to(rating::add_rating)) + .route("/remove", web::post().to(rating::remove_rating)), + ) + .route("/hey", web::get().to(manual_hello)) + }) + .bind("127.0.0.1:7878")? + .run() + .await +} -- cgit v1.2.3