mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-11-08 05:04:46 +08:00
parent
65632603a3
commit
6027a0bd70
9 changed files with 27 additions and 9 deletions
|
|
@ -25,6 +25,7 @@ defmodule Livebook.Users.User do
|
|||
embedded_schema do
|
||||
field :name, :string
|
||||
field :email, :string
|
||||
field :payload, :map
|
||||
field :hex_color, Livebook.EctoTypes.HexColor
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ defmodule Livebook.ZTA.Cloudflare do
|
|||
{:ok, token} <- verify_token(encoded_token, keys),
|
||||
:ok <- verify_iss(token, identity.iss),
|
||||
{:ok, user} <- get_user_identity(encoded_token, identity.user_identity) do
|
||||
for({k, v} <- user, new_k = @fields[k], do: {new_k, v}, into: %{})
|
||||
for({k, v} <- user, new_k = @fields[k], do: {new_k, v}, into: %{payload: token.fields})
|
||||
else
|
||||
_ -> nil
|
||||
end
|
||||
|
|
|
|||
|
|
@ -48,7 +48,12 @@ defmodule Livebook.ZTA.GoogleIAP do
|
|||
with [encoded_token] <- token,
|
||||
{:ok, token} <- verify_token(encoded_token, keys),
|
||||
:ok <- verify_iss(token, identity.iss, identity.key) do
|
||||
for({k, v} <- token.fields, new_k = @fields[k], do: {new_k, v}, into: %{})
|
||||
for(
|
||||
{k, v} <- token.fields,
|
||||
new_k = @fields[k],
|
||||
do: {new_k, v},
|
||||
into: %{payload: token.fields}
|
||||
)
|
||||
else
|
||||
_ -> nil
|
||||
end
|
||||
|
|
|
|||
|
|
@ -51,7 +51,12 @@ defmodule Livebook.ZTA.Teleport do
|
|||
{:ok, %{fields: %{"exp" => exp, "nbf" => nbf}} = token} <-
|
||||
verify_token(encoded_token, jwks),
|
||||
:ok <- verify_timestamps(exp, nbf) do
|
||||
for({k, v} <- token.fields, new_k = @fields[k], do: {new_k, v}, into: %{})
|
||||
for(
|
||||
{k, v} <- token.fields,
|
||||
new_k = @fields[k],
|
||||
do: {new_k, v},
|
||||
into: %{payload: token.fields}
|
||||
)
|
||||
else
|
||||
_ ->
|
||||
nil
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ defmodule LivebookWeb.UserPlug do
|
|||
conn
|
||||
else
|
||||
identity_data = get_session(conn, :identity_data)
|
||||
user_data = User.new() |> user_data() |> Map.merge(identity_data)
|
||||
user_data = User.new() |> client_user_data() |> Map.merge(identity_data)
|
||||
encoded = user_data |> Jason.encode!() |> Base.encode64()
|
||||
|
||||
# We disable HttpOnly, so that it can be accessed on the client
|
||||
|
|
@ -62,10 +62,11 @@ defmodule LivebookWeb.UserPlug do
|
|||
end
|
||||
end
|
||||
|
||||
defp user_data(user) do
|
||||
defp client_user_data(user) do
|
||||
user
|
||||
|> Map.from_struct()
|
||||
|> Map.delete(:id)
|
||||
|> Map.delete(:payload)
|
||||
end
|
||||
|
||||
# Copies user_data from cookie to session, so that it's
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ defmodule Livebook.ZTA.CloudflareTest do
|
|||
start_supervised!({Cloudflare, context.options})
|
||||
{_conn, user} = Cloudflare.authenticate(@name, context.conn, fields: @fields)
|
||||
|
||||
assert %{id: "1234567890", email: "tuka@peralta.com", name: "Tuka Peralta"} = user
|
||||
assert %{id: "1234567890", email: "tuka@peralta.com", name: "Tuka Peralta", payload: %{}} =
|
||||
user
|
||||
end
|
||||
|
||||
test "returns nil when the user_identity fails", context do
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ defmodule Livebook.ZTA.GoogleIAPTest do
|
|||
test "returns the user when it's valid", %{options: options, conn: conn} do
|
||||
start_supervised!({GoogleIAP, options})
|
||||
{_conn, user} = GoogleIAP.authenticate(@name, conn, fields: @fields)
|
||||
assert %{id: "1234567890", email: "tuka@peralta.com"} = user
|
||||
assert %{id: "1234567890", email: "tuka@peralta.com", payload: %{}} = user
|
||||
end
|
||||
|
||||
test "returns nil when the iss is invalid", %{options: options, conn: conn} do
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ defmodule Livebook.ZTA.TeleportTest do
|
|||
test "returns the user when it's valid", %{options: options, conn: conn} do
|
||||
start_supervised!({Teleport, options})
|
||||
{_conn, user} = Teleport.authenticate(@name, conn, fields: @fields)
|
||||
assert %{id: "my-user-id", username: "myusername"} = user
|
||||
assert %{id: "my-user-id", username: "myusername", payload: %{}} = user
|
||||
end
|
||||
|
||||
test "returns nil when the exp is in the past", %{options: options, conn: conn} do
|
||||
|
|
|
|||
|
|
@ -33,7 +33,12 @@ defmodule LivebookWeb.UserPlugTest do
|
|||
|> fetch_cookies()
|
||||
|> call()
|
||||
|
||||
assert conn.cookies["lb:user_data"] != nil
|
||||
assert %{
|
||||
"email" => nil,
|
||||
"hex_color" => <<_::binary>>,
|
||||
"id" => <<_::binary>>,
|
||||
"name" => nil
|
||||
} = conn.cookies["lb:user_data"] |> Base.decode64!() |> Jason.decode!()
|
||||
end
|
||||
|
||||
test "keeps user_data cookie if present" do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue