- Add a comprehensive .gitignore to manage project files. - Create the basic project structure including Cargo.toml, LICENSE, and README.md. - Add basic project documentation.
73 lines
2.4 KiB
Rust
73 lines
2.4 KiB
Rust
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<impl Responder> {
|
|
// 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::<String>("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::<String>("user") {
|
|
session_data.push(json!({
|
|
"key": "user",
|
|
"value": user,
|
|
}));
|
|
session_keys.push("user".to_string());
|
|
}
|
|
|
|
if let Ok(Some(auth_token)) = session.get::<String>("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::<String>("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))
|
|
}
|
|
}
|