Skip to content

Commit c32c9d8

Browse files
committed
chore: add more logging for user authentication
1 parent e5f3663 commit c32c9d8

File tree

5 files changed

+64
-9
lines changed

5 files changed

+64
-9
lines changed

ee/rbac/lib/rbac/utils/http.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ defmodule Rbac.Utils.Http do
5757
{:ok, Plug.Crypto.non_executable_binary_to_term(encoded_state, [:safe]), conn}
5858

5959
:error ->
60+
Logger.warn("State key: #{key} not found in cookies")
6061
{:error, "State key: #{key} not found in cookies"}
6162
end
6263
end

front/lib/front_web/plugs/fetch_permissions.ex

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,17 @@ defmodule FrontWeb.Plugs.FetchPermissions do
2525
user_id = conn.assigns.user_id
2626
org_id = conn.assigns.organization_id
2727

28-
has_permissions =
29-
if scope == "org" do
30-
Front.RBAC.Permissions.has?(user_id, org_id, permissions)
31-
else
32-
Front.RBAC.Permissions.has?(user_id, org_id, conn.assigns.project.id, permissions)
33-
end
28+
if is_nil(user_id) do
29+
Logger.info(
30+
"[FetchPermissions] Missing user_id while fetching permissions scope=#{scope} org_id=#{inspect(org_id)} path=#{conn.request_path}"
31+
)
32+
end
33+
34+
if scope == "org" do
35+
Front.RBAC.Permissions.has?(user_id, org_id, permissions)
36+
else
37+
Front.RBAC.Permissions.has?(user_id, org_id, conn.assigns.project.id, permissions)
38+
end
3439

3540
Plug.Conn.assign(conn, :permissions, has_permissions)
3641
end

front/lib/front_web/plugs/public_page_access.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ defmodule FrontWeb.Plugs.PublicPageAccess do
2020
Plug.Conn.assign(conn, :authorization, :guest)
2121

2222
true ->
23+
project = conn.assigns[:project]
24+
25+
Logger.info(
26+
"[PageAccess] Anonymous/unauthorized access blocked: path=#{conn.request_path} org_id=#{inspect(conn.assigns[:organization_id])} project_id=#{inspect(project && project.id)} public?=#{inspect(project && project.public)} user_id=#{inspect(conn.assigns[:user_id])}"
27+
)
28+
2329
conn |> render_404()
2430
end
2531
rescue

guard/lib/guard/grpc_servers/auth_server.ex

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,23 @@ defmodule Guard.GrpcServers.AuthServer do
2424
@spec authenticate_with_cookie(Auth.AuthenticateWithCookieRequest.t(), GRPC.Server.Stream.t()) ::
2525
Auth.AuthenticateResponse.t()
2626
def authenticate_with_cookie(%Auth.AuthenticateWithCookieRequest{cookie: cookie}, _stream) do
27+
cookie_hash =
28+
:crypto.hash(:md5, cookie)
29+
|> Base.encode16(case: :lower)
30+
31+
Logger.debug("[AuthServer] authenticate_with_cookie start hash=#{cookie_hash}")
32+
2733
observe("grpc.authentication.authenticate_with_cookie", fn ->
2834
case find_user_by_cookie(cookie) do
2935
{:ok, {user, id_provider, ip_address, user_agent}} ->
36+
Logger.debug(
37+
"[AuthServer] authenticate_with_cookie user_id=#{user.id} provider=#{id_provider} ip=#{ip_address}"
38+
)
39+
3040
respond_with_user(user, id_provider, ip_address, user_agent)
3141

3242
{:error, :user, :not_found} ->
43+
Logger.debug("[AuthServer] authenticate_with_cookie not found hash=#{cookie_hash}")
3344
respond_false()
3445
end
3546
end)
@@ -70,23 +81,37 @@ defmodule Guard.GrpcServers.AuthServer do
7081
end
7182
end
7283

73-
defp find_user_by_cookie(""), do: {:error, :user, :not_found}
84+
defp find_user_by_cookie("") do
85+
Logger.debug("[AuthServer] find_user_by_cookie empty cookie")
86+
{:error, :user, :not_found}
87+
end
7488

7589
defp find_user_by_cookie(cookie) do
7690
case Guard.Session.deserialize_from_cookie(cookie) do
7791
{:ok, {id_provider, user_data, session_data, extras}} ->
92+
Logger.debug(
93+
"[AuthServer] find_user_by_cookie deserialized provider=#{id_provider} session_keys=#{inspect(Map.keys(session_data))} extras=#{inspect(Map.keys(extras))}"
94+
)
95+
7896
with {:ok, user_data, extras} <- process_session(session_data, user_data, extras),
7997
{:ok, user} <- get_user(user_data) do
98+
Logger.debug(
99+
"[AuthServer] find_user_by_cookie resolved user_id=#{user.id} provider=#{id_provider}"
100+
)
101+
80102
{:ok, {user, id_provider, extras.ip_address, extras.user_agent}}
81103
else
82104
{:error, :user_not_found} ->
105+
Logger.debug("[AuthServer] find_user_by_cookie user not found after session processing")
83106
{:error, :user, :not_found}
84107

85108
{:error, :session_process_error} ->
109+
Logger.debug("[AuthServer] find_user_by_cookie session processing error")
86110
{:error, :user, :not_found}
87111
end
88112

89113
{:error, :invalid_cookie} ->
114+
Logger.debug("[AuthServer] find_user_by_cookie invalid cookie format")
90115
{:error, :user, :not_found}
91116
end
92117
end
@@ -111,30 +136,47 @@ defmodule Guard.GrpcServers.AuthServer do
111136
{:ok, Map.t(), Map.t()}
112137
| {:error, :session_process_error}
113138
defp process_session(%{id: session_id}, _, _) do
139+
Logger.debug("[AuthServer] process_session OIDC id=#{session_id}")
140+
114141
case Guard.Store.OIDCSession.get(session_id) do
115142
{:error, :not_found} ->
143+
Logger.debug("[AuthServer] process_session session not found id=#{session_id}")
116144
{:error, :session_process_error}
117145

118146
{:ok, %Guard.Repo.OIDCSession{refresh_token_enc: nil}} ->
147+
Logger.debug("[AuthServer] process_session refresh_token missing id=#{session_id}")
119148
{:error, :session_process_error}
120149

121150
{:ok, session} ->
122151
extras = %{ip_address: session.ip_address, user_agent: session.user_agent}
123152

124153
if Guard.Store.OIDCSession.expired?(session) do
154+
Logger.debug("[AuthServer] process_session expired id=#{session_id} user_id=#{session.user_id}")
155+
125156
case refresh_session(session) do
126157
{:ok, session} -> {:ok, %{id: session.user_id}, extras}
127-
{:error, _} -> {:error, :session_process_error}
158+
{:error, reason} ->
159+
Logger.debug(
160+
"[AuthServer] process_session refresh failed id=#{session_id} user_id=#{session.user_id} reason=#{inspect(reason)}"
161+
)
162+
163+
{:error, :session_process_error}
128164
end
129165
else
166+
Logger.debug("[AuthServer] process_session valid id=#{session_id} user_id=#{session.user_id}")
130167
{:ok, %{id: session.user_id}, extras}
131168
end
132169
end
133170
end
134171

135-
defp process_session(%{}, user_data, extras), do: {:ok, user_data, extras}
172+
defp process_session(%{}, user_data, extras)do
173+
Logger.debug("[AuthServer] process_session no session_id, skipping")
174+
{:ok, user_data, extras}
175+
end
136176

137177
defp refresh_session(session) do
178+
Logger.debug("[AuthServer] refresh_session id=#{session.id} user_id=#{session.user_id}")
179+
138180
with {:ok, refresh_token} <-
139181
Guard.OIDC.Token.decrypt(session.refresh_token_enc, session.user_id),
140182
{:ok, tokens} <- refresh_token(refresh_token, session.user),

guard/lib/guard/utils.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ defmodule Guard.Utils.Http do
226226
{:ok, Plug.Crypto.non_executable_binary_to_term(encoded_state, [:safe]), conn}
227227

228228
:error ->
229+
Logger.warn("State key: #{key} not found in cookies")
229230
{:error, "State key: #{key} not found in cookies"}
230231
end
231232
end

0 commit comments

Comments
 (0)