Skip to content

Commit 47ff0c7

Browse files
committed
feat: do not authenticate deactivated users, deactivate and reactivate service account
1 parent 9494329 commit 47ff0c7

File tree

3 files changed

+14
-25
lines changed

3 files changed

+14
-25
lines changed

guard/lib/guard/front_repo/user.ex

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ defmodule Guard.FrontRepo.User do
9090
def active_user_by_token(token) do
9191
case FrontRepo.one(
9292
from(u in FrontRepo.User,
93-
where: u.authentication_token == ^token and is_nil(u.blocked_at)
93+
where:
94+
u.authentication_token == ^token and is_nil(u.blocked_at) and
95+
(is_nil(u.deactivated) or u.deactivated == false)
9496
)
9597
) do
9698
nil -> {:error, :not_found}
@@ -101,7 +103,9 @@ defmodule Guard.FrontRepo.User do
101103
def active_user_by_id(id) do
102104
case FrontRepo.one(
103105
from(u in FrontRepo.User,
104-
where: u.id == ^id and is_nil(u.blocked_at)
106+
where:
107+
u.id == ^id and is_nil(u.blocked_at) and
108+
(is_nil(u.deactivated) or u.deactivated == false)
105109
)
106110
) do
107111
nil ->
@@ -115,7 +119,9 @@ defmodule Guard.FrontRepo.User do
115119
def active_user_by_email(email) do
116120
case FrontRepo.one(
117121
from(u in FrontRepo.User,
118-
where: u.email == ^email and is_nil(u.blocked_at)
122+
where:
123+
u.email == ^email and is_nil(u.blocked_at) and
124+
(is_nil(u.deactivated) or u.deactivated == false)
119125
)
120126
) do
121127
nil ->

guard/lib/guard/store/service_account.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ defmodule Guard.Store.ServiceAccount do
2727
query =
2828
build_service_account_query()
2929
|> where([sa, u], sa.id == ^service_account_id)
30-
|> where([sa, u], is_nil(u.blocked_at) and u.deactivated == false)
30+
|> where([sa, u], is_nil(u.blocked_at))
3131

3232
case FrontRepo.one(query) do
3333
nil -> {:error, :not_found}
@@ -55,7 +55,7 @@ defmodule Guard.Store.ServiceAccount do
5555
query =
5656
build_service_account_query()
5757
|> where([sa, u], u.org_id == ^org_id)
58-
|> where([sa, u], is_nil(u.blocked_at) and u.deactivated == false)
58+
|> where([sa, u], is_nil(u.blocked_at))
5959
|> order_by([sa, u], asc: u.created_at, asc: sa.id)
6060
# Get one extra to check if there are more
6161
|> limit(^(page_size + 1))

guard/test/guard/store/service_account_test.exs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ defmodule Guard.Store.ServiceAccountTest do
3232
assert {:error, :not_found} = ServiceAccount.find(non_existent_id)
3333
end
3434

35-
test "returns error when service account is deactivated" do
35+
test "returns deactivated service account" do
3636
{:ok, %{service_account: created_sa, user: user}} = ServiceAccountFactory.insert()
3737

3838
# Deactivate the user
3939
User.changeset(user, %{deactivated: true, deactivated_at: DateTime.utc_now()})
4040
|> FrontRepo.update()
4141

42-
assert {:error, :not_found} = ServiceAccount.find(created_sa.id)
42+
assert {:ok, %{deactivated: true}} = ServiceAccount.find(created_sa.id)
4343
end
4444

4545
test "returns error when service account is blocked" do
@@ -106,23 +106,6 @@ defmodule Guard.Store.ServiceAccountTest do
106106
assert result2.next_page_token == nil
107107
end
108108

109-
test "filters out deactivated service accounts" do
110-
org_id = Ecto.UUID.generate()
111-
{:ok, %{service_account: sa1}} = ServiceAccountFactory.insert(org_id: org_id, name: "SA1")
112-
113-
{:ok, %{service_account: _sa2, user: user2}} =
114-
ServiceAccountFactory.insert(org_id: org_id, name: "SA2")
115-
116-
# Deactivate second service account
117-
User.changeset(user2, %{deactivated: true, deactivated_at: DateTime.utc_now()})
118-
|> FrontRepo.update()
119-
120-
{:ok, result} = ServiceAccount.find_by_org(org_id, 10, nil)
121-
122-
assert length(result.service_accounts) == 1
123-
assert List.first(result.service_accounts).id == sa1.id
124-
end
125-
126109
test "returns error for invalid org_id" do
127110
assert {:error, :invalid_org_id} = ServiceAccount.find_by_org("invalid-uuid", 10, nil)
128111
end
@@ -312,7 +295,7 @@ defmodule Guard.Store.ServiceAccountTest do
312295
assert user.deactivated_at != nil
313296

314297
# Verify service account is no longer findable
315-
assert {:error, :not_found} = ServiceAccount.find(sa.id)
298+
assert {:ok, %{deactivated: true}} = ServiceAccount.find(sa.id)
316299
end
317300

318301
test "returns error when service account not found" do

0 commit comments

Comments
 (0)