public async Task <Option <ResourceOwner> > Execute(string phoneNumber, CancellationToken cancellationToken) { // 1. Send the confirmation code (SMS). var option = await _generateAndSendSmsCodeOperation.Execute(phoneNumber, cancellationToken).ConfigureAwait(false); if (option is Option <string> .Error e) { return(new Option <ResourceOwner> .Error(e.Details, e.State)); } // 2. Try to get the resource owner. var resourceOwner = await _resourceOwnerRepository.GetResourceOwnerByClaim( OpenIdClaimTypes.PhoneNumber, phoneNumber, cancellationToken) .ConfigureAwait(false); if (resourceOwner != null) { return(new Option <ResourceOwner> .Result(resourceOwner)); } // 3. CreateJwk a new resource owner. var claims = new[] { new Claim(OpenIdClaimTypes.PhoneNumber, phoneNumber), new Claim(OpenIdClaimTypes.PhoneNumberVerified, "false") }; var id = await _subjectBuilder.BuildSubject(claims, cancellationToken).ConfigureAwait(false); var record = new ResourceOwner { Subject = id, Password = Id.Create().ToSha256Hash(_salt), Claims = claims }; // 3.2 Add user. await _addUser.Execute(record, cancellationToken).ConfigureAwait(false); //} var result = await _resourceOwnerRepository.GetResourceOwnerByClaim( OpenIdClaimTypes.PhoneNumber, phoneNumber, cancellationToken) .ConfigureAwait(false); return(new Option <ResourceOwner> .Result(result !)); }
public async Task When_Passing_Null_Parameters_Then_Exceptions_Are_Thrown() { await Assert .ThrowsAsync <NullReferenceException>(() => _addResourceOwnerAction.Execute(null, CancellationToken.None)) .ConfigureAwait(false); }