tablo_test/protocol/
impersonation.rs1use super::dom::{attr_value, elements, strip_text};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct ImpersonationBanner {
10 pub user_id: String,
12 pub text: String,
14 pub stop: String,
16}
17
18pub fn impersonation_banner(html: &str) -> Option<ImpersonationBanner> {
20 let (_, attrs, inner) = elements(html, "div")
21 .into_iter()
22 .find(|(_, attrs, _)| attr_value(attrs, "data-impersonating").is_some())?;
23 let stop = elements(&inner, "form")
24 .into_iter()
25 .find_map(|(_, attrs, _)| attr_value(&attrs, "action"))?;
26 Some(ImpersonationBanner {
27 user_id: attr_value(&attrs, "data-impersonating")?,
28 text: strip_text(&inner),
29 stop,
30 })
31}
32
33pub fn impersonate_buttons(html: &str) -> Vec<String> {
35 elements(html, "form")
36 .into_iter()
37 .filter_map(|(_, attrs, _)| attr_value(&attrs, "data-impersonate"))
38 .collect()
39}