feat: Qobuz auth-token (user_id + token) login as a reliable alternative to email/password

Qobuz's email/password API login returns 401 even with valid credentials
(a known Qobuz limitation, unaffected by streamrip version). Add settings
fields for a Qobuz user ID + auth token (token stored encrypted); when both
are present StreamripClient uses use_auth_token=True, else falls back to
email/password.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonathan
2026-07-11 00:46:17 +02:00
parent caa0d542ea
commit 00b3dddca6
5 changed files with 73 additions and 11 deletions
+4
View File
@@ -5,6 +5,8 @@ import { encryptSecret } from "@/lib/crypto";
const FIELDS: Record<string, { key: string; secret: boolean }> = {
qobuzEmail: { key: "qobuz.email", secret: false },
qobuzPassword: { key: "qobuz.password", secret: true },
qobuzUserId: { key: "qobuz.user_id", secret: false },
qobuzToken: { key: "qobuz.auth_token", secret: true },
slskdUrl: { key: "slskd.url", secret: false },
slskdApiKey: { key: "slskd.api_key", secret: true },
};
@@ -36,8 +38,10 @@ export async function GET() {
const byKey = new Map(rows.map((r) => [r.key, r]));
return Response.json({
qobuzEmail: byKey.get("qobuz.email")?.value ?? "",
qobuzUserId: byKey.get("qobuz.user_id")?.value ?? "",
slskdUrl: byKey.get("slskd.url")?.value ?? "",
qobuzPasswordSet: byKey.has("qobuz.password"),
qobuzTokenSet: byKey.has("qobuz.auth_token"),
slskdApiKeySet: byKey.has("slskd.api_key"),
});
}