When new member is added, an invite is sent to the new member
This commit is contained in:
parent
b8fc92cd14
commit
1c444c726c
@ -24,6 +24,8 @@ from atst.forms.workspace import WorkspaceForm
|
|||||||
from atst.forms.data import ENVIRONMENT_ROLES, ENV_ROLE_MODAL_DESCRIPTION
|
from atst.forms.data import ENVIRONMENT_ROLES, ENV_ROLE_MODAL_DESCRIPTION
|
||||||
from atst.domain.authz import Authorization
|
from atst.domain.authz import Authorization
|
||||||
from atst.models.permissions import Permissions
|
from atst.models.permissions import Permissions
|
||||||
|
from atst.domain.invitations import Invitations
|
||||||
|
from atst.queue import queue
|
||||||
|
|
||||||
bp = Blueprint("workspaces", __name__)
|
bp = Blueprint("workspaces", __name__)
|
||||||
|
|
||||||
@ -218,6 +220,17 @@ def new_member(workspace_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def send_invite_email(owner_name, invite_id, new_member_email):
|
||||||
|
body = render_template(
|
||||||
|
"emails/invitation.txt", owner=owner_name, invite_id=invite_id
|
||||||
|
)
|
||||||
|
queue.send_mail(
|
||||||
|
[new_member_email],
|
||||||
|
"{} has invited you to a JEDI Cloud Workspace".format(owner_name),
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/workspaces/<workspace_id>/members/new", methods=["POST"])
|
@bp.route("/workspaces/<workspace_id>/members/new", methods=["POST"])
|
||||||
def create_member(workspace_id):
|
def create_member(workspace_id):
|
||||||
workspace = Workspaces.get(g.current_user, workspace_id)
|
workspace = Workspaces.get(g.current_user, workspace_id)
|
||||||
@ -226,6 +239,11 @@ def create_member(workspace_id):
|
|||||||
if form.validate():
|
if form.validate():
|
||||||
try:
|
try:
|
||||||
new_member = Workspaces.create_member(g.current_user, workspace, form.data)
|
new_member = Workspaces.create_member(g.current_user, workspace, form.data)
|
||||||
|
invite = Invitations.create(workspace, new_member.user)
|
||||||
|
send_invite_email(
|
||||||
|
g.current_user.full_name, invite.id, new_member.user.email
|
||||||
|
)
|
||||||
|
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"workspaces.workspace_members",
|
"workspaces.workspace_members",
|
||||||
@ -318,3 +336,8 @@ def update_member(workspace_id, member_id):
|
|||||||
workspace=workspace,
|
workspace=workspace,
|
||||||
member=member,
|
member=member,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/workspaces/invitation/<invite_id>", methods=["GET"])
|
||||||
|
def accept_invitation(invite_id):
|
||||||
|
pass
|
||||||
|
12
templates/emails/invitation.txt
Normal file
12
templates/emails/invitation.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Join this JEDI Cloud Workspace
|
||||||
|
{{ owner }} has invited you to join a JEDI Cloud Workspace. Login now to view or use your JEDI Cloud resources.
|
||||||
|
|
||||||
|
{{ url_for("workspaces.accept_invitation", invite_id=invite_id, _external=True) }}
|
||||||
|
|
||||||
|
What is JEDI Cloud?
|
||||||
|
JEDI Cloud is a DoD enterprise-wide solution for commercial cloud services.
|
||||||
|
|
||||||
|
What is a JEDI Cloud Workspace?
|
||||||
|
A JEDI Cloud Workspace is where you may access and manage the cloud resources associated with your projects and environments.
|
||||||
|
|
||||||
|
JEDI Cloud is managed by the Cloud Computing Program Office. Learn more at jedi.cloud.
|
@ -7,6 +7,7 @@ from atst.domain.projects import Projects
|
|||||||
from atst.domain.environments import Environments
|
from atst.domain.environments import Environments
|
||||||
from atst.domain.environment_roles import EnvironmentRoles
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
from atst.models.workspace_user import WorkspaceUser
|
from atst.models.workspace_user import WorkspaceUser
|
||||||
|
from atst.queue import queue
|
||||||
|
|
||||||
|
|
||||||
def test_user_with_permission_has_budget_report_link(client, user_session):
|
def test_user_with_permission_has_budget_report_link(client, user_session):
|
||||||
@ -181,6 +182,8 @@ def test_create_member(client, user_session):
|
|||||||
workspace = WorkspaceFactory.create()
|
workspace = WorkspaceFactory.create()
|
||||||
Workspaces._create_workspace_role(owner, workspace, "admin")
|
Workspaces._create_workspace_role(owner, workspace, "admin")
|
||||||
user_session(owner)
|
user_session(owner)
|
||||||
|
queue_length = len(queue.get_queue())
|
||||||
|
|
||||||
response = client.post(
|
response = client.post(
|
||||||
url_for("workspaces.create_member", workspace_id=workspace.id),
|
url_for("workspaces.create_member", workspace_id=workspace.id),
|
||||||
data={
|
data={
|
||||||
@ -195,6 +198,8 @@ def test_create_member(client, user_session):
|
|||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert user.has_workspaces
|
assert user.has_workspaces
|
||||||
|
assert user.invitations
|
||||||
|
assert len(queue.get_queue()) == queue_length + 1
|
||||||
|
|
||||||
|
|
||||||
def test_permissions_for_view_member(client, user_session):
|
def test_permissions_for_view_member(client, user_session):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user