From d9e9c71b29a4cac5e37c5d042f27575026886973 Mon Sep 17 00:00:00 2001 From: balloondude2 <55861555+balloondude2@users.noreply.github.com> Date: Mon, 4 Dec 2023 04:33:31 -0700 Subject: [PATCH] vweb: add an optional parameter to the .redirect/2 method, to be able to set the http code for the redirects (#20082) --- vlib/vweb/vweb.v | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/vlib/vweb/vweb.v b/vlib/vweb/vweb.v index ddc8359216..8e71013add 100644 --- a/vlib/vweb/vweb.v +++ b/vlib/vweb/vweb.v @@ -33,6 +33,11 @@ pub const http_302 = http.new_response( body: '302 Found' header: headers_close ) +pub const http_303 = http.new_response( + status: .see_other + body: '303 See Other' + header: headers_close +) pub const http_400 = http.new_response( status: .bad_request body: '400 Bad Request' @@ -303,13 +308,21 @@ pub fn (mut ctx Context) server_error(ecode int) Result { return Result{} } +@[params] +pub struct RedirectParams { + status_code int = 302 +} + // Redirect to an url -pub fn (mut ctx Context) redirect(url string) Result { +pub fn (mut ctx Context) redirect(url string, params RedirectParams) Result { if ctx.done { return Result{} } ctx.done = true mut resp := vweb.http_302 + if params.status_code == 303 { + resp = vweb.http_303 + } resp.header = resp.header.join(ctx.header) resp.header.add(.location, url) send_string(mut ctx.conn, resp.bytestr()) or { return Result{} }