Files
Radicade/Server/Extensions/UserExtension.cs
T
2026-10-16 23:33:13 -07:00

61 lines
1.4 KiB
C#

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using RadicadeServer.DB;
namespace RadicadeServer.Extensions
{
public static class UserExtension
{
public static long? GetUserId(this ClaimsPrincipal req)
{
string? userIdStr = req.FindFirstValue(ClaimTypes.NameIdentifier);
if (userIdStr == null) return null;
return long.Parse(userIdStr);
}
public static string? GetPlatId(this ClaimsPrincipal req)
{
string? userIdStr = req.FindFirstValue("rn.platid");
return userIdStr;
}
public static long? GetUserId(this string req)
{
try
{
if (string.IsNullOrWhiteSpace(req)) return null;
string token = req.Trim();
if (token.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
token = token.Substring(7).Trim();
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(DBConfig.JwtKey);
var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
}, out _);
var tokenClaim = principal.Claims.FirstOrDefault(claim => claim.Type == "userId")?.Value;
if (tokenClaim == null) return null;
return long.Parse(tokenClaim);
}
catch
{
return null;
}
}
}
}