Skip to content

Commit 57b7008

Browse files
committed
Fixing security vunerability
1 parent 4fcb2ff commit 57b7008

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed

Web/Controllers/InvitationsController.cs

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ public ActionResult Index()
6161
.Include(c => c.CreatedBy)
6262
.GroupBy(c => c.OrganisationId))
6363
{
64-
InvitationViewModel viewModel = new InvitationViewModel();
64+
InvitationViewModel viewModel = new InvitationViewModel
65+
{
66+
OrganisationInviteId = orgGrp.First().OrganisationInviteId
67+
};
6568

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

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

124-
if (organisation == null)
127+
if (invite == null)
125128
{
126-
return NotFound("Organisation not found");
129+
return NotFound("Invite not found");
127130
}
128131

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

132-
db.SaveChanges();
134+
if (organisation == null)
135+
{
136+
return NotFound("Organisation not found");
137+
}
133138

134-
var invitationsToAccept = db.OrganisationInvites
135-
.Where(uc => uc.InviteEmail == CurrentUser.Email && uc.OrganisationId == id)
136-
.ToList();
137-
138139
List<DatabaseConnection> leave = new List<DatabaseConnection>();
139140
List<DatabaseConnection> migrate = new List<DatabaseConnection>();
140141

@@ -173,11 +174,16 @@ public ActionResult Accept(int id)
173174

174175
CurrentUser.OrganisationId = organisation.OrganisationId;
175176

176-
foreach (var invite in invitationsToAccept)
177+
invite.AcceptedOn = DateTime.Now;
178+
179+
// reject other invitations to other organisations
180+
var invitesToReject = db.OrganisationInvites.Where(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.OrganisationInviteId != invite.OrganisationInviteId);
181+
182+
foreach (var inviteToReject in invitesToReject)
177183
{
178-
invite.AcceptedOn = DateTime.Now;
184+
inviteToReject.RejectedOn = DateTime.Now;
179185
}
180-
186+
181187
db.SaveChanges();
182188

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

193-
var invite = db.OrganisationInvites.First(i => i.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && i.OrganisationId == id && i.AcceptedOn == null && i.RejectedOn == null);
199+
var invite = db.OrganisationInvites.FirstOrDefault(uc => uc.InviteEmail.ToLower() == CurrentUser.Email.ToLower() && uc.AcceptedOn == null && uc.RejectedOn == null && uc.OrganisationInviteId == id);
200+
201+
if (invite == null)
202+
{
203+
return NotFound("Invite not found");
204+
}
205+
194206
invite.RejectedOn = DateTime.Now;
195207

196208
db.SaveChanges();

Web/ViewModels/InvitationViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public string Description
5858

5959
public int OrganisationId { get; set; }
6060

61+
public int OrganisationInviteId { get; set; }
62+
6163
public bool IsOrganisationAdmin { get; set; }
6264

6365
public List<string> DatabasesMerged { get; set; }

Web/Views/Invitations/Index.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@
4444
}
4545
<div class="row">
4646
<div class="col-md-6">
47-
@Html.ActionLink("Accept", "Accept", new { id = item.OrganisationId }, new { @class = "btn btn-lg btn-success" })
47+
@Html.ActionLink("Accept", "Accept", new { id = item.OrganisationInviteId }, new { @class = "btn btn-lg btn-success" })
4848
</div>
4949

5050
<div class="col-md-6">
51-
@Html.ActionLink("Reject", "Reject", new { id = item.OrganisationId }, new { @class = "btn btn-lg btn-warning rhs-delete" })
51+
@Html.ActionLink("Reject", "Reject", new { id = item.OrganisationInviteId }, new { @class = "btn btn-lg btn-warning rhs-delete" })
5252
</div>
5353
</div>
5454
</div>

0 commit comments

Comments
 (0)