slack status without the slack status.zzstoatzz.io/
quickslice

fix(feed): preserve logged-in state on /feed by building Profile from session + handle resolver (regression from refactor)

+24 -5
+24 -5
src/api/status_read.rs
··· 315 315 pub async fn feed( 316 316 session: Session, 317 317 _db_pool: web::Data<Arc<Pool>>, 318 - _handle_resolver: web::Data<HandleResolver>, 318 + handle_resolver: web::Data<HandleResolver>, 319 319 app_config: web::Data<Config>, 320 320 ) -> Result<impl Responder> { 321 - let did = session.get::<String>("did").unwrap_or(None); 322 - let is_admin = did.as_deref().map(is_admin).unwrap_or(false); 321 + let did_opt = session.get::<String>("did").unwrap_or(None); 322 + let is_admin_flag = did_opt.as_deref().map(is_admin).unwrap_or(false); 323 + 324 + let mut profile: Option<crate::templates::Profile> = None; 325 + if let Some(did_str) = did_opt.clone() { 326 + let mut handle_opt: Option<String> = None; 327 + if let Ok(doc) = handle_resolver 328 + .resolve(&atrium_api::types::string::Did::new(did_str.clone()).expect("did")) 329 + .await 330 + { 331 + if let Some(h) = doc.also_known_as.and_then(|aka| aka.first().cloned()) { 332 + handle_opt = Some(h.replace("at://", "")); 333 + } 334 + } 335 + profile = Some(crate::templates::Profile { 336 + did: did_str, 337 + display_name: None, 338 + handle: handle_opt, 339 + }); 340 + } 341 + 323 342 let html = FeedTemplate { 324 343 title: "feed", 325 - profile: None, 344 + profile, 326 345 statuses: vec![], 327 - is_admin, 346 + is_admin: is_admin_flag, 328 347 dev_mode: app_config.dev_mode, 329 348 } 330 349 .render()