55import httpx
66from fastapi import APIRouter , Form
77from starlette .requests import Request
8- from starlette .responses import HTMLResponse , RedirectResponse , Response
8+ from starlette .responses import HTMLResponse
99
1010from simon_aksw_org .messages import get_messages , save_message
11+ from simon_aksw_org .recaptcha import ResponseToken
1112from simon_aksw_org .settings import Settings , get_settings
1213
1314
@@ -35,10 +36,9 @@ async def homepage(request: Request) -> HTMLResponse:
3536 """Homepage"""
3637 settings = get_settings ()
3738 context = PageContext (settings )
38- response : HTMLResponse = settings .templates .TemplateResponse (
39+ return settings .templates .TemplateResponse (
3940 request = request , name = "home.html" , context = {"context" : context }
4041 )
41- return response
4242
4343
4444@router .post ("/" , include_in_schema = False )
@@ -47,25 +47,22 @@ async def submit_statement(
4747 name : Annotated [str , Form ()],
4848 message : Annotated [str , Form ()],
4949 g_recaptcha_response : Annotated [str , Form (alias = "g-recaptcha-response" )] = "" ,
50- ) -> Response :
50+ ) -> HTMLResponse :
5151 """Process condolence form submission"""
5252 settings = get_settings ()
53+ settings .logger .info (f"{ name } submitted a message ... captcha: { g_recaptcha_response } " )
54+ context = PageContext (settings )
55+ response_token = ResponseToken (
56+ token = g_recaptcha_response , secret_key = settings .recaptcha_secret_key .get_secret_value ()
57+ )
5358
54- async with httpx .AsyncClient () as client :
55- resp = await client .post (
56- "https://www.google.com/recaptcha/api/siteverify" ,
57- data = {
58- "secret" : settings .recaptcha_secret_key .get_secret_value (),
59- "response" : g_recaptcha_response ,
60- },
61- )
62- if not resp .json ().get ("success" ):
63- context = PageContext (
64- settings , error = "reCAPTCHA-Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut."
65- )
66- return settings .templates .TemplateResponse (
67- request = request , name = "home.html" , context = {"context" : context }, status_code = 400
68- )
59+ if await response_token .is_valid ():
60+ save_message (name = name , text = message , data_dir = settings .data_dir )
61+ status_code = httpx .codes .CREATED
62+ else :
63+ context .error = "reCAPTCHA validation failed"
64+ status_code = httpx .codes .BAD_REQUEST
6965
70- save_message (name = name , text = message , data_dir = settings .data_dir )
71- return RedirectResponse (url = "/" , status_code = 303 )
66+ return settings .templates .TemplateResponse (
67+ request = request , name = "home.html" , context = {"context" : context }, status_code = status_code
68+ )
0 commit comments