diff --git a/src/blazor/admin/BootstrapAdmin.Web/Services/SMS/DefaultSMSProvider.cs b/src/blazor/admin/BootstrapAdmin.Web/Services/SMS/DefaultSMSProvider.cs
index 891dcba3..e21322ae 100644
--- a/src/blazor/admin/BootstrapAdmin.Web/Services/SMS/DefaultSMSProvider.cs
+++ b/src/blazor/admin/BootstrapAdmin.Web/Services/SMS/DefaultSMSProvider.cs
@@ -7,120 +7,116 @@ using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
-namespace BootstrapAdmin.Web.Services.SMS
+namespace BootstrapAdmin.Web.Services.SMS;
+
+///
+/// 手机号登陆帮助类
+///
+public class DefaultSMSProvider : ISMSProvider
{
+ private static readonly ConcurrentDictionary _pool = new ConcurrentDictionary();
+
///
- /// 手机号登陆帮助类
+ /// 获得 短信配置信息
///
- public class DefaultSMSProvider : ISMSProvider
+ public SMSOptions Options { get { return _options; } }
+
+ private readonly DefaultSMSOptions _options;
+ private readonly HttpClient _client;
+
+ ///
+ /// 构造函数
+ ///
+ ///
+ ///
+ public DefaultSMSProvider(IConfiguration configuration, IHttpClientFactory factory)
{
- private static readonly ConcurrentDictionary _pool = new ConcurrentDictionary();
-
- ///
- /// 获得 短信配置信息
- ///
- public SMSOptions Options { get { return _options; } }
-
- private readonly DefaultSMSOptions _options;
- private readonly HttpClient _client;
-
- ///
- /// 构造函数
- ///
- ///
- ///
- public DefaultSMSProvider(IConfiguration configuration, IHttpClientFactory factory)
- {
- _options = configuration.GetSection(nameof(SMSOptions)).Get();
- _client = factory.CreateClient();
- }
-
- ///
- /// 下发验证码方法
- ///
- ///
- ///
- public async Task SendCodeAsync(string phoneNumber)
- {
- Options.Timestamp = (DateTimeOffset.UtcNow.Ticks - 621355968000000000) / 10000000;
- Options.Phone = phoneNumber;
- var requestParameters = new Dictionary()
- {
- { "CompanyCode", _options.CompanyCode },
- { "Phone", Options.Phone },
- { "TimeStamp", Options.Timestamp.ToString() },
- { "Sign", Sign() }
- };
-
- var url = QueryHelpers.AddQueryString(Options.RequestUrl, requestParameters);
- var req = await _client.GetAsync(url);
- var content = await req.Content.ReadAsStringAsync();
-#if !NETSTANDARD2_0
- var result = JsonSerializer.Deserialize(content, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
-#else
- var result = JsonConvert.DeserializeObject(content);
-#endif
- var ret = new SMSResult() { Result = result!.Code == 1, Msg = result.Msg };
- if (ret.Result)
- {
- _pool.AddOrUpdate(Options.Phone, key => new AutoExpireValidateCode(Options.Phone, result.Data, Options.Expires, phone => _pool.TryRemove(phone, out var _)), (key, v) => v.Reset(result.Data));
- }
- else
- {
- new Exception(result.Msg).Format(new NameValueCollection()
- {
- ["UserId"] = Options.Phone,
- ["url"] = url,
- ["content"] = content
- });
- }
- return ret;
- }
-
- ///
- /// 验证验证码方法
- ///
- /// 手机号
- /// 验证码
- ///
- public bool Validate(string phone, string code) => _pool.TryGetValue(phone, out var signKey) && Hash($"{code}{_options.MD5Key}") == signKey.Code;
-
- private string Sign()
- {
- return Hash($"{_options.CompanyCode}{Options.Phone}{Options.Timestamp}{_options.MD5Key}");
- }
-
- private static string Hash(string data)
- {
- using var md5 = MD5.Create();
- var sign = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(data)));
- sign = sign.Replace("-", "").ToLowerInvariant();
- return sign;
- }
-
- private class DefaultSMSResult
- {
- public int Code { get; set; }
-
- public string Data { get; set; } = "";
-
- public string Msg { get; set; } = "";
- }
+ _options = configuration.GetSection(nameof(SMSOptions)).Get();
+ _client = factory.CreateClient();
}
///
- ///
+ /// 下发验证码方法
///
- public class DefaultSMSOptions : SMSOptions
+ ///
+ ///
+ public async Task SendCodeAsync(string phoneNumber)
{
- ///
- /// 获得/设置 公司编码
- ///
- public string CompanyCode { get; set; } = "";
+ Options.Timestamp = (DateTimeOffset.UtcNow.Ticks - 621355968000000000) / 10000000;
+ Options.Phone = phoneNumber;
+ var requestParameters = new Dictionary()
+ {
+ { "CompanyCode", _options.CompanyCode },
+ { "Phone", Options.Phone },
+ { "TimeStamp", Options.Timestamp.ToString() },
+ { "Sign", Sign() }
+ };
- ///
- /// 获得/设置 签名密钥
- ///
- public string MD5Key { get; set; } = "";
+ var url = QueryHelpers.AddQueryString(Options.RequestUrl, requestParameters);
+ var req = await _client.GetAsync(url);
+ var content = await req.Content.ReadAsStringAsync();
+ var result = JsonSerializer.Deserialize(content, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
+
+ var ret = new SMSResult() { Result = result!.Code == 1, Msg = result.Msg };
+ if (ret.Result)
+ {
+ _pool.AddOrUpdate(Options.Phone, key => new AutoExpireValidateCode(Options.Phone, result.Data, Options.Expires, phone => _pool.TryRemove(phone, out var _)), (key, v) => v.Reset(result.Data));
+ }
+ else
+ {
+ new Exception(result.Msg).Format(new NameValueCollection()
+ {
+ ["UserId"] = Options.Phone,
+ ["url"] = url,
+ ["content"] = content
+ });
+ }
+ return ret;
+ }
+
+ ///
+ /// 验证验证码方法
+ ///
+ /// 手机号
+ /// 验证码
+ ///
+ public bool Validate(string phone, string code) => _pool.TryGetValue(phone, out var signKey) && Hash($"{code}{_options.MD5Key}") == signKey.Code;
+
+ private string Sign()
+ {
+ return Hash($"{_options.CompanyCode}{Options.Phone}{Options.Timestamp}{_options.MD5Key}");
+ }
+
+ private static string Hash(string data)
+ {
+ using var md5 = MD5.Create();
+ var sign = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(data)));
+ sign = sign.Replace("-", "").ToLowerInvariant();
+ return sign;
+ }
+
+ private class DefaultSMSResult
+ {
+ public int Code { get; set; }
+
+ public string Data { get; set; } = "";
+
+ public string Msg { get; set; } = "";
}
}
+
+///
+///
+///
+public class DefaultSMSOptions : SMSOptions
+{
+ ///
+ /// 获得/设置 公司编码
+ ///
+ public string CompanyCode { get; set; } = "";
+
+ ///
+ /// 获得/设置 签名密钥
+ ///
+ public string MD5Key { get; set; } = "";
+}