defmodule ToweropsWeb.InvitationController do use ToweropsWeb, :controller alias Towerops.Organizations def show(conn, %{"token" => token}) do case Organizations.get_invitation_by_token(token) do nil -> conn |> put_flash(:error, "This invitation is invalid or has expired.") |> redirect(to: ~p"/") invitation -> case conn.assigns[:current_scope] do %{user: user} when not is_nil(user) -> case Organizations.accept_invitation(invitation, user.id) do {:ok, _membership} -> conn |> put_flash(:info, "You've joined #{invitation.organization.name}!") |> redirect(to: ~p"/orgs/#{invitation.organization.slug}/settings?tab=members") {:error, _changeset} -> conn |> put_flash(:error, "Could not accept invitation. You may already be a member.") |> redirect(to: ~p"/dashboard") end _ -> redirect(conn, to: ~p"/users/register?invitation_token=#{token}") end end end end