fix: allow player data to be fetched without botguard

This commit is contained in:
ThetaDev 2025-02-05 13:36:32 +01:00
parent eed1e3da3a
commit 29c854b20d
No known key found for this signature in database
GPG key ID: E319D3C5148D65B6
2 changed files with 21 additions and 20 deletions

View file

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

View file

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