Skip to content

Commit

Permalink
Fixing security vunerability
Browse files Browse the repository at this point in the history
  • Loading branch information
d4nt committed Nov 23, 2019
1 parent 4fcb2ff commit 57b7008
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 17 deletions.
42 changes: 27 additions & 15 deletions Web/Controllers/InvitationsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,10 @@ public ActionResult Index()
.Include(c => c.CreatedBy)
.GroupBy(c => c.OrganisationId))
{
InvitationViewModel viewModel = new InvitationViewModel();
InvitationViewModel viewModel = new InvitationViewModel
{
OrganisationInviteId = orgGrp.First().OrganisationInviteId
};

Organisation organisation = db.Organisations.First(ba => ba.OrganisationId == orgGrp.Key);
viewModel.OrganisationId = organisation.OrganisationId;
Expand Down Expand Up @@ -119,22 +122,20 @@ public ActionResult Accept(int id)
return NotFound("Could not find user");
}

var organisation = db.Organisations.FirstOrDefault(ba => ba.OrganisationId == id);
var invite = db.OrganisationInvites.FirstOrDefault(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.AcceptedOn == null && uc.RejectedOn == null && uc.OrganisationInviteId == id);

if (organisation == null)
if (invite == null)
{
return NotFound("Organisation not found");
return NotFound("Invite not found");
}

// remove other invitations to other organisations
db.OrganisationInvites.RemoveWhere(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.OrganisationId != id);
var organisation = db.Organisations.FirstOrDefault(ba => ba.OrganisationId == invite.OrganisationId);

db.SaveChanges();
if (organisation == null)
{
return NotFound("Organisation not found");
}

var invitationsToAccept = db.OrganisationInvites
.Where(uc => uc.InviteEmail == CurrentUser.Email && uc.OrganisationId == id)
.ToList();

List<DatabaseConnection> leave = new List<DatabaseConnection>();
List<DatabaseConnection> migrate = new List<DatabaseConnection>();

Expand Down Expand Up @@ -173,11 +174,16 @@ public ActionResult Accept(int id)

CurrentUser.OrganisationId = organisation.OrganisationId;

foreach (var invite in invitationsToAccept)
invite.AcceptedOn = DateTime.Now;

// reject other invitations to other organisations
var invitesToReject = db.OrganisationInvites.Where(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.OrganisationInviteId != invite.OrganisationInviteId);

foreach (var inviteToReject in invitesToReject)
{
invite.AcceptedOn = DateTime.Now;
inviteToReject.RejectedOn = DateTime.Now;
}

db.SaveChanges();

return RedirectToAction("Index", "Home");
Expand All @@ -190,7 +196,13 @@ public ActionResult Reject(int id)
return NotFound("Could not find user");
}

var invite = db.OrganisationInvites.First(i => i.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && i.OrganisationId == id && i.AcceptedOn == null && i.RejectedOn == null);
var invite = db.OrganisationInvites.FirstOrDefault(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.AcceptedOn == null && uc.RejectedOn == null && uc.OrganisationInviteId == id);

if (invite == null)
{
return NotFound("Invite not found");
}

invite.RejectedOn = DateTime.Now;

db.SaveChanges();
Expand Down
2 changes: 2 additions & 0 deletions Web/ViewModels/InvitationViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ public string Description

public int OrganisationId { get; set; }

public int OrganisationInviteId { get; set; }

public bool IsOrganisationAdmin { get; set; }

public List<string> DatabasesMerged { get; set; }
Expand Down
4 changes: 2 additions & 2 deletions Web/Views/Invitations/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@
}
<div class="row">
<div class="col-md-6">
@Html.ActionLink("Accept", "Accept", new { id = item.OrganisationId }, new { @class = "btn btn-lg btn-success" })
@Html.ActionLink("Accept", "Accept", new { id = item.OrganisationInviteId }, new { @class = "btn btn-lg btn-success" })
</div>

<div class="col-md-6">
@Html.ActionLink("Reject", "Reject", new { id = item.OrganisationId }, new { @class = "btn btn-lg btn-warning rhs-delete" })
@Html.ActionLink("Reject", "Reject", new { id = item.OrganisationInviteId }, new { @class = "btn btn-lg btn-warning rhs-delete" })
</div>
</div>
</div>
Expand Down

0 comments on commit 57b7008

Please sign in to comment.