feat(web): add platform-agnostic identity extraction from ClaimsPrincipal
- TryGetPlatformIdentity returns (platform, external_user_id) - TryGetDiscordId for Discord-specific flows - Backward-compatible fallback for legacy Telegram auth without Platform claim - GetAvatarUrl helper for Discord avatars Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -6,4 +6,37 @@ public static class ClaimsPrincipalExtensions
|
|||||||
{
|
{
|
||||||
public static bool TryGetTelegramId(this ClaimsPrincipal user, out long telegramId) =>
|
public static bool TryGetTelegramId(this ClaimsPrincipal user, out long telegramId) =>
|
||||||
long.TryParse(user.FindFirst("TelegramId")?.Value, out telegramId);
|
long.TryParse(user.FindFirst("TelegramId")?.Value, out telegramId);
|
||||||
|
|
||||||
|
public static bool TryGetDiscordId(this ClaimsPrincipal user, out string? discordId)
|
||||||
|
{
|
||||||
|
discordId = user.FindFirst("DiscordId")?.Value;
|
||||||
|
return !string.IsNullOrWhiteSpace(discordId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryGetPlatformIdentity(this ClaimsPrincipal user, out string platform, out string externalUserId)
|
||||||
|
{
|
||||||
|
platform = string.Empty;
|
||||||
|
externalUserId = string.Empty;
|
||||||
|
|
||||||
|
var platformClaim = user.FindFirst("Platform")?.Value;
|
||||||
|
if (!string.IsNullOrWhiteSpace(platformClaim))
|
||||||
|
{
|
||||||
|
platform = platformClaim;
|
||||||
|
externalUserId = user.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? string.Empty;
|
||||||
|
return !string.IsNullOrWhiteSpace(externalUserId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback for legacy Telegram users before Platform claim was added
|
||||||
|
if (TryGetTelegramId(user, out var telegramId))
|
||||||
|
{
|
||||||
|
platform = "Telegram";
|
||||||
|
externalUserId = telegramId.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string? GetAvatarUrl(this ClaimsPrincipal user) =>
|
||||||
|
user.FindFirst("AvatarUrl")?.Value;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user