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 } }