defmodule PlugParadoxAuth.GoogleAuthSet do import Plug.Conn def init(options) do options end def call(conn, _opts) do with %{params: %{"code" => code}} <- conn, {:ok, %{access_token: token}} <- ElixirAuthGoogle.get_token(code, conn), {:ok, %{hd: domain, email: email}} <- ElixirAuthGoogle.get_user_profile(token) do if domain != "paradox.ai" do send_resp(conn, 403, "Google user must belong to paradox.ai") else url = conn |> fetch_session |> get_session(:google_auth_success_url) conn = conn |> fetch_session |> delete_session(:google_auth_success_url) conn |> fetch_session |> put_session(:google_user, email) |> put_resp_header("location", url) |> send_resp(302, "text/html") end else error -> conn |> send_resp(400, inspect(error)) end end end