Skip to content

Commit

Permalink
Fix data leakage between sessions, fixes #15
Browse files Browse the repository at this point in the history
  • Loading branch information
Sebazzz committed Apr 16, 2020
1 parent fa9139a commit 41396fa
Show file tree
Hide file tree
Showing 11 changed files with 24 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ namespace PokerTime.Application.Notifications.EstimationGiven {
public sealed class EstimationGivenNotification : INotification {
public EstimationModel Estimation { get; }

public EstimationGivenNotification(EstimationModel estimation) {
public string SessionId { get; }

public EstimationGivenNotification(string sessionId, EstimationModel estimation) {
this.SessionId = sessionId;
this.Estimation = estimation;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ public EstimationGivenNotificationDispatcher(ILogger<NotificationDispatcher<Esti
protected override Task DispatchCore(
IEstimationGivenSubscriber subscriber,
EstimationGivenNotification notification
) => subscriber.OnEstimationGiven(notification.Estimation);
) => subscriber.OnEstimationGiven(notification);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@

namespace PokerTime.Application.Notifications.EstimationGiven {
using System.Threading.Tasks;
using Common.Models;

public interface IEstimationGivenSubscriber : ISubscriber {
Task OnEstimationGiven(EstimationModel estimation);
Task OnEstimationGiven(EstimationGivenNotification notification);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public async Task<Unit> Handle(PlayCardCommand request, CancellationToken cancel
await dbContext.SaveChangesAsync(cancellationToken);

var estimationNotification = new EstimationGivenNotification(
session.UrlId.StringId,
this._mapper.Map<EstimationModel>(estimation)
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ namespace PokerTime.Application.SessionWorkflows.Commands {
using Services;

public abstract class AbstractStageCommandHandler<TRequest> : IRequestHandler<TRequest> where TRequest : AbstractStageCommand, IRequest {
private readonly ISessionStatusUpdateDispatcher _retrospectiveStatusUpdateDispatcher;
private readonly ISessionStatusUpdateDispatcher _sessionStatusUpdateDispatcher;
private readonly IPokerTimeDbContextFactory _dbContextFactory;

#nullable disable
protected IPokerTimeDbContext DbContext { get; private set; }
#nullable enable

protected AbstractStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher retrospectiveStatusUpdateDispatcher) {
protected AbstractStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher sessionStatusUpdateDispatcher) {
this._dbContextFactory = pokerTimeDbContext;
this._retrospectiveStatusUpdateDispatcher = retrospectiveStatusUpdateDispatcher;
this._sessionStatusUpdateDispatcher = sessionStatusUpdateDispatcher;
}

public async Task<Unit> Handle(TRequest request, CancellationToken cancellationToken) {
Expand All @@ -49,6 +49,6 @@ public async Task<Unit> Handle(TRequest request, CancellationToken cancellationT

protected abstract Task<Unit> HandleCore(TRequest request, Session session, CancellationToken cancellationToken);

protected Task DispatchUpdate(Session session, CancellationToken cancellationToken) => this._retrospectiveStatusUpdateDispatcher.DispatchUpdate(session, cancellationToken);
protected Task DispatchUpdate(Session session, CancellationToken cancellationToken) => this._sessionStatusUpdateDispatcher.DispatchUpdate(session, cancellationToken);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace PokerTime.Application.SessionWorkflows.Commands {
using MediatR;

public sealed class InitiateDiscussionStageCommandHandler : AbstractStageCommandHandler<InitiateDiscussionStageCommand> {
public InitiateDiscussionStageCommandHandler(IPokerTimeDbContext pokerTimeDbContext, ISessionStatusUpdateDispatcher retrospectiveStatusUpdateDispatcher) : base(pokerTimeDbContext, retrospectiveStatusUpdateDispatcher) {
public InitiateDiscussionStageCommandHandler(IPokerTimeDbContext pokerTimeDbContext, ISessionStatusUpdateDispatcher sessionStatusUpdateDispatcher) : base(pokerTimeDbContext, sessionStatusUpdateDispatcher) {
}

protected override async Task<Unit> HandleCore(InitiateDiscussionStageCommand request, Session session, CancellationToken cancellationToken) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace PokerTime.Application.SessionWorkflows.Commands {
using MediatR;

public sealed class InitiateEstimationDiscussionStageCommandHandler : AbstractStageCommandHandler<InitiateEstimationDiscussionStageCommand> {
public InitiateEstimationDiscussionStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher retrospectiveStatusUpdateDispatcher) : base(pokerTimeDbContext, retrospectiveStatusUpdateDispatcher) {
public InitiateEstimationDiscussionStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher sessionStatusUpdateDispatcher) : base(pokerTimeDbContext, sessionStatusUpdateDispatcher) {
}

protected override async Task<Unit> HandleCore(InitiateEstimationDiscussionStageCommand request, Session session, CancellationToken cancellationToken) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace PokerTime.Application.SessionWorkflows.Commands {
using MediatR;

public sealed class InitiateEstimationStageCommandHandler : AbstractStageCommandHandler<InitiateEstimationStageCommand> {
public InitiateEstimationStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher retrospectiveStatusUpdateDispatcher) : base(pokerTimeDbContext, retrospectiveStatusUpdateDispatcher) {
public InitiateEstimationStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher sessionStatusUpdateDispatcher) : base(pokerTimeDbContext, sessionStatusUpdateDispatcher) {
}

protected override async Task<Unit> HandleCore(InitiateEstimationStageCommand request, Session session, CancellationToken cancellationToken) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace PokerTime.Application.SessionWorkflows.Commands {
using MediatR;

public sealed class InitiateFinishStageCommandHandler : AbstractStageCommandHandler<InitiateFinishStageCommand> {
public InitiateFinishStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher retrospectiveStatusUpdateDispatcher) : base(pokerTimeDbContext, retrospectiveStatusUpdateDispatcher) {
public InitiateFinishStageCommandHandler(IPokerTimeDbContextFactory pokerTimeDbContext, ISessionStatusUpdateDispatcher sessionStatusUpdateDispatcher) : base(pokerTimeDbContext, sessionStatusUpdateDispatcher) {
}

protected override async Task<Unit> HandleCore(InitiateFinishStageCommand request, Session session, CancellationToken cancellationToken) {
Expand Down
11 changes: 8 additions & 3 deletions src/PokerTime.Web/Components/EstimationOverviewBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public abstract class EstimationOverviewBase : MediatorComponent, IDisposable, I

protected IEnumerable<string> ParticipantsWithoutEstimation {
get {
if (this.ParticipantList == null || this.Estimations == null) {
if (this.ParticipantList == null) {
yield break;
}

Expand All @@ -56,9 +56,14 @@ protected IEnumerable<string> ParticipantsWithoutEstimation {
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2227:Collection properties should be read only", Justification = "<Pending>")]
protected IDictionary<int, EstimationModel> Estimations { get; set; } = new Dictionary<int, EstimationModel>();

public Task OnEstimationGiven(EstimationModel estimation) {
public Task OnEstimationGiven(EstimationGivenNotification notification) {
if (notification == null) throw new ArgumentNullException(nameof(notification));
if (notification.SessionId != this.SessionStatus.SessionId) {
return Task.CompletedTask;
}

this.InvokeAsync(() => {
this.Estimations[estimation.ParticipantId] = estimation;
this.Estimations[notification.Estimation.ParticipantId] = notification.Estimation;

this.StateHasChanged();
});
Expand Down
2 changes: 1 addition & 1 deletion src/PokerTime.Web/Pages/PokerSessionLobbyBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ protected override async Task OnInitializedAsync() {
}

public Task OnSessionStatusUpdated(SessionStatus sessionStatus) {
if (this.SessionStatus?.SessionId != this.SessionId) {
if (sessionStatus.SessionId != this.SessionId) {
return Task.CompletedTask;
}

Expand Down

0 comments on commit 41396fa

Please sign in to comment.