Skip to content

Commit defc730

Browse files
authored
Merge pull request #729 from jsbattig/fix/csrf-token-auto-discovery
fix: Pass CSRF token to auto-discovery HTMX partials
2 parents 8a61735 + 202f912 commit defc730

1 file changed

Lines changed: 39 additions & 7 deletions

File tree

src/code_indexer/server/web/routes.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,14 +2010,21 @@ async def golden_repo_details(
20102010
)
20112011

20122012
# Return repository details as JSON-like HTML response
2013-
return templates.TemplateResponse(
2013+
# Get existing CSRF token from cookie or generate new one
2014+
csrf_token = get_csrf_token_from_cookie(request) or generate_csrf_token()
2015+
2016+
response = templates.TemplateResponse(
20142017
"partials/golden_repos_list.html",
20152018
{
20162019
"request": request,
2017-
"csrf_token": generate_csrf_token(),
2020+
"csrf_token": csrf_token,
20182021
"repos": [repo.to_dict()],
20192022
},
20202023
)
2024+
2025+
# Set CSRF cookie to ensure token is available for form submission
2026+
set_csrf_cookie(response, csrf_token)
2027+
return response
20212028
except HTTPException:
20222029
raise
20232030
except Exception as e:
@@ -2376,14 +2383,21 @@ async def repo_details(
23762383
repo["username"] = username
23772384

23782385
# Return repository details as HTML partial
2379-
return templates.TemplateResponse(
2386+
# Get existing CSRF token from cookie or generate new one
2387+
csrf_token = get_csrf_token_from_cookie(request) or generate_csrf_token()
2388+
2389+
response = templates.TemplateResponse(
23802390
"partials/repos_list.html",
23812391
{
23822392
"request": request,
2383-
"csrf_token": generate_csrf_token(),
2393+
"csrf_token": csrf_token,
23842394
"repos": [repo],
23852395
},
23862396
)
2397+
2398+
# Set CSRF cookie to ensure token is available for form submission
2399+
set_csrf_cookie(response, csrf_token)
2400+
return response
23872401
except HTTPException:
23882402
raise
23892403
except Exception:
@@ -2530,7 +2544,9 @@ def _get_all_jobs(
25302544
]
25312545

25322546
# Sort by started_at (most recently started first), fall back to created_at
2533-
all_jobs.sort(key=lambda x: x.get("started_at") or x.get("created_at") or "", reverse=True)
2547+
all_jobs.sort(
2548+
key=lambda x: x.get("started_at") or x.get("created_at") or "", reverse=True
2549+
)
25342550

25352551
# Pagination
25362552
total_count = len(all_jobs)
@@ -4376,10 +4392,14 @@ def _build_gitlab_repos_response(
43764392
search_term: Optional[str] = None,
43774393
):
43784394
"""Build GitLab repos partial template response."""
4379-
return templates.TemplateResponse(
4395+
# Get existing CSRF token from cookie or generate new one
4396+
csrf_token = get_csrf_token_from_cookie(request) or generate_csrf_token()
4397+
4398+
response = templates.TemplateResponse(
43804399
"partials/gitlab_repos.html",
43814400
{
43824401
"request": request,
4402+
"csrf_token": csrf_token,
43834403
"repositories": repositories or [],
43844404
"total_count": total_count,
43854405
"page": page,
@@ -4391,6 +4411,10 @@ def _build_gitlab_repos_response(
43914411
},
43924412
)
43934413

4414+
# Set CSRF cookie to ensure token is available for form submission
4415+
set_csrf_cookie(response, csrf_token)
4416+
return response
4417+
43944418

43954419
def _build_github_repos_response(
43964420
request: Request,
@@ -4404,10 +4428,14 @@ def _build_github_repos_response(
44044428
search_term: Optional[str] = None,
44054429
):
44064430
"""Build GitHub repos partial template response."""
4407-
return templates.TemplateResponse(
4431+
# Get existing CSRF token from cookie or generate new one
4432+
csrf_token = get_csrf_token_from_cookie(request) or generate_csrf_token()
4433+
4434+
response = templates.TemplateResponse(
44084435
"partials/github_repos.html",
44094436
{
44104437
"request": request,
4438+
"csrf_token": csrf_token,
44114439
"repositories": repositories or [],
44124440
"total_count": total_count,
44134441
"page": page,
@@ -4419,6 +4447,10 @@ def _build_github_repos_response(
44194447
},
44204448
)
44214449

4450+
# Set CSRF cookie to ensure token is available for form submission
4451+
set_csrf_cookie(response, csrf_token)
4452+
return response
4453+
44224454

44234455
@web_router.get("/auto-discovery", response_class=HTMLResponse)
44244456
async def auto_discovery_page(request: Request):

0 commit comments

Comments
 (0)