mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package context |
|
|
|
import ( |
|
"net/url" |
|
"strconv" |
|
"strings" |
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
"github.com/go-chi/chi/v5" |
|
) |
|
|
|
// PathParam returns the param in request path, eg: "/{var}" => "/a%2fb", then `var == "a/b"` |
|
func (b *Base) PathParam(name string) string { |
|
s, err := url.PathUnescape(b.PathParamRaw(name)) |
|
if err != nil && !setting.IsProd { |
|
panic("Failed to unescape path param: " + err.Error() + ", there seems to be a double-unescaping bug") |
|
} |
|
return s |
|
} |
|
|
|
// PathParamRaw returns the raw param in request path, eg: "/{var}" => "/a%2fb", then `var == "a%2fb"` |
|
func (b *Base) PathParamRaw(name string) string { |
|
if strings.HasPrefix(name, ":") { |
|
setting.PanicInDevOrTesting("path param should not start with ':'") |
|
name = name[1:] |
|
} |
|
return chi.URLParam(b.Req, name) |
|
} |
|
|
|
// PathParamInt64 returns the param in request path as int64 |
|
func (b *Base) PathParamInt64(p string) int64 { |
|
v, _ := strconv.ParseInt(b.PathParam(p), 10, 64) |
|
return v |
|
} |
|
|
|
func (b *Base) PathParamInt(p string) int { |
|
v, _ := strconv.Atoi(b.PathParam(p)) |
|
return v |
|
} |
|
|
|
// SetPathParam set request path params into routes |
|
func (b *Base) SetPathParam(name, value string) { |
|
if strings.HasPrefix(name, ":") { |
|
setting.PanicInDevOrTesting("path param should not start with ':'") |
|
name = name[1:] |
|
} |
|
chi.RouteContext(b).URLParams.Add(name, url.PathEscape(value)) |
|
}
|
|
|