added room id
This commit is contained in:
parent
5925149e46
commit
68a88058cb
@ -99,7 +99,7 @@ public class EmailValidationKeyModelHelper
|
||||
|
||||
public async Task<ValidationResult> ValidateAsync(EmailValidationKeyModel inDto)
|
||||
{
|
||||
var (key, emplType, email, uiD, type) = inDto;
|
||||
var (key, emplType, email, uiD, type, _) = inDto;
|
||||
|
||||
ValidationResult checkKeyResult;
|
||||
|
||||
|
@ -40,7 +40,7 @@ public class EmailValidationKeyProvider
|
||||
public TimeSpan ValidEmailKeyInterval { get; }
|
||||
public TimeSpan ValidAuthKeyInterval { get; }
|
||||
public TimeSpan ValidVisitLinkInterval { get; }
|
||||
|
||||
|
||||
private readonly ILogger<EmailValidationKeyProvider> _logger;
|
||||
private static readonly DateTime _from = new DateTime(2010, 01, 01, 0, 0, 0, DateTimeKind.Utc);
|
||||
private readonly MachinePseudoKeys _machinePseudoKeys;
|
||||
@ -62,13 +62,13 @@ public class EmailValidationKeyProvider
|
||||
{
|
||||
validVisitLinkInterval = TimeSpan.FromMinutes(15);
|
||||
}
|
||||
|
||||
|
||||
ValidEmailKeyInterval = validInterval;
|
||||
ValidAuthKeyInterval = authValidInterval;
|
||||
ValidVisitLinkInterval = validVisitLinkInterval;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
||||
public async Task<string> GetEmailKeyAsync(string email)
|
||||
{
|
||||
return GetEmailKey(await _tenantManager.GetCurrentTenantIdAsync(), email);
|
||||
@ -78,19 +78,19 @@ public class EmailValidationKeyProvider
|
||||
{
|
||||
return GetEmailKey(_tenantManager.GetCurrentTenant().Id, email);
|
||||
}
|
||||
|
||||
|
||||
public string GetEmailKey(int tenantId, string email)
|
||||
{
|
||||
ArgumentNullOrEmptyException.ThrowIfNullOrEmpty(email);
|
||||
|
||||
|
||||
email = FormatEmail(tenantId, email);
|
||||
|
||||
|
||||
var ms = (long)(DateTime.UtcNow - _from).TotalMilliseconds;
|
||||
var hash = GetMashineHashedData(BitConverter.GetBytes(ms), Encoding.ASCII.GetBytes(email));
|
||||
|
||||
return string.Format("{0}.{1}", ms, DoStringFromBytes(hash));
|
||||
}
|
||||
|
||||
|
||||
private string FormatEmail(int tenantId, string email)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(email);
|
||||
@ -106,12 +106,12 @@ public class EmailValidationKeyProvider
|
||||
return email.ToLowerInvariant();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async Task<ValidationResult> ValidateEmailKeyAsync(string email, string key)
|
||||
{
|
||||
return await ValidateEmailKeyAsync(email, key, TimeSpan.MaxValue);
|
||||
}
|
||||
|
||||
|
||||
public async Task<ValidationResult> ValidateEmailKeyAsync(string email, string key, TimeSpan validInterval)
|
||||
{
|
||||
var result = await ValidateEmailKeyInternalAsync(email, key, validInterval);
|
||||
@ -119,24 +119,24 @@ public class EmailValidationKeyProvider
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private async Task<ValidationResult> ValidateEmailKeyInternalAsync(string email, string key, TimeSpan validInterval)
|
||||
{
|
||||
ArgumentNullOrEmptyException.ThrowIfNullOrEmpty(email);
|
||||
ArgumentNullException.ThrowIfNull(key);
|
||||
|
||||
|
||||
email = FormatEmail(await _tenantManager.GetCurrentTenantIdAsync(), email);
|
||||
var parts = key.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length != 2)
|
||||
{
|
||||
return ValidationResult.Invalid;
|
||||
}
|
||||
|
||||
|
||||
if (!long.TryParse(parts[0], out var ms))
|
||||
{
|
||||
return ValidationResult.Invalid;
|
||||
}
|
||||
|
||||
|
||||
var hash = GetMashineHashedData(BitConverter.GetBytes(ms), Encoding.ASCII.GetBytes(email));
|
||||
var key2 = DoStringFromBytes(hash);
|
||||
var key2_good = string.Equals(parts[1], key2, StringComparison.OrdinalIgnoreCase);
|
||||
@ -149,7 +149,7 @@ public class EmailValidationKeyProvider
|
||||
|
||||
return validInterval >= TimeSpan.FromMilliseconds(ms_current - ms) ? ValidationResult.Ok : ValidationResult.Expired;
|
||||
}
|
||||
|
||||
|
||||
internal static string DoStringFromBytes(byte[] data)
|
||||
{
|
||||
var str = Convert.ToBase64String(data);
|
||||
@ -157,7 +157,7 @@ public class EmailValidationKeyProvider
|
||||
|
||||
return str.ToUpperInvariant();
|
||||
}
|
||||
|
||||
|
||||
internal static byte[] GetMashineHashedData(byte[] salt, byte[] data)
|
||||
{
|
||||
var alldata = new byte[salt.Length + data.Length];
|
||||
@ -167,7 +167,7 @@ public class EmailValidationKeyProvider
|
||||
return Hasher.Hash(alldata, HashAlg.SHA256);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
public class EmailValidationKeyModel
|
||||
@ -191,9 +191,13 @@ public class EmailValidationKeyModel
|
||||
/// <summary>Confirmation email type</summary>
|
||||
/// <type>System.Nullabel{ASC.Web.Studio.Utility.ConfirmType}, System</type>
|
||||
public ConfirmType? Type { get; set; }
|
||||
|
||||
/// <summary>Room ID</summary>
|
||||
/// <type>System.String, System</type>
|
||||
public string RoomId { get; set; }
|
||||
|
||||
public void Deconstruct(out string key, out EmployeeType? emplType, out string email, out Guid? uiD, out ConfirmType? type)
|
||||
public void Deconstruct(out string key, out EmployeeType? emplType, out string email, out Guid? uiD, out ConfirmType? type, out string roomId)
|
||||
{
|
||||
(key, emplType, email, uiD, type) = (Key, EmplType, Email, UiD, Type);
|
||||
(key, emplType, email, uiD, type, roomId) = (Key, EmplType, Email, UiD, Type, RoomId);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user