Merge portfolio members routes with invitations.
`portfolios.create_member` now just sends an invitation, so it should be with the invitation routes. This also de-duplicates the function for sending a portfolio invitation email.
This commit is contained in:
@@ -4,7 +4,6 @@ from operator import attrgetter
|
||||
portfolios_bp = Blueprint("portfolios", __name__)
|
||||
|
||||
from . import index
|
||||
from . import members
|
||||
from . import invitations
|
||||
from . import admin
|
||||
from atst.utils.context_processors import portfolio as portfolio_context_processor
|
||||
|
@@ -1,20 +1,23 @@
|
||||
from flask import g, redirect, url_for, render_template
|
||||
from flask import g, redirect, url_for, render_template, request as http_request
|
||||
|
||||
from . import portfolios_bp
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.domain.exceptions import AlreadyExistsError
|
||||
from atst.domain.invitations import PortfolioInvitations
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.models import Permissions
|
||||
from atst.queue import queue
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
import atst.forms.portfolio_member as member_forms
|
||||
|
||||
|
||||
def send_invite_email(owner_name, token, new_member_email):
|
||||
def send_portfolio_invitation(invitee_email, inviter_name, token):
|
||||
body = render_template(
|
||||
"emails/portfolio/invitation.txt", owner=owner_name, token=token
|
||||
"emails/portfolio/invitation.txt", owner=inviter_name, token=token
|
||||
)
|
||||
queue.send_mail(
|
||||
[new_member_email],
|
||||
"{} has invited you to a JEDI Cloud Portfolio".format(owner_name),
|
||||
[invitee_email],
|
||||
"{} has invited you to a JEDI cloud portfolio".format(inviter_name),
|
||||
body,
|
||||
)
|
||||
|
||||
@@ -51,7 +54,7 @@ def revoke_invitation(portfolio_id, portfolio_token):
|
||||
@user_can(Permissions.EDIT_PORTFOLIO_USERS, message="resend invitation")
|
||||
def resend_invitation(portfolio_id, portfolio_token):
|
||||
invite = PortfolioInvitations.resend(g.current_user, portfolio_token)
|
||||
send_invite_email(g.current_user.full_name, invite.token, invite.email)
|
||||
send_portfolio_invitation(invite.email, g.current_user.full_name, invite.token)
|
||||
flash("resend_portfolio_invitation", user_name=invite.user_name)
|
||||
return redirect(
|
||||
url_for(
|
||||
@@ -61,3 +64,38 @@ def resend_invitation(portfolio_id, portfolio_token):
|
||||
_anchor="portfolio-members",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@portfolios_bp.route("/portfolios/<portfolio_id>/members/new", methods=["POST"])
|
||||
@user_can(Permissions.CREATE_PORTFOLIO_USERS, message="create new portfolio member")
|
||||
def invite_member(portfolio_id):
|
||||
portfolio = Portfolios.get(g.current_user, portfolio_id)
|
||||
form = member_forms.NewForm(http_request.form)
|
||||
|
||||
if form.validate():
|
||||
try:
|
||||
invite = Portfolios.invite(portfolio, g.current_user, form.update_data)
|
||||
send_portfolio_invitation(
|
||||
invite.email, g.current_user.full_name, invite.token
|
||||
)
|
||||
|
||||
flash(
|
||||
"new_portfolio_member", user_name=invite.user_name, portfolio=portfolio
|
||||
)
|
||||
|
||||
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(
|
||||
"portfolios.admin",
|
||||
portfolio_id=portfolio_id,
|
||||
fragment="portfolio-members",
|
||||
_anchor="portfolio-members",
|
||||
)
|
||||
)
|
||||
|
@@ -1,57 +0,0 @@
|
||||
from flask import render_template, request as http_request, g, redirect, url_for
|
||||
|
||||
from . import portfolios_bp
|
||||
from atst.domain.exceptions import AlreadyExistsError
|
||||
from atst.domain.portfolios import Portfolios
|
||||
import atst.forms.portfolio_member as member_forms
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.queue import queue
|
||||
|
||||
|
||||
def send_portfolio_invitation(invitee_email, inviter_name, token):
|
||||
body = render_template(
|
||||
"emails/portfolio/invitation.txt", owner=inviter_name, token=token
|
||||
)
|
||||
queue.send_mail(
|
||||
[invitee_email],
|
||||
"{} has invited you to a JEDI cloud portfolio".format(inviter_name),
|
||||
body,
|
||||
)
|
||||
|
||||
|
||||
@portfolios_bp.route("/portfolios/<portfolio_id>/members/new", methods=["POST"])
|
||||
@user_can(Permissions.CREATE_PORTFOLIO_USERS, message="create new portfolio member")
|
||||
def create_member(portfolio_id):
|
||||
portfolio = Portfolios.get(g.current_user, portfolio_id)
|
||||
form = member_forms.NewForm(http_request.form)
|
||||
|
||||
if form.validate():
|
||||
try:
|
||||
invite = Portfolios.invite(portfolio, g.current_user, form.update_data)
|
||||
send_portfolio_invitation(
|
||||
invite.email, g.current_user.full_name, invite.token
|
||||
)
|
||||
|
||||
flash(
|
||||
"new_portfolio_member", user_name=invite.user_name, portfolio=portfolio
|
||||
)
|
||||
|
||||
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(
|
||||
"portfolios.admin",
|
||||
portfolio_id=portfolio_id,
|
||||
fragment="portfolio-members",
|
||||
_anchor="portfolio-members",
|
||||
)
|
||||
)
|
Reference in New Issue
Block a user