fix: allow player data to be fetched without botguard

This commit is contained in:
ThetaDev 2025-02-05 13:36:32 +01:00
parent 3849982dab
commit f152a853b8
2 changed files with 21 additions and 20 deletions

View file

@ -2057,15 +2057,12 @@ impl RustyPipeQuery {
} }
/// Get PO tokens /// Get PO tokens
async fn get_po_tokens(&self, idents: &[&str]) -> Result<Vec<String>, Error> { async fn get_po_tokens(&self, idents: &[&str]) -> Result<Option<Vec<String>>, Error> {
let bg = self let bg = match self.client.inner.botguard.as_ref() {
.client Some(bg) => bg,
.inner None => return Ok(None),
.botguard };
.as_ref() let start = std::time::Instant::now();
.ok_or(Error::Extraction(ExtractionError::Botguard(
"not enabled".into(),
)))?;
let cmd = tokio::process::Command::new(&bg.program) let cmd = tokio::process::Command::new(&bg.program)
.arg("--snapshot-file") .arg("--snapshot-file")
.arg(&bg.snapshot_file) .arg(&bg.snapshot_file)
@ -2092,14 +2089,17 @@ impl RustyPipeQuery {
"too few tokens returned".into(), "too few tokens returned".into(),
))); )));
} }
tracing::debug!("generated PO token"); tracing::debug!("generated PO token (took {:?})", start.elapsed());
Ok(tokens) Ok(Some(tokens))
} }
/// Get a PO token /// Get a PO token
pub async fn get_po_token<S: AsRef<str>>(self, ident: S) -> Result<String, Error> { pub async fn get_po_token<S: AsRef<str>>(self, ident: S) -> Result<String, Error> {
self.get_po_tokens(&[ident.as_ref()]) self.get_po_tokens(&[ident.as_ref()])
.await .await?
.ok_or(Error::Extraction(ExtractionError::Botguard(
"not enabled".into(),
)))
.map(|res| res.into_iter().next().unwrap()) .map(|res| res.into_iter().next().unwrap())
} }

View file

@ -128,13 +128,13 @@ impl RustyPipeQuery {
} }
Err(e) => return Err(e), Err(e) => return Err(e),
} }
last_e = Some(Error::Extraction(e));
} else { } else {
return Err(Error::Extraction(e)); return Err(Error::Extraction(e));
} }
} else if !e.switch_client() { } else if !e.switch_client() {
return Err(Error::Extraction(e)); return Err(Error::Extraction(e));
} }
last_e = Some(Error::Extraction(e));
} }
Err(e) => return Err(e), Err(e) => return Err(e),
} }
@ -163,14 +163,15 @@ impl RustyPipeQuery {
}, },
async { async {
if client_type.needs_po_token() { if client_type.needs_po_token() {
let mut po_tokens = self if let Some(po_tokens) = self.get_po_tokens(&[video_id, &visitor_data]).await? {
.get_po_tokens(&[video_id, &visitor_data]) let mut po_tokens = po_tokens.into_iter();
.await? let po_token = po_tokens.next().unwrap();
.into_iter(); let session_po_token = po_tokens.next().unwrap();
let po_token = po_tokens.next().unwrap();
let session_po_token = po_tokens.next().unwrap();
Ok((Some(ServiceIntegrity { po_token }), Some(session_po_token))) Ok((Some(ServiceIntegrity { po_token }), Some(session_po_token)))
} else {
Ok((None, None))
}
} else { } else {
Ok((None, None)) Ok((None, None))
} }