Initial ...
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
using System.Threading.Tasks;
|
||||
using xCommons.Extensions;
|
||||
using xIdentityModels.Extensions;
|
||||
using xIdentityModels.Models;
|
||||
using xIdentityModels.Navigations;
|
||||
|
||||
namespace xIds.Providers
|
||||
{
|
||||
public partial class XIdentityManager
|
||||
{
|
||||
//
|
||||
#region Verification Code Actions ...
|
||||
/// <summary>
|
||||
/// Check a Device Requeste for Verification Code before or not
|
||||
/// </summary>
|
||||
/// <param name="device">an instance of <see>XDevice</see></param>
|
||||
/// <returns>a boolean value</returns>
|
||||
private async Task<bool> IsDeviceRequestedForVerificationCodeBefor(
|
||||
XDevice device
|
||||
)
|
||||
{
|
||||
//
|
||||
var result = false;
|
||||
var enumerator = DbContext.VerificationRequests
|
||||
.AsAsyncEnumerable();
|
||||
await
|
||||
foreach (var entity in enumerator)
|
||||
{
|
||||
//
|
||||
if (entity.Device.IsSameAs(device))
|
||||
{
|
||||
//
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check a Verification Code Requested before or not
|
||||
/// </summary>
|
||||
/// <param name="verificationCode">Confirm Verification Code</param>
|
||||
/// <returns>a boolean value</returns>
|
||||
private async Task<bool> IsVerificationCodeRequested(
|
||||
string verificationCode
|
||||
)
|
||||
{
|
||||
//
|
||||
// Validate Args ...
|
||||
if (verificationCode.IsNullOrEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
var result = false;
|
||||
var enumerator = DbContext.VerificationRequests
|
||||
.AsAsyncEnumerable();
|
||||
await
|
||||
foreach (var entity in enumerator)
|
||||
{
|
||||
//
|
||||
if (entity.VerificationCode == verificationCode)
|
||||
{
|
||||
//
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve Verification Request
|
||||
/// </summary>
|
||||
/// <param name="device">an instance of <see>XDevice</see></param>
|
||||
/// <returns>an instance of <see>XVerificationRequest</see></returns>
|
||||
private async Task<XVerificationRequest> GetVerificationRequest(
|
||||
XDevice device
|
||||
)
|
||||
{
|
||||
//
|
||||
XVerificationRequest result = null;
|
||||
var enumerator = DbContext.VerificationRequests
|
||||
.AsAsyncEnumerable();
|
||||
await
|
||||
foreach (var entity in enumerator)
|
||||
{
|
||||
//
|
||||
if (entity.Device.IsSameAs(device))
|
||||
{
|
||||
//
|
||||
result = entity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve Verification Request
|
||||
/// </summary>
|
||||
/// <param name="verificationCode">Confirm Verification Code</param>
|
||||
/// <returns>an instance of <see>XVerificationRequest</see></returns>
|
||||
private async Task<XVerificationRequest> GetVerificationRequest(
|
||||
string verificationCode
|
||||
)
|
||||
{
|
||||
//
|
||||
XVerificationRequest result = null;
|
||||
var enumerator = DbContext.VerificationRequests
|
||||
.AsAsyncEnumerable();
|
||||
await
|
||||
foreach (var entity in enumerator)
|
||||
{
|
||||
//
|
||||
if (entity.VerificationCode == verificationCode)
|
||||
{
|
||||
//
|
||||
result = entity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove Exists Verification Code Request
|
||||
/// </summary>
|
||||
/// <param name="device">an instance of <see>XDevice</see></param>
|
||||
/// <param name="saveChanges">save changes on DbContext, default is true</param>
|
||||
/// <returns></returns>
|
||||
private async Task RemoveVerificationCodeRequestByDevice(
|
||||
XDevice device,
|
||||
bool saveChanges = true
|
||||
)
|
||||
{
|
||||
//
|
||||
if (!await IsDeviceRequestedForVerificationCodeBefor(device))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
var xvr = await GetVerificationRequest(device);
|
||||
DbContext.VerificationRequests.Remove(xvr);
|
||||
|
||||
//
|
||||
if (saveChanges)
|
||||
{
|
||||
await DbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove Exists Verification Code Request
|
||||
/// </summary>
|
||||
/// <param name="verificationCode">Confirm Verification Code</param>
|
||||
/// <param name="saveChanges">save changes on DbContext, default is true</param>
|
||||
/// <returns></returns>
|
||||
private async Task RemoveVerificationRequest(
|
||||
string verificationCode,
|
||||
bool saveChanges = true
|
||||
)
|
||||
{
|
||||
//
|
||||
ValidationProvider.NotEmpty(verificationCode);
|
||||
|
||||
//
|
||||
var request = await GetVerificationRequest(verificationCode);
|
||||
DbContext.VerificationRequests.Remove(request);
|
||||
|
||||
//
|
||||
if (saveChanges)
|
||||
{
|
||||
await DbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add Verification Code Request
|
||||
/// </summary>
|
||||
/// <param name="request">an instance of <see>XVerificationRequest</see></param>
|
||||
/// <param name="saveChanges">save changes on DbContext, default is true</param>
|
||||
/// <returns>an instance of <see>XVerificationRequest</see></returns>
|
||||
private async Task<XVerificationRequest> AddVerificationRequest(
|
||||
XVerificationRequest request,
|
||||
bool saveChanges = true
|
||||
)
|
||||
{
|
||||
//
|
||||
if (await IsDeviceRequestedForVerificationCodeBefor(request.Device))
|
||||
{
|
||||
await RemoveVerificationCodeRequestByDevice(request.Device);
|
||||
}
|
||||
|
||||
//
|
||||
var entry = await DbContext.VerificationRequests.AddAsync(request);
|
||||
|
||||
//
|
||||
if (saveChanges)
|
||||
{
|
||||
await DbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
//
|
||||
return entry.Entity;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user