Reafctor app
This commit is contained in:
parent
b8216f6ade
commit
7740be8bb5
36 changed files with 389 additions and 208 deletions
38
app/util/websocket_auth_backend.py
Normal file
38
app/util/websocket_auth_backend.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
import base64
|
||||
import binascii
|
||||
from uuid import UUID
|
||||
from starlette.authentication import (
|
||||
AuthCredentials, AuthenticationBackend, AuthenticationError, SimpleUser
|
||||
)
|
||||
|
||||
from app.database import SessionLocal
|
||||
from app.models.chargepoint import ChargePoint
|
||||
|
||||
class BasicAuthBackend(AuthenticationBackend):
|
||||
async def authenticate(self, conn):
|
||||
if "Authorization" not in conn.headers:
|
||||
raise AuthenticationError('No Authorization header provided')
|
||||
|
||||
auth = conn.headers["Authorization"]
|
||||
try:
|
||||
scheme, credentials = auth.split()
|
||||
if scheme.lower() != 'basic':
|
||||
raise AuthenticationError('Invalid authorization scheme')
|
||||
decoded = base64.b64decode(credentials).decode("ascii")
|
||||
except (ValueError, UnicodeDecodeError, binascii.Error) as exc:
|
||||
raise AuthenticationError('Invalid basic auth credentials')
|
||||
|
||||
username, _, password = decoded.partition(":")
|
||||
try:
|
||||
id = UUID(username)
|
||||
except (ValueError) as exc:
|
||||
raise AuthenticationError('Invalid basic auth credentials')
|
||||
|
||||
with SessionLocal() as db:
|
||||
chargepoint = db.query(ChargePoint).filter(ChargePoint.id == id).first()
|
||||
if chargepoint is None:
|
||||
raise AuthenticationError('Invalid basic auth credentials')
|
||||
if chargepoint.password != password:
|
||||
raise AuthenticationError('Invalid basic auth credentials')
|
||||
|
||||
return AuthCredentials(["authenticated"]), chargepoint
|
Loading…
Add table
Add a link
Reference in a new issue