fix(accounts): separate Debrid-Link username and email
Persist the username and email returned by the Debrid-Link account endpoint as distinct identity fields and project them into their matching account-table columns. Migrate cached legacy statuses that stored a username in the email field, preserve both fields through renderer validation and sanitization, and cover API responses with and without an email address.
This commit is contained in:
@@ -245,15 +245,17 @@ export async function checkDebridLinkKey(
|
||||
const premiumLeftSec = Number(value.premiumLeft || 0);
|
||||
const accountType = Number(value.accountType || 0);
|
||||
const premiumUntilMs = Number.isFinite(premiumLeftSec) && premiumLeftSec > 0 ? now + premiumLeftSec * 1000 : 0;
|
||||
const isPremium = premiumUntilMs > now || accountType > 0;
|
||||
const username = String(value.username || "").trim() || undefined;
|
||||
return {
|
||||
...base,
|
||||
valid: true,
|
||||
isPremium,
|
||||
premiumUntilMs: premiumUntilMs > 0 ? premiumUntilMs : (accountType > 0 ? null : 0),
|
||||
email: username,
|
||||
message: premiumUntilMs > 0
|
||||
const isPremium = premiumUntilMs > now || accountType > 0;
|
||||
const username = String(value.username || "").trim() || undefined;
|
||||
const email = String(value.email || "").trim() || undefined;
|
||||
return {
|
||||
...base,
|
||||
valid: true,
|
||||
isPremium,
|
||||
premiumUntilMs: premiumUntilMs > 0 ? premiumUntilMs : (accountType > 0 ? null : 0),
|
||||
username,
|
||||
email,
|
||||
message: premiumUntilMs > 0
|
||||
? formatRemaining(premiumUntilMs, now)
|
||||
: (accountType > 0 ? "Premium aktiv" : "Kein Premium (Free)")
|
||||
};
|
||||
|
||||
@@ -103,6 +103,7 @@ export function sanitizeDebridAccountStatus(status: DebridAccountStatus, redacti
|
||||
accountId: sanitizeAccountStatusText(status.accountId, redactions),
|
||||
label: sanitizeAccountStatusText(status.label, redactions),
|
||||
maskedLogin: sanitizeAccountStatusText(status.maskedLogin, redactions),
|
||||
username: status.username ? sanitizeAccountStatusText(status.username, redactions) : undefined,
|
||||
email: status.email ? sanitizeAccountStatusText(status.email, redactions) : undefined,
|
||||
message: sanitizeAccountStatusText(status.message, redactions)
|
||||
};
|
||||
|
||||
+21
-13
@@ -280,22 +280,30 @@ function normalizeDebridAccountStatuses(
|
||||
continue;
|
||||
}
|
||||
const entry = raw as Partial<DebridAccountStatus>;
|
||||
if (typeof entry.accountId !== "string" || typeof entry.checkedAt !== "number") {
|
||||
continue;
|
||||
}
|
||||
result[key] = {
|
||||
accountId: entry.accountId,
|
||||
provider: entry.provider === "debridlink"
|
||||
? "debridlink"
|
||||
: entry.provider === "realdebrid"
|
||||
? "realdebrid"
|
||||
: "megadebrid",
|
||||
if (typeof entry.accountId !== "string" || typeof entry.checkedAt !== "number") {
|
||||
continue;
|
||||
}
|
||||
const provider = entry.provider === "debridlink"
|
||||
? "debridlink"
|
||||
: entry.provider === "realdebrid"
|
||||
? "realdebrid"
|
||||
: "megadebrid";
|
||||
let username = typeof entry.username === "string" ? entry.username : undefined;
|
||||
let email = typeof entry.email === "string" ? entry.email : undefined;
|
||||
if (provider === "debridlink" && !username && email && !email.includes("@")) {
|
||||
username = email;
|
||||
email = undefined;
|
||||
}
|
||||
result[key] = {
|
||||
accountId: entry.accountId,
|
||||
provider,
|
||||
label: String(entry.label || ""),
|
||||
maskedLogin: String(entry.maskedLogin || ""),
|
||||
valid: Boolean(entry.valid),
|
||||
isPremium: Boolean(entry.isPremium),
|
||||
premiumUntilMs: typeof entry.premiumUntilMs === "number" ? entry.premiumUntilMs : null,
|
||||
email: typeof entry.email === "string" ? entry.email : undefined,
|
||||
isPremium: Boolean(entry.isPremium),
|
||||
premiumUntilMs: typeof entry.premiumUntilMs === "number" ? entry.premiumUntilMs : null,
|
||||
username,
|
||||
email,
|
||||
message: String(entry.message || ""),
|
||||
checkedAt: entry.checkedAt
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user