Skip to content

Commit 5544ee0

Browse files
committed
feat: improve lockout mechanism
1 parent e128a84 commit 5544ee0

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

intranet/apps/auth/backends.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class PamAuthenticationResult(enum.Enum):
2222
FAILURE = 0 # Authentication failed
2323
SUCCESS = 1 # Authentication succeeded
2424
EXPIRED = -1 # Password expired; needs reset
25-
LOCKED = -2 # User locked out due to incorrect attempts
25+
LOCKED = 6 # User locked out due to incorrect attempts
2626

2727

2828
class PamAuthenticationBackend:
@@ -73,15 +73,15 @@ def pam_auth(username, password):
7373
realm = settings.CSL_REALM
7474
pam_authenticator = pam.pam()
7575
full_username = f"{username}@{realm}"
76-
result = pam_authenticator.authenticate(full_username, password)
76+
result = pam_authenticator.authenticate(full_username, password, service="ion-login")
7777

7878
if result:
7979
result = PamAuthenticationResult.SUCCESS
8080
logger.debug("PAM authorized %s@%s", username, realm)
8181
else:
8282
logger.debug("PAM failed to authorize %s", username)
8383
result = PamAuthenticationResult.FAILURE
84-
if "have exhausted maximum number of retries for service" in pam_authenticator.reason.lower():
84+
if pam_authenticator.code == 6:
8585
result = PamAuthenticationResult.LOCKED
8686
if "authentication token is no longer valid" in pam_authenticator.reason.lower():
8787
result = PamAuthenticationResult.EXPIRED

intranet/apps/auth/views.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,6 @@ def index_view(request, auth_form=None, force_login=False, added_context=None, h
152152
schedule = schedule_context(request)
153153
data.update(schedule)
154154

155-
if "user_locked_out" in request.session and request.session["user_locked_out"] == 1:
156-
data.update({"auth_message": "You are locked out due to too many incorrect logins. Please try again later."})
157-
request.session.pop("user_locked_out")
158-
159155
if added_context is not None:
160156
data.update(added_context)
161157
return render(request, "auth/login.html", data)
@@ -177,14 +173,18 @@ def post(self, request):
177173
if re.search(r"^(\d{4})?[a-zA-Z]+\d?$", username) is None:
178174
return index_view(request, added_context={"auth_message": "Your username format is incorrect."})
179175

180-
form = AuthenticateForm(data=request.POST)
176+
form = AuthenticateForm(request, data=request.POST)
181177

182178
if request.session.test_cookie_worked():
183179
request.session.delete_test_cookie()
184180
else:
185181
logger.warning("No cookie support detected! This could cause problems.")
186182

187-
authenticate(request, username=username, password=request.POST.get("password", ""))
183+
if request.session.get("user_locked_out", "") == 1:
184+
request.session.pop("user_locked_out")
185+
return index_view(request, auth_form=form, added_context={
186+
"auth_message": "You are locked out due to too many incorrect logins. Please try again later."
187+
})
188188

189189
if form.is_valid():
190190
reset_user, _ = get_user_model().objects.get_or_create(username="RESET_PASSWORD", user_type="service", id=999999)

0 commit comments

Comments
 (0)