public async Task <string> GenerateVerificationToken(Guid identityId, CancellationToken cancellationToken = default(CancellationToken)) { var verificationToken = Security.GenerateToken(); var verificationTokenEntity = new AzureVerificationTokenEntity { VerificationToken = verificationToken, IdentityId = identityId }; var createOperation = TableOperation.Insert(verificationTokenEntity); var result = await this.VerificationTokenTable.ExecuteAsync(createOperation, null, null, cancellationToken).ConfigureAwait(false); return(verificationToken); }
public async Task <IIdentityEntity> VerifyVerificationToken(string verificationToken, bool deleteTokenOnRetrieval = true, CancellationToken cancellationToken = default(CancellationToken)) { // Check to see if VerificationToken exists var retrieveOperation = TableOperation.Retrieve <AzureVerificationTokenEntity>(Constants.PartitionNames.VerificationTokenPrimary, verificationToken); var retrievedResult = await this.VerificationTokenTable.ExecuteAsync(retrieveOperation, null, null, cancellationToken).ConfigureAwait(false); var retrievedEntity = (AzureVerificationTokenEntity)retrievedResult?.Result; if (retrievedEntity == null) { throw new KeyNotFoundException($"The VerificationToken '{verificationToken}' was not found"); } // Retrieve IdentityEntity var retrieveIdentityOperation = TableOperation.Retrieve <AzureIdentityEntity>(Constants.PartitionNames.IdentityPrimary, retrievedEntity.IdentityId.ToString()); var retrievedIdentityResult = await this.IdentityTable.ExecuteAsync(retrieveIdentityOperation, null, null, cancellationToken).ConfigureAwait(false); var retrievedIdentityEntity = (AzureIdentityEntity)retrievedIdentityResult?.Result; // Set verified property retrievedIdentityEntity.EmailVerified = true; var setOperation = TableOperation.InsertOrReplace(retrievedIdentityEntity); var result = await this.IdentityTable.ExecuteAsync(setOperation, null, null, cancellationToken).ConfigureAwait(false); // Clean up if required if (!deleteTokenOnRetrieval) { return(retrievedIdentityEntity); } // Delete the verification token record var deleteVerificationEntity = new AzureVerificationTokenEntity { PartitionKey = Constants.PartitionNames.VerificationTokenPrimary, RowKey = retrievedEntity.VerificationToken.ToString(), ETag = "*" }; // Delete identity and identity foreign key var deleteEntityOperation = TableOperation.Delete(deleteVerificationEntity); var entityDeleteResult = await this.VerificationTokenTable.ExecuteAsync(deleteEntityOperation, null, null, cancellationToken).ConfigureAwait(false); return(retrievedIdentityEntity); }