Fix admin template response for Starlette 1.x
This commit is contained in:
56
app/admin.py
56
app/admin.py
@@ -93,11 +93,36 @@ class EnvCredentialProvider(Provider):
|
|||||||
app.post("/password")(self.password)
|
app.post("/password")(self.password)
|
||||||
app.add_middleware(BaseHTTPMiddleware, dispatch=self.authenticate)
|
app.add_middleware(BaseHTTPMiddleware, dispatch=self.authenticate)
|
||||||
|
|
||||||
async def login_view(self, request: Request):
|
def _template_response(
|
||||||
|
self,
|
||||||
|
request: Request,
|
||||||
|
name: str,
|
||||||
|
context: Dict[str, Any],
|
||||||
|
status_code: int = 200,
|
||||||
|
):
|
||||||
|
"""Build a template response compatible with old/new Starlette signatures."""
|
||||||
|
payload = {"request": request, **context}
|
||||||
|
try:
|
||||||
|
# Starlette >= 1.0
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
self.template,
|
request=request,
|
||||||
|
name=name,
|
||||||
|
context=payload,
|
||||||
|
status_code=status_code,
|
||||||
|
)
|
||||||
|
except TypeError:
|
||||||
|
# Starlette < 1.0
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
name,
|
||||||
|
context=payload,
|
||||||
|
status_code=status_code,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def login_view(self, request: Request):
|
||||||
|
return self._template_response(
|
||||||
|
request=request,
|
||||||
|
name=self.template,
|
||||||
context={
|
context={
|
||||||
"request": request,
|
|
||||||
"login_logo_url": self.login_logo_url,
|
"login_logo_url": self.login_logo_url,
|
||||||
"login_title": self.login_title,
|
"login_title": self.login_title,
|
||||||
},
|
},
|
||||||
@@ -114,11 +139,11 @@ class EnvCredentialProvider(Provider):
|
|||||||
secrets.compare_digest(username, self._username)
|
secrets.compare_digest(username, self._username)
|
||||||
and secrets.compare_digest(password, self._password)
|
and secrets.compare_digest(password, self._password)
|
||||||
):
|
):
|
||||||
return templates.TemplateResponse(
|
return self._template_response(
|
||||||
self.template,
|
request=request,
|
||||||
|
name=self.template,
|
||||||
status_code=HTTP_401_UNAUTHORIZED,
|
status_code=HTTP_401_UNAUTHORIZED,
|
||||||
context={
|
context={
|
||||||
"request": request,
|
|
||||||
"error": "Invalid username or password",
|
"error": "Invalid username or password",
|
||||||
"login_logo_url": self.login_logo_url,
|
"login_logo_url": self.login_logo_url,
|
||||||
"login_title": self.login_title,
|
"login_title": self.login_title,
|
||||||
@@ -174,9 +199,10 @@ class EnvCredentialProvider(Provider):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
async def password_view(self, request: Request, resources=Depends(get_resources)):
|
async def password_view(self, request: Request, resources=Depends(get_resources)):
|
||||||
return templates.TemplateResponse(
|
return self._template_response(
|
||||||
"providers/login/password.html",
|
request=request,
|
||||||
context={"request": request, "resources": resources},
|
name="providers/login/password.html",
|
||||||
|
context={"resources": resources},
|
||||||
)
|
)
|
||||||
|
|
||||||
async def password(
|
async def password(
|
||||||
@@ -190,19 +216,19 @@ class EnvCredentialProvider(Provider):
|
|||||||
):
|
):
|
||||||
_ = admin
|
_ = admin
|
||||||
if not secrets.compare_digest(old_password, self._password):
|
if not secrets.compare_digest(old_password, self._password):
|
||||||
return templates.TemplateResponse(
|
return self._template_response(
|
||||||
"providers/login/password.html",
|
request=request,
|
||||||
|
name="providers/login/password.html",
|
||||||
context={
|
context={
|
||||||
"request": request,
|
|
||||||
"resources": resources,
|
"resources": resources,
|
||||||
"error": "Old password is incorrect",
|
"error": "Old password is incorrect",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if new_password != re_new_password:
|
if new_password != re_new_password:
|
||||||
return templates.TemplateResponse(
|
return self._template_response(
|
||||||
"providers/login/password.html",
|
request=request,
|
||||||
|
name="providers/login/password.html",
|
||||||
context={
|
context={
|
||||||
"request": request,
|
|
||||||
"resources": resources,
|
"resources": resources,
|
||||||
"error": "New passwords do not match",
|
"error": "New passwords do not match",
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user