@@ -160,7 +160,7 @@ async def fetch_data(url):
160
160
else :
161
161
return f"Request failed with status code { response .status } "
162
162
163
- @app .route ("/" , methods = [ "GET" ] )
163
+ @app .get ("/" , response_class = HTMLResponse )
164
164
async def home (request : Request ):
165
165
"""Render the home page with form."""
166
166
return templates .TemplateResponse ("create_redirect.html" , {
@@ -170,7 +170,7 @@ async def home(request: Request):
170
170
"errors" : {} # No errors initially
171
171
})
172
172
173
- @app .route ("/" , methods = [ "POST" ] )
173
+ @app .post ("/" , response_class = HTMLResponse )
174
174
async def create_redirect (request : Request , code : str = Form (...), password : str = Form (...)):
175
175
"""Handle form submission, hash password, generate random key, and store redirect info in MongoDB."""
176
176
@@ -206,7 +206,33 @@ async def create_redirect(request: Request, code: str = Form(...), password: str
206
206
207
207
import traceback
208
208
209
- @app .route ("/redirect/{key}" , methods = ["GET" , "HEAD" ])
209
+ @app .get ("/redirect/{key}" , response_class = HTMLResponse )
210
+ async def dynamic_redirect (request : Request , key : str ):
211
+ """Dynamically handle redirects based on MongoDB data."""
212
+ collection = db .route_handlers
213
+ document = await collection .find_one ({"key" : key })
214
+ if document :
215
+ # Check if 'code' exists and is not empty
216
+ code = document .get ("code" )
217
+ if code :
218
+ try :
219
+ result = await execute_async_code (code )
220
+ return RedirectResponse (url = result )
221
+ except Exception as e :
222
+ # Extract the traceback from the exception
223
+ tb_str = '' .join (traceback .format_exception (None , e , e .__traceback__ ))
224
+ # Pass the traceback to the template
225
+ return templates .TemplateResponse ("error_page.html" , {
226
+ "request" : request ,
227
+ "error_message" : "An error occurred while processing your code." ,
228
+ "traceback" : tb_str ,
229
+ "messages" : [["danger" , "An error occurred while executing your code." ]]
230
+ })
231
+ else :
232
+ return "The 'code' field is empty." , 400 # Bad request error for empty 'code'
233
+ return "Handler function not found." , 404 # Not found error if document doesn't exist.
234
+
235
+ @app .head ("/redirect/{key}" , response_class = HTMLResponse )
210
236
async def dynamic_redirect (request : Request , key : str ):
211
237
"""Dynamically handle redirects based on MongoDB data."""
212
238
collection = db .route_handlers
0 commit comments