Added session id.
This commit is contained in:
		
							
								
								
									
										47
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -1,8 +1,13 @@
 | 
			
		||||
use axum::{response::Html, routing::get, Router};
 | 
			
		||||
use axum::{
 | 
			
		||||
    response::IntoResponse,
 | 
			
		||||
    routing::get,
 | 
			
		||||
    Router,
 | 
			
		||||
};
 | 
			
		||||
use axum_extra::extract::cookie::{CookieJar, Cookie};
 | 
			
		||||
use clap::Parser;
 | 
			
		||||
use dioxus::prelude::*;
 | 
			
		||||
 | 
			
		||||
const LOCALHOST: &str = "127.0.0.1";
 | 
			
		||||
const SESSION_KEY: &str = "sessionid";
 | 
			
		||||
 | 
			
		||||
#[derive(Parser, Debug)]
 | 
			
		||||
#[command(version, about, long_about = None)]
 | 
			
		||||
@@ -15,18 +20,38 @@ struct Args {
 | 
			
		||||
    address: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod http_session {
 | 
			
		||||
    #[tokio::test]
 | 
			
		||||
    async fn my_test() {
 | 
			
		||||
        assert!(true);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() {
 | 
			
		||||
    let args = Args::parse();
 | 
			
		||||
    let url = format!("{}:{}", args.address, args.port);
 | 
			
		||||
    let app = Router::new().route("/", get(|| app_endpoint()));
 | 
			
		||||
    let listener = tokio::net::TcpListener::bind(&url).await.unwrap();
 | 
			
		||||
    axum::serve(listener, app).await.unwrap();
 | 
			
		||||
    let addr = format!("{}:{}", args.address, args.port);
 | 
			
		||||
    let app = Router::new()
 | 
			
		||||
        .route("/", get(handler));
 | 
			
		||||
    let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
 | 
			
		||||
    axum::serve(listener, app.into_make_service())
 | 
			
		||||
        .await
 | 
			
		||||
        .unwrap();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn app_endpoint() -> Html<String> {
 | 
			
		||||
    // render the rsx! macro to HTML
 | 
			
		||||
    Html(dioxus_ssr::render_lazy(rsx! {
 | 
			
		||||
        div { "hello world!" }
 | 
			
		||||
    }))
 | 
			
		||||
async fn handler(jar: CookieJar) -> impl IntoResponse {
 | 
			
		||||
    let cookies: CookieJar;
 | 
			
		||||
    let id: String;
 | 
			
		||||
    match jar.get(SESSION_KEY) {
 | 
			
		||||
        Some(session) => {
 | 
			
		||||
            id = session.to_string();
 | 
			
		||||
            cookies = jar;
 | 
			
		||||
        },
 | 
			
		||||
        None => {
 | 
			
		||||
            id = "Fred".to_string();
 | 
			
		||||
            cookies = jar.add(Cookie::new(SESSION_KEY, id.clone()));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    (cookies, format!("id is {}", id))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user