fix: suspended users should not be able to login

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2022-02-18 17:44:06 -08:00
parent e43e1c6d20
commit 7cc20cd9a4
No known key found for this signature in database
GPG key ID: F7E46DED420788F3
2 changed files with 25 additions and 3 deletions

View file

@ -46,13 +46,19 @@ async def login_post(request: Request,
raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, raise HTTPException(status_code=HTTPStatus.BAD_REQUEST,
detail=_("Bad Referer header.")) detail=_("Bad Referer header."))
with db.begin():
user = db.query(User).filter( user = db.query(User).filter(
or_(User.Username == user, User.Email == user) or_(User.Username == user, User.Email == user)
).first() ).first()
if not user: if not user:
return await login_template(request, next, return await login_template(request, next,
errors=["Bad username or password."]) errors=["Bad username or password."])
if user.Suspended:
return await login_template(request, next,
errors=["Account Suspended"])
cookie_timeout = cookies.timeout(remember_me) cookie_timeout = cookies.timeout(remember_me)
sid = user.login(request, passwd, cookie_timeout) sid = user.login(request, passwd, cookie_timeout)
if not sid: if not sid:

View file

@ -14,6 +14,7 @@ from aurweb.asgi import app
from aurweb.models.account_type import USER_ID from aurweb.models.account_type import USER_ID
from aurweb.models.session import Session from aurweb.models.session import Session
from aurweb.models.user import User from aurweb.models.user import User
from aurweb.testing.html import get_errors
# Some test global constants. # Some test global constants.
TEST_USERNAME = "test" TEST_USERNAME = "test"
@ -79,6 +80,21 @@ def test_login_logout(client: TestClient, user: User):
assert "AURSID" not in response.cookies assert "AURSID" not in response.cookies
def test_login_suspended(client: TestClient, user: User):
with db.begin():
user.Suspended = 1
data = {
"user": user.Username,
"passwd": "testPassword",
"next": "/"
}
with client as request:
resp = request.post("/login", data=data)
errors = get_errors(resp.text)
assert errors[0].text.strip() == "Account Suspended"
def test_login_email(client: TestClient, user: user): def test_login_email(client: TestClient, user: user):
post_data = { post_data = {
"user": user.Email, "user": user.Email,