use actix_web::{HttpRequest, HttpResponse, Responder, Result}; use actix_session::Session; use serde_json::json; /// Controller for debugging pub struct DebugController; impl DebugController { /// Display debug information pub async fn debug_info(req: HttpRequest, session: Session) -> Result { // Collect cookies let mut cookies = Vec::new(); if let Ok(cookie_iter) = req.cookies() { for cookie in cookie_iter.iter() { cookies.push(json!({ "name": cookie.name(), "value": cookie.value(), "http_only": cookie.http_only(), "secure": cookie.secure(), "same_site": format!("{:?}", cookie.same_site()), "path": cookie.path(), })); } } // Collect session data let mut session_data = Vec::new(); // Get session keys let mut session_keys = Vec::new(); if let Ok(Some(csrf_token)) = session.get::("oauth_csrf_token") { session_data.push(json!({ "key": "oauth_csrf_token", "value": csrf_token, })); session_keys.push("oauth_csrf_token".to_string()); } if let Ok(Some(user)) = session.get::("user") { session_data.push(json!({ "key": "user", "value": user, })); session_keys.push("user".to_string()); } if let Ok(Some(auth_token)) = session.get::("auth_token") { session_data.push(json!({ "key": "auth_token", "value": auth_token, })); session_keys.push("auth_token".to_string()); } // Add session keys to response session_data.push(json!({ "key": "_session_keys", "value": session_keys.join(", "), })); // Create response let response = json!({ "cookies": cookies, "session": session_data, "csrf_token_session": session.get::("oauth_csrf_token").unwrap_or(None), "csrf_token_cookie": req.cookie("oauth_csrf_token").map(|c| c.value().to_string()), "csrf_token_debug_cookie": req.cookie("oauth_csrf_token_debug").map(|c| c.value().to_string()), }); Ok(HttpResponse::Ok().json(response)) } }