Replace decommissioned Tidal client id
Tidal retired the built-in client id (internal cid 3235): device login still issues tokens for it, so browsing kept working, but token refresh returns "Client id 3235 not found" and playbackinfopostpaywall 401s, so no track ever resolves stream urls. This is a Tidal-side retirement, not a regression -- the pre-fable code shipped the identical credentials and fails the same way. Swap in a currently-live client id + secret, verified end to end against a real account: refresh succeeds and playbackinfopostpaywall returns a playable BTS manifest. The XOR "hidden from fulltext search" scheme is kept, but the obfuscated payloads are now explicit byte arrays rather than raw control-character string literals, so the change is reviewable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
9706e3b5d2
commit
f783e8152b
|
|
@ -14,7 +14,8 @@ pub struct Settings {
|
||||||
impl Default for Settings {
|
impl Default for Settings {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let client_id_key = b"abcdefghijklmnop";
|
let client_id_key = b"abcdefghijklmnop";
|
||||||
let hidden_id_from_fulltext_search = "\u{1b}7W<-01\u{3}\nX\u{1f}(=\u{1}[\u{4}".as_bytes();
|
let hidden_id_from_fulltext_search: &[u8] =
|
||||||
|
&[7, 58, 81, 46, 29, 2, 10, 6, 29, 48, 60, 39, 93, 7, 23, 36];
|
||||||
let mut client_id_bytes = Vec::new();
|
let mut client_id_bytes = Vec::new();
|
||||||
for (k, c) in zip(client_id_key, hidden_id_from_fulltext_search) {
|
for (k, c) in zip(client_id_key, hidden_id_from_fulltext_search) {
|
||||||
client_id_bytes.push(*c ^ *k);
|
client_id_bytes.push(*c ^ *k);
|
||||||
|
|
@ -22,7 +23,10 @@ impl Default for Settings {
|
||||||
let client_id = String::from_utf8(client_id_bytes).unwrap();
|
let client_id = String::from_utf8(client_id_bytes).unwrap();
|
||||||
|
|
||||||
let client_secret_key = b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR";
|
let client_secret_key = b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR";
|
||||||
let hidden_secret_from_fulltext_search = "7((\u{c}! \u{16}\"9\u{1b}\u{1d}\u{1f}=8!2'D\u{6}\u{1f}-\"=\u{15}\u{e}\u{16}7 70\u{15}q0$\u{4}&9/z|<5eo".as_bytes();
|
let hidden_secret_from_fulltext_search: &[u8] = &[
|
||||||
|
80, 44, 14, 81, 36, 0, 35, 41, 3, 18, 25, 11, 39, 40, 37, 18, 58, 60, 36, 56, 16, 55,
|
||||||
|
14, 51, 62, 44, 6, 47, 10, 10, 48, 30, 23, 24, 5, 2, 29, 20, 12, 56, 55, 17, 54, 111,
|
||||||
|
];
|
||||||
let mut client_secret_bytes = Vec::new();
|
let mut client_secret_bytes = Vec::new();
|
||||||
for (k, c) in zip(client_secret_key, hidden_secret_from_fulltext_search) {
|
for (k, c) in zip(client_secret_key, hidden_secret_from_fulltext_search) {
|
||||||
client_secret_bytes.push(*c ^ *k);
|
client_secret_bytes.push(*c ^ *k);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue