Route for adding new application member
- domain method for creating a new application member - ApplicationInvitations domain class - nested form for adding a new user that holds user data, application permission sets, and environment roles - Invitation service can infer invitation type based on role it's given - new invitation email templates
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
from flask import render_template
|
||||
from flask import render_template, request as http_request, g, url_for, redirect
|
||||
|
||||
|
||||
from . import applications_bp
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.forms.application_member import NewForm as NewMemberForm
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.services.invitation import Invitation as InvitationService
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.utils.localization import translate
|
||||
|
||||
|
||||
@@ -47,3 +50,45 @@ def team(application_id):
|
||||
application=application,
|
||||
environment_users=environment_users,
|
||||
)
|
||||
|
||||
|
||||
@applications_bp.route("/application/<application_id>/members/new", methods=["POST"])
|
||||
@user_can(
|
||||
Permissions.CREATE_APPLICATION_MEMBER, message="create new application member"
|
||||
)
|
||||
def create_member(application_id):
|
||||
application = Applications.get(application_id)
|
||||
form = NewMemberForm(http_request.form)
|
||||
|
||||
if form.validate():
|
||||
try:
|
||||
member = Applications.create_member(
|
||||
application,
|
||||
form.user_data.data,
|
||||
permission_sets=form.permission_sets.data,
|
||||
environment_roles_data=form.environment_roles.data,
|
||||
)
|
||||
|
||||
invite_service = InvitationService(
|
||||
g.current_user, member, form.user_data.data.get("email")
|
||||
)
|
||||
invite_service.invite()
|
||||
|
||||
flash("new_portfolio_member", new_member=member)
|
||||
|
||||
except AlreadyExistsError:
|
||||
return render_template(
|
||||
"error.html", message="There was an error processing your request."
|
||||
)
|
||||
else:
|
||||
pass
|
||||
# TODO: flash error message
|
||||
|
||||
return redirect(
|
||||
url_for(
|
||||
"applications.team",
|
||||
application_id=application_id,
|
||||
fragment="application-members",
|
||||
_anchor="application-members",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -9,7 +9,9 @@ from atst.models.permissions import Permissions
|
||||
|
||||
|
||||
def send_invite_email(owner_name, token, new_member_email):
|
||||
body = render_template("emails/invitation.txt", owner=owner_name, token=token)
|
||||
body = render_template(
|
||||
"emails/portfolio/invitation.txt", owner=owner_name, token=token
|
||||
)
|
||||
queue.send_mail(
|
||||
[new_member_email],
|
||||
"{} has invited you to a JEDI Cloud Portfolio".format(owner_name),
|
||||
|
||||
Reference in New Issue
Block a user