added room id

This commit is contained in:
Maksim Chegulov 2023-09-14 17:35:54 +03:00
parent 5925149e46
commit 68a88058cb
2 changed files with 23 additions and 19 deletions

View File

@ -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;

View File

@ -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);
}
}