115 lines
3.0 KiB
Rust
115 lines
3.0 KiB
Rust
use axum::serve;
|
|
use axum::Extension;
|
|
use axum::extract::{ws::{Message, WebSocket, WebSocketUpgrade}, State};
|
|
|
|
use jsonwebtoken::{DecodingKey, EncodingKey};
|
|
use reqwest::header::AUTHORIZATION;
|
|
use reqwest::header::CONTENT_TYPE;
|
|
use tokio::net::TcpListener;
|
|
use tokio::sync::mpsc;
|
|
|
|
use reqwest::Client;
|
|
|
|
mod utils;
|
|
mod routes;
|
|
mod rooms;
|
|
mod chat;
|
|
mod inventory;
|
|
use r2d2::{Pool};
|
|
use r2d2_sqlite::SqliteConnectionManager;
|
|
use dashmap::DashMap;
|
|
use std::sync::Arc;
|
|
|
|
use crate::utils::db_pool::{HotelPool,AppState};
|
|
use routes::create_router;
|
|
use crate::utils::auth::JwtKeys;
|
|
|
|
use std::env;
|
|
use dotenvy::dotenv;
|
|
//use tower_http::cors::Origin;
|
|
use tower_http::cors::{CorsLayer, Any,};
|
|
use axum::http::{Method, HeaderValue};
|
|
|
|
pub async fn notify_discord(msg: &str) -> Result<(), reqwest::Error> {
|
|
let payload = serde_json::json!({
|
|
"content": msg
|
|
});
|
|
|
|
reqwest::Client::new()
|
|
.post("https://discord.com/api/webhooks/1440912618205347891/Ekg89krDoPm41kA27LA3gXgNWmMWvCCtziYIUsjqaY22Jnw4a6IWhZOht0in5JjnPX-W")
|
|
.json(&payload)
|
|
.send()
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
|
|
#[tokio::main(flavor = "multi_thread", worker_threads = 8)]
|
|
async fn main() -> std::io::Result<()> {
|
|
|
|
dotenv().ok();
|
|
|
|
std::panic::set_hook(Box::new(|info| {
|
|
let msg = format!("Rust panic: {}", info);
|
|
|
|
// Use blocking client so the process can't exit before sending
|
|
let payload = serde_json::json!({
|
|
"content": msg
|
|
});
|
|
|
|
let client = reqwest::blocking::Client::new();
|
|
let _ = client
|
|
.post("https://discord.com/api/webhooks/1440912618205347891/Ekg89krDoPm41kA27LA3gXgNWmMWvCCtziYIUsjqaY22Jnw4a6IWhZOht0in5JjnPX-W")
|
|
.json(&payload)
|
|
.send();
|
|
}));
|
|
|
|
//panic!("crash-test");
|
|
|
|
let hotel_pools = HotelPool::new();
|
|
let logs_manager = SqliteConnectionManager::file("db/auth_copy_2.sqlite");
|
|
let logs_pool = Pool::builder()
|
|
.max_size(5)
|
|
.build(logs_manager)
|
|
.expect("Failed to build logs pool");
|
|
|
|
let state = AppState {
|
|
hotel_pools,
|
|
logs_pool,
|
|
ws_map: Arc::new(DashMap::new()),
|
|
//jwt_secret: "your_jwt_secret_key s".to_string(), // better: load from env var
|
|
};
|
|
|
|
//let jwt_secret = "your_jwt_secret_key".to_string();
|
|
|
|
let jwt_secret = env::var("JWT_SECRET")
|
|
.expect("JWT_SECRET must be set")
|
|
.to_string();
|
|
|
|
let jwt_keys = JwtKeys {
|
|
encoding: EncodingKey::from_secret(jwt_secret.as_ref()),
|
|
decoding: DecodingKey::from_secret(jwt_secret.as_ref()),
|
|
};
|
|
|
|
let allowed_origins = vec![
|
|
"http://82.66.253.209",
|
|
"http://localhost:5173",
|
|
];
|
|
|
|
let cors = CorsLayer::very_permissive()
|
|
.allow_credentials(true)
|
|
.allow_methods([Method::GET, Method::POST, Method::PUT, Method::OPTIONS])
|
|
.allow_headers([CONTENT_TYPE, AUTHORIZATION]);
|
|
let app = create_router(state)
|
|
.layer(Extension(jwt_keys))
|
|
.layer(cors);
|
|
|
|
let listener = TcpListener::bind("0.0.0.0:7080").await?;
|
|
serve(listener, app).into_future().await?;
|
|
Ok(())
|
|
}
|
|
|
|
async fn handler() -> &'static str {
|
|
"Hiii from localhost"
|
|
} |