fix service invites

This commit is contained in:
Kenneth Kehl
2024-04-24 11:20:17 -07:00
parent 27117d8983
commit f7fe270171
6 changed files with 45 additions and 72 deletions

View File

@@ -1,3 +1,5 @@
import base64
import json
import uuid
from datetime import datetime, timedelta
@@ -22,8 +24,9 @@ from app.main.forms import (
)
from app.main.views import sign_in
from app.main.views.verify import activate_user
from app.models.service import Service
from app.models.user import InvitedOrgUser, InvitedUser, User
from app.utils import hide_from_search_engines
from app.utils import hide_from_search_engines, hilite
@main.route("/register", methods=["GET", "POST"])
@@ -150,7 +153,20 @@ def set_up_your_profile():
if code and state:
access_token = sign_in._get_access_token(code, state)
user_email, user_uuid = sign_in._get_user_email_and_uuid(access_token)
redirect_url = request.args.get("next")
invite_data = state.encode("utf8")
invite_data = base64.b64decode(invite_data)
invite_data = json.loads(invite_data)
invited_service = Service.from_id(invite_data["service_id"])
invited_user_id = invite_data["invited_user_id"]
invited_user = InvitedUser.by_id(invited_user_id)
current_app.logger.debug(
hilite(
f"INVITED USER {invited_user.email_address} to service {invited_service.name}"
)
)
invited_user.accept_invite()
current_app.logger.debug(hilite("ACCEPTED INVITE"))
elif login_gov_error:
current_app.logger.error(f"login.gov error: {login_gov_error}")
@@ -174,5 +190,16 @@ def set_up_your_profile():
# activate the user
user = user_api_client.get_user_by_uuid_or_email(user_uuid, user_email)
activate_user(user["id"])
return redirect(url_for("main.show_accounts_or_dashboard", next=redirect_url))
usr = User.from_id(user["id"])
usr.add_to_service(
invited_service.id,
invite_data["permissions"],
invite_data["folder_permissions"],
invite_data["from_user_id"],
)
current_app.logger.debug(
hilite(f"Added user {usr.email_address} to service {invited_service.name}")
)
return redirect(url_for("main.show_accounts_or_dashboard"))
return render_template("views/set-up-your-profile.html", form=form)

View File

@@ -220,7 +220,6 @@ def sign_in():
if url is not None:
url = url.replace("NONCE", token)
url = url.replace("STATE", token)
return render_template(
"views/signin.html",
form=form,

View File

@@ -8,7 +8,6 @@ from app import user_api_client
from app.main import main
from app.main.forms import TwoFactorForm
from app.models.user import User
from app.notify_client import service_api_client
from app.utils.login import redirect_to_sign_in
@@ -66,35 +65,6 @@ def verify_email(token):
def activate_user(user_id):
user = User.from_id(user_id)
# This is the login.gov path
try:
login_gov_invite_data = service_api_client.retrieve_service_invite_data(
f"service-invite-{user.email_address}"
)
except BaseException: # noqa
# We will hit an exception if we can't find invite data,
# but that will be the normal sign in use case
login_gov_invite_data = None
if login_gov_invite_data:
login_gov_invite_data = json.loads(login_gov_invite_data)
service_id = login_gov_invite_data["service_id"]
user_id = user_id
permissions = login_gov_invite_data["permissions"]
folder_permissions = login_gov_invite_data["folder_permissions"]
# Actually call the back end and add the user to the service
try:
user_api_client.add_user_to_service(
service_id, user_id, permissions, folder_permissions
)
except BaseException as be: # noqa
# TODO if the user is already part of service we should ignore
current_app.logger.warning(f"Exception adding user to service {be}")
activated_user = user.activate()
activated_user.login()
return redirect(url_for("main.service_dashboard", service_id=service_id))
# TODO add org invites back in the new way
# organization_id = redis_client.raw_get(
# f"organization-invite-{user.email_address}"
@@ -111,15 +81,3 @@ def activate_user(user_id):
activated_user.login()
return redirect(url_for("main.add_service", first="first"))
def _add_invited_user_to_service(invitation):
user = User.from_id(session["user_id"])
service_id = invitation.service
user.add_to_service(
service_id,
invitation.permissions,
invitation.folder_permissions,
invitation.from_user.id,
)
return service_id