-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: prevent potential email abuse on invitations endpoint #4569
fix: prevent potential email abuse on invitations endpoint #4569
Conversation
5dd657f
to
3433272
Compare
3433272
to
28622c7
Compare
const unconsumedInvitations = await MembershipInvitation.findAll({ | ||
where: { | ||
workspaceId: owner.id, | ||
status: ["pending", "revoked"], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we account for revoked
in there?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah because otherwise you can just revoke and re-send. Maybe we should discard revoked ones that are too old ? TBH if you have more than a few revoked it's fishy
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But what happens when you have revoked 50 invitations, you can't invite anymore?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Simplified the whole thing. Now were just looking at invitations from the last 24 hours. IMO it's enough to limit abuse.
) | ||
.map((i) => i.inviteEmail.toLowerCase().trim()) | ||
); | ||
if ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Assuming one email address already has a fresh recent invitation, the entire operation will fail?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, would you prefer that we only filter those out ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean as long as we have an explicit error message in the UI and the user does not lose its email addresses list, I'm fine.
d4b0f9f
to
e120d41
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
}); | ||
} | ||
const emailsWithRecentUnconsumedInvitations = new Set( | ||
unconsumedInvitations.map((i) => i.inviteEmail.toLowerCase().trim()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we do this when creating those invitations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ceinture bretelles
* fix: prevent potential email abuse on invitations endpoint * nit * simplify * nits --------- Co-authored-by: Henry Fontanier <[email protected]>
Description
fixes #4555
Limits the # of email invitations a workspace can send every day (50).
Prevents sending several invitations to the same email for the same workspace within a day
Risk
Deploy Plan