public async Task <bool> Handle(SynchronizeClaimsCommand request, CancellationToken cancellationToken) { if (!request.IsValid()) { NotifyValidationErrors(request); return(false); } var userClaims = (await _userService.GetClaimByName(request.Username)).ToList(); foreach (var claim in request.Claims) { var actualUserClaims = userClaims.Find(f => f.Type == claim.Type); if (actualUserClaims == null) { await _userService.SaveClaim(request.Username, claim); } else { var newValue = claim.Value; var currentValue = actualUserClaims.Value; if (currentValue != newValue) { await _userService.RemoveClaim(request.Username, actualUserClaims.Type, actualUserClaims.Value); await _userService.SaveClaim(request.Username, claim); } } } if (await Commit()) { await Bus.RaiseEvent(new ClaimsSyncronizedEvent(request.Username, request.Claims)); return(true); } return(false); }
public Task <bool> SynchronizeClaims(string username, IEnumerable <ClaimViewModel> claims) { var registerCommand = new SynchronizeClaimsCommand(username, claims.Select(s => new Claim(s.Type, s.Value))); return(Bus.SendCommand(registerCommand)); }