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 ...
///
/// Check a Device Requeste for Verification Code before or not
///
/// an instance of XDevice
/// a boolean value
private async Task 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;
}
///
/// Check a Verification Code Requested before or not
///
/// Confirm Verification Code
/// a boolean value
private async Task 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;
}
///
/// Retrieve Verification Request
///
/// an instance of XDevice
/// an instance of XVerificationRequest
private async Task 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;
}
///
/// Retrieve Verification Request
///
/// Confirm Verification Code
/// an instance of XVerificationRequest
private async Task 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;
}
///
/// Remove Exists Verification Code Request
///
/// an instance of XDevice
/// save changes on DbContext, default is true
///
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();
}
}
///
/// Remove Exists Verification Code Request
///
/// Confirm Verification Code
/// save changes on DbContext, default is true
///
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();
}
}
///
/// Add Verification Code Request
///
/// an instance of XVerificationRequest
/// save changes on DbContext, default is true
/// an instance of XVerificationRequest
private async Task 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
}
}