base cors, frontend build script, vite static names for css and js

This commit is contained in:
L-Nafaryus 2024-03-15 01:26:18 +05:00
parent a95948fc1b
commit 778ea677a8
Signed by: L-Nafaryus
GPG Key ID: 582F8B0866B294A1
8 changed files with 109 additions and 25 deletions

65
Cargo.lock generated
View File

@ -200,9 +200,9 @@ dependencies = [
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.15.3" version = "3.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
@ -218,9 +218,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.89" version = "1.0.90"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0ba8f7aaa012f30d5b2861462f6708eccd49c3c39863fe083a308035f63d723" checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@ -406,12 +406,14 @@ dependencies = [
"diesel", "diesel",
"diesel_migrations", "diesel_migrations",
"dotenvy", "dotenvy",
"frontend",
"jsonwebtoken", "jsonwebtoken",
"rand_core", "rand_core",
"serde", "serde",
"serde_json", "serde_json",
"time", "time",
"tokio", "tokio",
"tower-http",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
"uuid", "uuid",
@ -438,6 +440,13 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "frontend"
version = "0.1.0"
dependencies = [
"npm_rs",
]
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.30" version = "0.3.30"
@ -560,12 +569,12 @@ dependencies = [
[[package]] [[package]]
name = "http-body-util" name = "http-body-util"
version = "0.1.0" version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-util", "futures-core",
"http", "http",
"http-body", "http-body",
"pin-project-lite", "pin-project-lite",
@ -768,6 +777,15 @@ dependencies = [
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]
[[package]]
name = "npm_rs"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1454347ca3c562570eff8af4a09445783dc4b7ccd00853390a7f88f76037b55"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "nu-ansi-term" name = "nu-ansi-term"
version = "0.46.0" version = "0.46.0"
@ -920,9 +938,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.78" version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -1055,9 +1073,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_path_to_error" name = "serde_path_to_error"
version = "0.1.15" version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
dependencies = [ dependencies = [
"itoa", "itoa",
"serde", "serde",
@ -1161,18 +1179,18 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.57" version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.57" version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1312,6 +1330,23 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "tower-http"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
dependencies = [
"bitflags",
"bytes",
"http",
"http-body",
"http-body-util",
"pin-project-lite",
"tower-layer",
"tower-service",
"tracing",
]
[[package]] [[package]]
name = "tower-layer" name = "tower-layer"
version = "0.3.2" version = "0.3.2"

View File

@ -5,7 +5,7 @@ edition = "2021"
authors = ["L-Nafaryus <l.nafaryus@elnafo.ru"] authors = ["L-Nafaryus <l.nafaryus@elnafo.ru"]
[dependencies] [dependencies]
axum = "0.7.4" axum = { version = "0.7.4", features = [] }
tokio = { version = "1.36.0", default-features = false, features = [ tokio = { version = "1.36.0", default-features = false, features = [
"macros", "macros",
"fs", "fs",
@ -31,3 +31,9 @@ rand_core = { version = "0.6.4", features = ["std"] }
chrono = { version = "0.4.35", features = ["serde"] } chrono = { version = "0.4.35", features = ["serde"] }
jsonwebtoken = "9.2.0" jsonwebtoken = "9.2.0"
axum-extra = { version = "0.9.2", features = ["cookie"] } axum-extra = { version = "0.9.2", features = ["cookie"] }
tower-http = { version = "0.5.2", features = ["trace", "cors"] }
frontend = { version = "0.1.0", path = "crates/frontend" }
[workspace]
members = ["crates/frontend"]
resolver = "2"

View File

@ -0,0 +1,7 @@
[package]
name = "frontend"
version = "0.1.0"
edition = "2021"
[build-dependencies]
npm_rs = "1.0.0"

11
crates/frontend/build.rs Normal file
View File

@ -0,0 +1,11 @@
use npm_rs::*;
fn main() {
let exit_status = NpmEnv::default()
.with_node_env(&NodeEnv::from_cargo_profile().unwrap_or_default())
.with_env("FOO", "bar")
.init_env()
.install(None)
.run("build")
.exec();
}

View File

View File

@ -12,15 +12,15 @@ export default defineConfig({
vue(), vue(),
vueJsx(), vueJsx(),
], ],
/*root: './src', //root: './src',
build: { build: {
outDir: "dist",
rollupOptions: { rollupOptions: {
input: { output: {
app: './src/index.html' entryFileNames: 'assets/[name].js',
assetFileNames: 'assets/[name].css'
} }
} }
},*/ },
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) '@': fileURLToPath(new URL('./src', import.meta.url))

View File

@ -64,6 +64,7 @@
pkgs.diesel-cli pkgs.diesel-cli
pkgs.cargo-watch pkgs.cargo-watch
pkgs.mold-wrapped pkgs.mold-wrapped
pkgs.nodejs
]; ];
shellHook = '' shellHook = ''

View File

@ -6,7 +6,10 @@ pub mod state;
use axum::{ use axum::{
extract::State, extract::State,
http::StatusCode, http::{
header::{ACCEPT, AUTHORIZATION, ORIGIN},
HeaderValue, Method, StatusCode,
},
middleware, middleware,
response::Json, response::Json,
routing::{get, post}, routing::{get, post},
@ -16,6 +19,11 @@ use diesel::RunQueryDsl;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::Arc; use std::sync::Arc;
use std::{env, net::Ipv4Addr}; use std::{env, net::Ipv4Addr};
use tower_http::{
cors::{Any, CorsLayer},
trace::{self, TraceLayer},
};
use tracing::Level;
use crate::config::Config; use crate::config::Config;
use crate::db::{create_user, models::User}; use crate::db::{create_user, models::User};
@ -24,7 +32,11 @@ use crate::state::AppState;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
init_tracing(); //init_tracing();
tracing_subscriber::fmt()
.with_target(false)
.compact()
.init();
let config = Config::new(); let config = Config::new();
let database_url = format!( let database_url = format!(
@ -51,11 +63,18 @@ async fn main() {
let lister = tokio::net::TcpListener::bind(&address).await.unwrap(); let lister = tokio::net::TcpListener::bind(&address).await.unwrap();
let cors = CorsLayer::new()
.allow_methods([Method::GET, Method::POST])
.allow_headers(Any) //vec![ORIGIN, AUTHORIZATION, ACCEPT])
.allow_origin(Any);
//.allow_credentials(true); //"http://localhost:5173".parse::<HeaderValue>().unwrap());
let app = Router::new() let app = Router::new()
.route("/api/v1/healthcheck", get(api::v1::healthcheck))
.route("/api/v1/users", get(users))
.route("/api/v1/register_user", post(api::v1::register_user)) .route("/api/v1/register_user", post(api::v1::register_user))
.route("/api/v1/login_user", post(api::v1::login_user)) .route("/api/v1/login_user", post(api::v1::login_user))
.layer(cors)
.route("/api/v1/healthcheck", get(api::v1::healthcheck))
.route("/api/v1/users", get(users))
.route("/api/v1/logout_user", get(api::v1::logout_user)) .route("/api/v1/logout_user", get(api::v1::logout_user))
.route( .route(
"/api/v1/me", "/api/v1/me",
@ -64,6 +83,11 @@ async fn main() {
api::v1::jwt_auth, api::v1::jwt_auth,
)), )),
) )
.layer(
TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
)
.with_state(state); .with_state(state);
println!("listening on http://{}", address); println!("listening on http://{}", address);