private void HandleEvent(UserClaimsRemoved <TKey> evt) { foreach (var claim in evt.Claims) { if (usersByClaims.TryGetValue(claim.Type, out Dictionary <string, HashSet <TKey> > byType)) { if (byType.TryGetValue(claim.Value, out HashSet <TKey> hs)) { hs.Remove(evt.UserId); if (hs.Count == 0) { byType.Remove(claim.Value); } } if (byType.Count == 0) { usersByClaims.Remove(claim.Type); } } } var(normalizedEmail, normalizedUser, logins, claims) = reverseLookup[evt.UserId]; foreach (var claim in claims.ToList()) { claims.RemoveWhere(c => c.Type.Equals(claim.Type) && c.Value.Equals(claim.Value)); } }
public int Serialize(ref byte[] bytes, int offset, UserClaimsRemoved <TKey> value, IFormatterResolver formatterResolver) { var keyFormatter = formatterResolver.GetFormatter <TKey>(); var claimFormatter = formatterResolver.GetFormatter <Claim>(); var startOffset = offset; offset += keyFormatter.Serialize(ref bytes, offset, value.UserId, formatterResolver); offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Claims.Length); for (int i = 0; i < value.Claims.Length; i++) { var claim = value.Claims[i]; offset += claimFormatter.Serialize(ref bytes, offset, claim, formatterResolver); } return(offset - startOffset); }
public void TestSerializationOfUsersClaimsRemoved() { var userId = Guid.NewGuid(); var evt = new UserClaimsRemoved <Guid>(userId, new[] { new Claim("type1", "value1"), new Claim("type2", "value2") }); var bytes = LZ4MessagePackSerializer.Serialize <IEvent>(evt, AspnetIdentityResolver.Instance); var eventChk = LZ4MessagePackSerializer.Deserialize <IEvent>(bytes, AspnetIdentityResolver.Instance) as UserClaimsRemoved <Guid>; Assert.NotNull(eventChk); Assert.Equal(evt.UserId, eventChk.UserId); var evtClaims = evt.Claims.ToArray(); var eventChkClaims = eventChk.Claims.ToArray(); Assert.Equal(evtClaims.Length, eventChkClaims.Length); for (int i = 0; i < evtClaims.Length; i++) { Assert.Equal(evtClaims[i].Type, eventChkClaims[i].Type); Assert.Equal(evtClaims[i].Value, eventChkClaims[i].Value); } }