Revoke invitation #160300315
This commit is contained in:
dandds
2018-11-08 10:23:22 -05:00
committed by GitHub
8 changed files with 91 additions and 2 deletions

View File

@@ -99,3 +99,8 @@ class Invitations(object):
db.session.commit()
return invite
@classmethod
def revoke(cls, token):
invite = Invitations._get(token)
return Invitations._update_status(invite, InvitationStatus.REVOKED)

View File

@@ -50,6 +50,18 @@ class Workspaces(object):
return workspace
@classmethod
def get_for_update_member(cls, user, workspace_id):
workspace = WorkspacesQuery.get(workspace_id)
Authorization.check_workspace_permission(
user,
workspace,
Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE,
"update a workspace member",
)
return workspace
@classmethod
def get_by_request(cls, request):
return WorkspacesQuery.get_by_request(request)

View File

@@ -51,7 +51,9 @@ class WorkspaceRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
if self.status == Status.ACTIVE:
return "Active"
elif self.latest_invitation:
if self.latest_invitation.is_rejected_expired:
if self.latest_invitation.is_revoked:
return "Revoked"
elif self.latest_invitation.is_rejected_expired:
return "Invite expired"
elif self.latest_invitation.is_rejected_wrong_user:
return "Error on invite"

View File

@@ -357,10 +357,18 @@ def update_member(workspace_id, member_id):
)
@bp.route("/workspaces/invitation/<token>", methods=["GET"])
@bp.route("/workspaces/invitations/<token>", methods=["GET"])
def accept_invitation(token):
invite = Invitations.accept(g.current_user, token)
return redirect(
url_for("workspaces.show_workspace", workspace_id=invite.workspace.id)
)
@bp.route("/workspaces/<workspace_id>/invitations/<token>/revoke", methods=["POST"])
def revoke_invitation(workspace_id, token):
workspace = Workspaces.get_for_update_member(g.current_user, workspace_id)
Invitations.revoke(token)
return redirect(url_for("workspaces.workspace_members", workspace_id=workspace.id))