mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
SSO: Port IP ban checking
Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
357dba87b3
commit
0e08b151e5
1 changed files with 17 additions and 2 deletions
|
@ -14,7 +14,7 @@ from starlette.requests import Request
|
|||
import aurweb.config
|
||||
import aurweb.db
|
||||
|
||||
from aurweb.schema import Sessions, Users
|
||||
from aurweb.schema import Bans, Sessions, Users
|
||||
|
||||
router = fastapi.APIRouter()
|
||||
|
||||
|
@ -57,13 +57,28 @@ def open_session(conn, user_id):
|
|||
return sid
|
||||
|
||||
|
||||
def is_ip_banned(conn, ip):
|
||||
"""
|
||||
Check if an IP is banned. `ip` is a string and may be an IPv4 as well as an
|
||||
IPv6, depending on the server’s configuration.
|
||||
"""
|
||||
result = conn.execute(Bans.select().where(Bans.c.IPAddress == ip))
|
||||
return result.fetchone() is not None
|
||||
|
||||
|
||||
@router.get("/sso/authenticate")
|
||||
async def authenticate(request: Request, conn=Depends(aurweb.db.connect)):
|
||||
"""
|
||||
Receive an OpenID Connect ID token, validate it, then process it to create
|
||||
an new AUR session.
|
||||
"""
|
||||
# TODO check for banned IPs
|
||||
# TODO Handle translations
|
||||
if is_ip_banned(conn, request.client.host):
|
||||
raise HTTPException(
|
||||
status_code=403,
|
||||
detail='The login form is currently disabled for your IP address, '
|
||||
'probably due to sustained spam attacks. Sorry for the '
|
||||
'inconvenience.')
|
||||
token = await oauth.sso.authorize_access_token(request)
|
||||
user = await oauth.sso.parse_id_token(request, token)
|
||||
sub = user.get("sub") # this is the SSO account ID in JWT terminology
|
||||
|
|
Loading…
Add table
Reference in a new issue