using System;
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Http;

namespace Dpz.Core.Infrastructure;

/// <summary>
/// 邮箱验证缓存 Key 生成工具
/// </summary>
public static class EmailVerifyCacheKeyTools
{
    /// <summary>
    /// 邮箱验证通过缓存 key 前缀
    /// </summary>
    private const string VerifyPassedCachePrefix = "EmailVerifyPassed:";

    /// <summary>
    /// 构建邮箱验证通过缓存 key
    /// </summary>
    /// <param name="request"></param>
    /// <param name="email"></param>
    /// <param name="cachePrefix"></param>
    /// <returns></returns>
    public static string BuildEmailVerifyPassedCacheKey(
        this HttpRequest request,
        string email,
        string cachePrefix = VerifyPassedCachePrefix
    )
    {
        var normalizedEmail = email.Trim().ToLowerInvariant();
        var ipAddress = request.GetIpAddress();
        var userAgent = request.Headers.UserAgent.ToString();
        var raw = $"{normalizedEmail}:{ipAddress}:{userAgent}";
        var fingerprint = Convert.ToHexString(SHA256.HashData(Encoding.UTF8.GetBytes(raw)));
        return $"{cachePrefix}{fingerprint}";
    }
}
评论加载中...