mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-04 09:25:22 +02:00
feat: AGit push options starting with {base64}
are decoded (#8479)
- When specifying push options, tooling like [git-repo-go](https://github.com/alibaba/git-repo-go) encodes pushoption values if they contain newlines or non-ASCII characters as they cannot be easily specified via the CLI otherwise. - Recognize such base64 encoded values in the pushoptions (those that have the `{base64}` prefix), if the base64 decoding fails we return the original value. - Resolves forgejo/forgejo#8161 <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Features - [PR](https://codeberg.org/forgejo/forgejo/pulls/8479): <!--number 8479 --><!--line 0 --><!--description QUdpdCBwdXNoIG9wdGlvbnMgc3RhcnRpbmcgd2l0aCBge2Jhc2U2NH1gIGFyZSBkZWNvZGVk-->AGit push options starting with `{base64}` are decoded<!--description--> <!--end release-notes-assistant--> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8479 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
parent
2c01097315
commit
049899b56b
2 changed files with 37 additions and 1 deletions
|
@ -4,6 +4,7 @@
|
|||
package pushoptions
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
@ -109,5 +110,22 @@ func (o gitPushOptions) GetBool(key Key, def bool) bool {
|
|||
|
||||
func (o gitPushOptions) GetString(key Key) (string, bool) {
|
||||
val, ok := o[string(key)]
|
||||
return val, ok
|
||||
if !ok {
|
||||
return "", false
|
||||
}
|
||||
|
||||
// If the value is prefixed with `{base64}` then everything after that is very
|
||||
// likely to be encoded via base64.
|
||||
base64Value, found := strings.CutPrefix(val, "{base64}")
|
||||
if !found {
|
||||
return val, true
|
||||
}
|
||||
|
||||
value, err := base64.StdEncoding.DecodeString(base64Value)
|
||||
if err != nil {
|
||||
// Not valid base64? Return the original value.
|
||||
return val, true
|
||||
}
|
||||
|
||||
return string(value), true
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue