Conversation
- Introduced ProjectInviteListResponse model for listing project invites. - Added ListProjectInvitesParams for pagination support in listing invites. - Implemented RevokeProjectInvite, ListProjectInvites, AcceptProjectInvite, and GetInviteDetails methods in the Client interface. - Created corresponding request and response parsing functions for project invite operations. - Enhanced AdminsStore with HardDeleteProjectAdmin method for direct deletion of project admins. - Expanded InvitesStore with methods to handle project invites: GetInviteByToken, AcceptProjectInvite, RevokeProjectInvite, and ListProjectInvites. - Updated database migration to enforce unique constraint on invite tokens.
- Added a new "Invites" section in the settings menu with a UserPlus icon. - Enhanced user search functionality in the ListDetail component. - Updated OrganizationEventRuleEdit to improve accessibility with better aria-labels. - Modified the InviteController to support filtering project invites by status, role, and expiration dates. - Updated OpenAPI resources to include new query parameters for invite management. - Refactored invite handling in the management store to support new filtering options. - Changed database table references from "invites" to "project_invites" for clarity. - Implemented revoke project invite functionality with proper middleware handling.
Co-authored-by: Copilot <copilot@github.com>
…rchy logic Co-authored-by: Copilot <copilot@github.com>
…rtain contexts Co-authored-by: Copilot <copilot@github.com>
…okens - Updated API paths to accept a combined token and nonce pair for invite acceptance and revocation. - Modified ProjectInvite interface to include nonce. - Implemented nonce generation and encryption in the invite creation process. - Adjusted database schema to store nonce alongside the invite token. - Enhanced invite handling logic to support nonce verification during acceptance and revocation. - Updated frontend components to handle the new token-nonce structure. - Added necessary environment configurations for invite secret key. Co-authored-by: Copilot <copilot@github.com>
…ment for project admins
…e token generation failure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
feat: project invite system (#218)
This adds a full invite system for projects, allowing admins to invite users by email with a configurable role and expiry.
Backend
project_invitestable with token, nonce, role, expiry, and revoke/accept timestampsINVITES_SECRET_KEY, with the decrypted token exposed to the frontend for URL useGetProjectandListProjectsnow scope to the requesting admin viaproject_admins, replacing the previous org-scoped query and hardcoded"admin"roleProjectRoleTupleshelper andinvitesresource to the RBAC model (admin-only)multiKeyfuncFrontend
AcceptInvitepage at/invites/:tokenhandles unauthenticated users (login/register prompt), wrong account detection, and auto-accept after registration via?autoAccept=1/registerroute wrapping Clerk'sSignUpskipAuthRedirect