Skip to content

Commit 56d121f

Browse files
committed
fix sudo for django auth?
1 parent a1f323f commit 56d121f

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

python/nav/web/auth/middleware.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@
3131
ensure_account,
3232
authorization_not_required,
3333
get_account,
34+
set_account,
3435
get_user,
3536
)
36-
from nav.web.auth.sudo import get_sudoer
37+
from nav.web.auth.sudo import get_sudoer, set_sudo_operator
3738
from nav.web.utils import is_ajax
3839

3940

@@ -78,9 +79,7 @@ def process_request(self, request: HttpRequest) -> None:
7879
ensure_account(request)
7980

8081
if sudo_operator is not None:
81-
# XXX: sudo: Account.sudo_operator should be set by function!
82-
request.account.sudo_operator = sudo_operator
83-
request.user.sudo_operator = sudo_operator
82+
set_sudo_operator(request, sudo_operator)
8483

8584
_logger.debug(
8685
'AuthenticationMiddleware EXIT (session: %s, account: %s) from "%s"',
@@ -133,10 +132,10 @@ def process_request(self, request):
133132
)
134133

135134
user = get_user(request) # NOT lazy!
136-
request.user = user
137-
request.account = user # remove this eventually
135+
set_account(request, user, cycle_session_id=False)
138136

139137
# NAV-specific sudo method
138+
# XXX: sudo
140139
sudo_operator = get_sudoer(request) # Account or None
141140
if sudo_operator:
142141
logged_in = sudo_operator or user
@@ -146,5 +145,4 @@ def process_request(self, request):
146145
user.login,
147146
request.get_full_path(),
148147
)
149-
request.account.sudo_operator = sudo_operator
150-
request.user.sudo_operator = sudo_operator
148+
set_sudo_operator(request, sudo_operator)

python/nav/web/auth/sudo.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def sudo(request: HttpRequest, other_user: Account) -> None:
4343
if not account.is_admin():
4444
# Check if sudoer is acctually admin
4545
raise SudoNotAdminError()
46-
original_user = request.account
46+
original_user = get_account(request)
4747
request.session[SUDOER_ID_VAR] = original_user.id
4848
set_account(request, other_user)
4949
_logger.info('Sudo: "%s" acting as "%s"', original_user, other_user)
@@ -95,6 +95,11 @@ def get_sudoer(request: HttpRequest) -> Optional[Account]:
9595
return Account.objects.get(id=request.session[SUDOER_ID_VAR])
9696

9797

98+
def set_sudo_operator(request, sudo_operator):
99+
request.account.sudo_operator = sudo_operator
100+
request.user.sudo_operator = sudo_operator
101+
102+
98103
class SudoRecursionError(Exception):
99104
msg = "Already posing as another user"
100105

0 commit comments

Comments
 (0)