mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Add an abstract json layout to make it's easier to change json library (#16528)
* Add an abstract json layout to make it's easier to change json library * Fix import * Fix import sequence * Fix blank lines * Fix blank lines
This commit is contained in:
		@@ -20,7 +20,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"unicode/utf8"
 | 
						"unicode/utf8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -51,7 +51,6 @@ func (e Emoji) MarshalJSON() ([]byte, error) {
 | 
				
			|||||||
	x.UnicodeVersion = ""
 | 
						x.UnicodeVersion = ""
 | 
				
			||||||
	x.Description = ""
 | 
						x.Description = ""
 | 
				
			||||||
	x.SkinTones = false
 | 
						x.SkinTones = false
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(x)
 | 
						return json.Marshal(x)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -103,7 +102,6 @@ func generate() ([]byte, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// unmarshal
 | 
						// unmarshal
 | 
				
			||||||
	var data Gemoji
 | 
						var data Gemoji
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err = json.Unmarshal(body, &data)
 | 
						err = json.Unmarshal(body, &data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,13 +15,13 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/storage"
 | 
						"code.gitea.io/gitea/modules/storage"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.com/go-chi/session"
 | 
						"gitea.com/go-chi/session"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	archiver "github.com/mholt/archiver/v3"
 | 
						archiver "github.com/mholt/archiver/v3"
 | 
				
			||||||
	"github.com/urfave/cli"
 | 
						"github.com/urfave/cli"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -306,7 +306,6 @@ func runDump(ctx *cli.Context) error {
 | 
				
			|||||||
		var excludes []string
 | 
							var excludes []string
 | 
				
			||||||
		if setting.Cfg.Section("session").Key("PROVIDER").Value() == "file" {
 | 
							if setting.Cfg.Section("session").Key("PROVIDER").Value() == "file" {
 | 
				
			||||||
			var opts session.Options
 | 
								var opts session.Options
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
			if err = json.Unmarshal([]byte(setting.SessionConfig.ProviderConfig), &opts); err != nil {
 | 
								if err = json.Unmarshal([]byte(setting.SessionConfig.ProviderConfig), &opts); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/pprof"
 | 
						"code.gitea.io/gitea/modules/pprof"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/private"
 | 
						"code.gitea.io/gitea/modules/private"
 | 
				
			||||||
@@ -24,7 +25,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/services/lfs"
 | 
						"code.gitea.io/gitea/services/lfs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/golang-jwt/jwt"
 | 
						"github.com/golang-jwt/jwt"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/kballard/go-shellquote"
 | 
						"github.com/kballard/go-shellquote"
 | 
				
			||||||
	"github.com/urfave/cli"
 | 
						"github.com/urfave/cli"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -265,7 +265,6 @@ func runServ(c *cli.Context) error {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		tokenAuthentication.Header["Authorization"] = fmt.Sprintf("Bearer %s", tokenString)
 | 
							tokenAuthentication.Header["Authorization"] = fmt.Sprintf("Bearer %s", tokenString)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		enc := json.NewEncoder(os.Stdout)
 | 
							enc := json.NewEncoder(os.Stdout)
 | 
				
			||||||
		err = enc.Encode(tokenAuthentication)
 | 
							err = enc.Encode(tokenAuthentication)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,9 +10,9 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,7 +190,6 @@ func TestAPIEditUser(t *testing.T) {
 | 
				
			|||||||
	resp := session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
						resp := session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	errMap := make(map[string]interface{})
 | 
						errMap := make(map[string]interface{})
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	json.Unmarshal(resp.Body.Bytes(), &errMap)
 | 
						json.Unmarshal(resp.Body.Bytes(), &errMap)
 | 
				
			||||||
	assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string))
 | 
						assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,11 +14,11 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -231,7 +231,6 @@ func doAPICreatePullRequest(ctx APITestContext, owner, repo, baseBranch, headBra
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		resp := ctx.Session.MakeRequest(t, req, expected)
 | 
							resp := ctx.Session.MakeRequest(t, req, expected)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		decoder := json.NewDecoder(resp.Body)
 | 
							decoder := json.NewDecoder(resp.Body)
 | 
				
			||||||
		pr := api.PullRequest{}
 | 
							pr := api.PullRequest{}
 | 
				
			||||||
		err := decoder.Decode(&pr)
 | 
							err := decoder.Decode(&pr)
 | 
				
			||||||
@@ -251,7 +250,6 @@ func doAPIGetPullRequest(ctx APITestContext, owner, repo string, index int64) fu
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		resp := ctx.Session.MakeRequest(t, req, expected)
 | 
							resp := ctx.Session.MakeRequest(t, req, expected)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		decoder := json.NewDecoder(resp.Body)
 | 
							decoder := json.NewDecoder(resp.Body)
 | 
				
			||||||
		pr := api.PullRequest{}
 | 
							pr := api.PullRequest{}
 | 
				
			||||||
		err := decoder.Decode(&pr)
 | 
							err := decoder.Decode(&pr)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,9 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -189,7 +190,6 @@ func TestAPIPullReview(t *testing.T) {
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
	resp = session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
						resp = session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
	errMap := make(map[string]interface{})
 | 
						errMap := make(map[string]interface{})
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	json.Unmarshal(resp.Body.Bytes(), &errMap)
 | 
						json.Unmarshal(resp.Body.Bytes(), &errMap)
 | 
				
			||||||
	assert.EqualValues(t, "review event COMMENT requires a body or a comment", errMap["message"].(string))
 | 
						assert.EqualValues(t, "review event COMMENT requires a body or a comment", errMap["message"].(string))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,10 +13,10 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/lfs"
 | 
						"code.gitea.io/gitea/modules/lfs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,7 +86,6 @@ func TestAPILFSBatch(t *testing.T) {
 | 
				
			|||||||
	decodeResponse := func(t *testing.T, b *bytes.Buffer) *lfs.BatchResponse {
 | 
						decodeResponse := func(t *testing.T, b *bytes.Buffer) *lfs.BatchResponse {
 | 
				
			||||||
		var br lfs.BatchResponse
 | 
							var br lfs.BatchResponse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		assert.NoError(t, json.Unmarshal(b.Bytes(), &br))
 | 
							assert.NoError(t, json.Unmarshal(b.Bytes(), &br))
 | 
				
			||||||
		return &br
 | 
							return &br
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,12 +12,12 @@ import (
 | 
				
			|||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers"
 | 
						"code.gitea.io/gitea/routers"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.com/go-chi/session"
 | 
						"gitea.com/go-chi/session"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,7 +63,6 @@ func TestSessionFileCreation(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var config session.Options
 | 
						var config session.Options
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(oldSessionConfig), &config)
 | 
						err := json.Unmarshal([]byte(oldSessionConfig), &config)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
@@ -37,7 +38,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/routers"
 | 
						"code.gitea.io/gitea/routers"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/PuerkitoBio/goquery"
 | 
						"github.com/PuerkitoBio/goquery"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -416,7 +416,6 @@ func NewRequestWithValues(t testing.TB, method, urlStr string, values map[string
 | 
				
			|||||||
func NewRequestWithJSON(t testing.TB, method, urlStr string, v interface{}) *http.Request {
 | 
					func NewRequestWithJSON(t testing.TB, method, urlStr string, v interface{}) *http.Request {
 | 
				
			||||||
	t.Helper()
 | 
						t.Helper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, err := json.Marshal(v)
 | 
						jsonBytes, err := json.Marshal(v)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	req := NewRequestWithBody(t, method, urlStr, bytes.NewBuffer(jsonBytes))
 | 
						req := NewRequestWithBody(t, method, urlStr, bytes.NewBuffer(jsonBytes))
 | 
				
			||||||
@@ -508,7 +507,6 @@ func logUnexpectedResponse(t testing.TB, recorder *httptest.ResponseRecorder) {
 | 
				
			|||||||
func DecodeJSON(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) {
 | 
					func DecodeJSON(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) {
 | 
				
			||||||
	t.Helper()
 | 
						t.Helper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	decoder := json.NewDecoder(resp.Body)
 | 
						decoder := json.NewDecoder(resp.Body)
 | 
				
			||||||
	assert.NoError(t, decoder.Decode(v))
 | 
						assert.NoError(t, decoder.Decode(v))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,11 +14,11 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/lfs"
 | 
						"code.gitea.io/gitea/modules/lfs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web"
 | 
						"code.gitea.io/gitea/routers/web"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	gzipp "github.com/klauspost/compress/gzip"
 | 
						gzipp "github.com/klauspost/compress/gzip"
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -206,7 +206,7 @@ func TestGetLFSRange(t *testing.T) {
 | 
				
			|||||||
				assert.Equal(t, tt.out, resp.Body.String())
 | 
									assert.Equal(t, tt.out, resp.Body.String())
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				var er lfs.ErrorResponse
 | 
									var er lfs.ErrorResponse
 | 
				
			||||||
				err := jsoniter.Unmarshal(resp.Body.Bytes(), &er)
 | 
									err := json.Unmarshal(resp.Body.Bytes(), &er)
 | 
				
			||||||
				assert.NoError(t, err)
 | 
									assert.NoError(t, err)
 | 
				
			||||||
				assert.Equal(t, tt.out, er.Message)
 | 
									assert.Equal(t, tt.out, er.Message)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,9 @@ import (
 | 
				
			|||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,7 +71,6 @@ func TestAccessTokenExchange(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	parsed := new(response)
 | 
						parsed := new(response)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
						assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
				
			||||||
	assert.True(t, len(parsed.AccessToken) > 10)
 | 
						assert.True(t, len(parsed.AccessToken) > 10)
 | 
				
			||||||
	assert.True(t, len(parsed.RefreshToken) > 10)
 | 
						assert.True(t, len(parsed.RefreshToken) > 10)
 | 
				
			||||||
@@ -96,7 +95,6 @@ func TestAccessTokenExchangeWithoutPKCE(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	parsed := new(response)
 | 
						parsed := new(response)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
						assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
				
			||||||
	assert.True(t, len(parsed.AccessToken) > 10)
 | 
						assert.True(t, len(parsed.AccessToken) > 10)
 | 
				
			||||||
	assert.True(t, len(parsed.RefreshToken) > 10)
 | 
						assert.True(t, len(parsed.RefreshToken) > 10)
 | 
				
			||||||
@@ -186,7 +184,6 @@ func TestAccessTokenExchangeWithBasicAuth(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	parsed := new(response)
 | 
						parsed := new(response)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
						assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
				
			||||||
	assert.True(t, len(parsed.AccessToken) > 10)
 | 
						assert.True(t, len(parsed.AccessToken) > 10)
 | 
				
			||||||
	assert.True(t, len(parsed.RefreshToken) > 10)
 | 
						assert.True(t, len(parsed.RefreshToken) > 10)
 | 
				
			||||||
@@ -230,7 +227,6 @@ func TestRefreshTokenInvalidation(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	parsed := new(response)
 | 
						parsed := new(response)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
						assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// test without invalidation
 | 
						// test without invalidation
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,10 +10,10 @@ import (
 | 
				
			|||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,7 +86,6 @@ func doTestRepoCommitWithStatus(t *testing.T, state string, classes ...string) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func testRepoCommitsWithStatus(t *testing.T, resp, respOne *httptest.ResponseRecorder, state string) {
 | 
					func testRepoCommitsWithStatus(t *testing.T, resp, respOne *httptest.ResponseRecorder, state string) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	var statuses []*api.CommitStatus
 | 
						var statuses []*api.CommitStatus
 | 
				
			||||||
	assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), &statuses))
 | 
						assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), &statuses))
 | 
				
			||||||
	var status api.CombinedStatus
 | 
						var status api.CombinedStatus
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,9 +14,9 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -158,7 +158,6 @@ func NewTestLogger() log.LoggerProvider {
 | 
				
			|||||||
// Init inits connection writer with json config.
 | 
					// Init inits connection writer with json config.
 | 
				
			||||||
// json config only need key "level".
 | 
					// json config only need key "level".
 | 
				
			||||||
func (log *TestLogger) Init(config string) error {
 | 
					func (log *TestLogger) Init(config string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(config), log)
 | 
						err := json.Unmarshal([]byte(config), log)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ package models
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"encoding/binary"
 | 
						"encoding/binary"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func keysInt64(m map[int64]struct{}) []int64 {
 | 
					func keysInt64(m map[int64]struct{}) []int64 {
 | 
				
			||||||
@@ -37,7 +37,6 @@ func valuesUser(m map[int64]*User) []*User {
 | 
				
			|||||||
// JSONUnmarshalHandleDoubleEncode - due to a bug in xorm (see https://gitea.com/xorm/xorm/pulls/1957) - it's
 | 
					// JSONUnmarshalHandleDoubleEncode - due to a bug in xorm (see https://gitea.com/xorm/xorm/pulls/1957) - it's
 | 
				
			||||||
// possible that a Blob may be double encoded or gain an unwanted prefix of 0xff 0xfe.
 | 
					// possible that a Blob may be double encoded or gain an unwanted prefix of 0xff 0xfe.
 | 
				
			||||||
func JSONUnmarshalHandleDoubleEncode(bs []byte, v interface{}) error {
 | 
					func JSONUnmarshalHandleDoubleEncode(bs []byte, v interface{}) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal(bs, v)
 | 
						err := json.Unmarshal(bs, v)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ok := true
 | 
							ok := true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,13 +15,13 @@ import (
 | 
				
			|||||||
	"unicode/utf8"
 | 
						"unicode/utf8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup"
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
						"code.gitea.io/gitea/modules/markup/markdown"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/references"
 | 
						"code.gitea.io/gitea/modules/references"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"xorm.io/builder"
 | 
						"xorm.io/builder"
 | 
				
			||||||
	"xorm.io/xorm"
 | 
						"xorm.io/xorm"
 | 
				
			||||||
@@ -654,7 +654,6 @@ func (c *Comment) LoadPushCommits() (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var data PushActionContent
 | 
						var data PushActionContent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err = json.Unmarshal([]byte(c.Content), &data)
 | 
						err = json.Unmarshal([]byte(c.Content), &data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -1249,7 +1248,6 @@ func CreatePushPullComment(pusher *User, pr *PullRequest, oldCommitID, newCommit
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ops.Issue = pr.Issue
 | 
						ops.Issue = pr.Issue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	dataJSON, err := json.Marshal(data)
 | 
						dataJSON, err := json.Marshal(data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,9 +14,9 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -158,7 +158,6 @@ func NewTestLogger() log.LoggerProvider {
 | 
				
			|||||||
// Init inits connection writer with json config.
 | 
					// Init inits connection writer with json config.
 | 
				
			||||||
// json config only need key "level".
 | 
					// json config only need key "level".
 | 
				
			||||||
func (log *TestLogger) Init(config string) error {
 | 
					func (log *TestLogger) Init(config string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(config), log)
 | 
						err := json.Unmarshal([]byte(config), log)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,8 @@
 | 
				
			|||||||
package migrations
 | 
					package migrations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"xorm.io/xorm"
 | 
						"xorm.io/xorm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -70,7 +70,6 @@ func expandWebhooks(x *xorm.Engine) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for _, res := range results {
 | 
							for _, res := range results {
 | 
				
			||||||
			var events HookEvent
 | 
								var events HookEvent
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
			if err = json.Unmarshal([]byte(res.Events), &events); err != nil {
 | 
								if err = json.Unmarshal([]byte(res.Events), &events); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,9 +5,9 @@
 | 
				
			|||||||
package migrations
 | 
					package migrations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"xorm.io/builder"
 | 
						"xorm.io/builder"
 | 
				
			||||||
	"xorm.io/xorm"
 | 
						"xorm.io/xorm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -105,7 +105,6 @@ func removeCredentials(payload string) (string, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var opts MigrateOptions
 | 
						var opts MigrateOptions
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(payload), &opts)
 | 
						err := json.Unmarshal([]byte(payload), &opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,13 +8,13 @@ import (
 | 
				
			|||||||
	"encoding/binary"
 | 
						"encoding/binary"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"xorm.io/xorm"
 | 
						"xorm.io/xorm"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func unwrapLDAPSourceCfg(x *xorm.Engine) error {
 | 
					func unwrapLDAPSourceCfg(x *xorm.Engine) error {
 | 
				
			||||||
	jsonUnmarshalHandleDoubleEncode := func(bs []byte, v interface{}) error {
 | 
						jsonUnmarshalHandleDoubleEncode := func(bs []byte, v interface{}) error {
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		err := json.Unmarshal(bs, v)
 | 
							err := json.Unmarshal(bs, v)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			ok := true
 | 
								ok := true
 | 
				
			||||||
@@ -84,7 +84,7 @@ func unwrapLDAPSourceCfg(x *xorm.Engine) error {
 | 
				
			|||||||
				return fmt.Errorf("failed to unmarshal %s: %w", string(source.Cfg), err)
 | 
									return fmt.Errorf("failed to unmarshal %s: %w", string(source.Cfg), err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if wrapped.Source != nil && len(wrapped.Source) > 0 {
 | 
								if wrapped.Source != nil && len(wrapped.Source) > 0 {
 | 
				
			||||||
				bs, err := jsoniter.Marshal(wrapped.Source)
 | 
									bs, err := json.Marshal(wrapped.Source)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return err
 | 
										return err
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,8 @@ package migrations
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,12 +66,12 @@ func Test_unwrapLDAPSourceCfg(t *testing.T) {
 | 
				
			|||||||
			converted := map[string]interface{}{}
 | 
								converted := map[string]interface{}{}
 | 
				
			||||||
			expected := map[string]interface{}{}
 | 
								expected := map[string]interface{}{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := jsoniter.Unmarshal([]byte(source.Cfg), &converted); err != nil {
 | 
								if err := json.Unmarshal([]byte(source.Cfg), &converted); err != nil {
 | 
				
			||||||
				assert.NoError(t, err)
 | 
									assert.NoError(t, err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := jsoniter.Unmarshal([]byte(source.Expected), &expected); err != nil {
 | 
								if err := json.Unmarshal([]byte(source.Expected), &expected); err != nil {
 | 
				
			||||||
				assert.NoError(t, err)
 | 
									assert.NoError(t, err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ package models
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"xorm.io/xorm"
 | 
						"xorm.io/xorm"
 | 
				
			||||||
	"xorm.io/xorm/convert"
 | 
						"xorm.io/xorm/convert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -33,7 +33,6 @@ func (cfg *UnitConfig) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a UnitConfig to a serialized format.
 | 
					// ToDB exports a UnitConfig to a serialized format.
 | 
				
			||||||
func (cfg *UnitConfig) ToDB() ([]byte, error) {
 | 
					func (cfg *UnitConfig) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +48,6 @@ func (cfg *ExternalWikiConfig) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a ExternalWikiConfig to a serialized format.
 | 
					// ToDB exports a ExternalWikiConfig to a serialized format.
 | 
				
			||||||
func (cfg *ExternalWikiConfig) ToDB() ([]byte, error) {
 | 
					func (cfg *ExternalWikiConfig) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,7 +65,6 @@ func (cfg *ExternalTrackerConfig) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a ExternalTrackerConfig to a serialized format.
 | 
					// ToDB exports a ExternalTrackerConfig to a serialized format.
 | 
				
			||||||
func (cfg *ExternalTrackerConfig) ToDB() ([]byte, error) {
 | 
					func (cfg *ExternalTrackerConfig) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,7 +82,6 @@ func (cfg *IssuesConfig) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a IssuesConfig to a serialized format.
 | 
					// ToDB exports a IssuesConfig to a serialized format.
 | 
				
			||||||
func (cfg *IssuesConfig) ToDB() ([]byte, error) {
 | 
					func (cfg *IssuesConfig) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -109,7 +105,6 @@ func (cfg *PullRequestsConfig) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a PullRequestsConfig to a serialized format.
 | 
					// ToDB exports a PullRequestsConfig to a serialized format.
 | 
				
			||||||
func (cfg *PullRequestsConfig) ToDB() ([]byte, error) {
 | 
					func (cfg *PullRequestsConfig) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,13 +7,13 @@ package models
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	migration "code.gitea.io/gitea/modules/migrations/base"
 | 
						migration "code.gitea.io/gitea/modules/migrations/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/secret"
 | 
						"code.gitea.io/gitea/modules/secret"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"xorm.io/builder"
 | 
						"xorm.io/builder"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -114,7 +114,6 @@ func (task *Task) UpdateCols(cols ...string) error {
 | 
				
			|||||||
func (task *Task) MigrateConfig() (*migration.MigrateOptions, error) {
 | 
					func (task *Task) MigrateConfig() (*migration.MigrateOptions, error) {
 | 
				
			||||||
	if task.Type == structs.TaskTypeMigrateRepo {
 | 
						if task.Type == structs.TaskTypeMigrateRepo {
 | 
				
			||||||
		var opts migration.MigrateOptions
 | 
							var opts migration.MigrateOptions
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		err := json.Unmarshal([]byte(task.PayloadContent), &opts)
 | 
							err := json.Unmarshal([]byte(task.PayloadContent), &opts)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
@@ -190,7 +189,6 @@ func GetMigratingTaskByID(id, doerID int64) (*Task, *migration.MigrateOptions, e
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var opts migration.MigrateOptions
 | 
						var opts migration.MigrateOptions
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(task.PayloadContent), &opts); err != nil {
 | 
						if err := json.Unmarshal([]byte(task.PayloadContent), &opts); err != nil {
 | 
				
			||||||
		return nil, nil, err
 | 
							return nil, nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -244,7 +242,6 @@ func FinishMigrateTask(task *Task) error {
 | 
				
			|||||||
	conf.AuthPasswordEncrypted = ""
 | 
						conf.AuthPasswordEncrypted = ""
 | 
				
			||||||
	conf.AuthTokenEncrypted = ""
 | 
						conf.AuthTokenEncrypted = ""
 | 
				
			||||||
	conf.CloneAddrEncrypted = ""
 | 
						conf.CloneAddrEncrypted = ""
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	confBytes, err := json.Marshal(conf)
 | 
						confBytes, err := json.Marshal(conf)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,8 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +69,6 @@ func TestGetUserHeatmapDataByUser(t *testing.T) {
 | 
				
			|||||||
		assert.Equal(t, tc.CountResult, contributions, fmt.Sprintf("testcase %d", i))
 | 
							assert.Equal(t, tc.CountResult, contributions, fmt.Sprintf("testcase %d", i))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Test JSON rendering
 | 
							// Test JSON rendering
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		jsonData, err := json.Marshal(heatmap)
 | 
							jsonData, err := json.Marshal(heatmap)
 | 
				
			||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
		assert.Equal(t, tc.JSONResult, string(jsonData))
 | 
							assert.Equal(t, tc.JSONResult, string(jsonData))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,13 +11,13 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gouuid "github.com/google/uuid"
 | 
						gouuid "github.com/google/uuid"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// HookContentType is the content type of a web hook
 | 
					// HookContentType is the content type of a web hook
 | 
				
			||||||
@@ -160,8 +160,6 @@ type Webhook struct {
 | 
				
			|||||||
// AfterLoad updates the webhook object upon setting a column
 | 
					// AfterLoad updates the webhook object upon setting a column
 | 
				
			||||||
func (w *Webhook) AfterLoad() {
 | 
					func (w *Webhook) AfterLoad() {
 | 
				
			||||||
	w.HookEvent = &HookEvent{}
 | 
						w.HookEvent = &HookEvent{}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
 | 
						if err := json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
 | 
				
			||||||
		log.Error("Unmarshal[%d]: %v", w.ID, err)
 | 
							log.Error("Unmarshal[%d]: %v", w.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -174,7 +172,6 @@ func (w *Webhook) History(page int) ([]*HookTask, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// UpdateEvent handles conversion from HookEvent to Events.
 | 
					// UpdateEvent handles conversion from HookEvent to Events.
 | 
				
			||||||
func (w *Webhook) UpdateEvent() error {
 | 
					func (w *Webhook) UpdateEvent() error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.Marshal(w.HookEvent)
 | 
						data, err := json.Marshal(w.HookEvent)
 | 
				
			||||||
	w.Events = string(data)
 | 
						w.Events = string(data)
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
@@ -687,7 +684,6 @@ func (t *HookTask) AfterLoad() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	t.RequestInfo = &HookRequest{}
 | 
						t.RequestInfo = &HookRequest{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
 | 
						if err := json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
 | 
				
			||||||
		log.Error("Unmarshal RequestContent[%d]: %v", t.ID, err)
 | 
							log.Error("Unmarshal RequestContent[%d]: %v", t.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -701,7 +697,6 @@ func (t *HookTask) AfterLoad() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (t *HookTask) simpleMarshalJSON(v interface{}) string {
 | 
					func (t *HookTask) simpleMarshalJSON(v interface{}) string {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	p, err := json.Marshal(v)
 | 
						p, err := json.Marshal(v)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Marshal [%d]: %v", t.ID, err)
 | 
							log.Error("Marshal [%d]: %v", t.ID, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,9 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,7 +58,6 @@ func TestWebhook_UpdateEvent(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, webhook.UpdateEvent())
 | 
						assert.NoError(t, webhook.UpdateEvent())
 | 
				
			||||||
	assert.NotEmpty(t, webhook.Events)
 | 
						assert.NotEmpty(t, webhook.Events)
 | 
				
			||||||
	actualHookEvent := &HookEvent{}
 | 
						actualHookEvent := &HookEvent{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.NoError(t, json.Unmarshal([]byte(webhook.Events), actualHookEvent))
 | 
						assert.NoError(t, json.Unmarshal([]byte(webhook.Events), actualHookEvent))
 | 
				
			||||||
	assert.Equal(t, *hookEvent, *actualHookEvent)
 | 
						assert.Equal(t, *hookEvent, *actualHookEvent)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								modules/cache/cache_twoqueue.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								modules/cache/cache_twoqueue.go
									
									
									
									
										vendored
									
									
								
							@@ -9,9 +9,10 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mc "gitea.com/go-chi/cache"
 | 
						mc "gitea.com/go-chi/cache"
 | 
				
			||||||
	lru "github.com/hashicorp/golang-lru"
 | 
						lru "github.com/hashicorp/golang-lru"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TwoQueueCache represents a LRU 2Q cache adapter implementation
 | 
					// TwoQueueCache represents a LRU 2Q cache adapter implementation
 | 
				
			||||||
@@ -177,7 +178,6 @@ func (c *TwoQueueCache) StartAndGC(opts mc.Options) error {
 | 
				
			|||||||
		size, err = strconv.Atoi(opts.AdapterConfig)
 | 
							size, err = strconv.Atoi(opts.AdapterConfig)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		if !json.Valid([]byte(opts.AdapterConfig)) {
 | 
							if !json.Valid([]byte(opts.AdapterConfig)) {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	mc "code.gitea.io/gitea/modules/cache"
 | 
						mc "code.gitea.io/gitea/modules/cache"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/templates"
 | 
						"code.gitea.io/gitea/modules/templates"
 | 
				
			||||||
@@ -34,7 +35,6 @@ import (
 | 
				
			|||||||
	"gitea.com/go-chi/cache"
 | 
						"gitea.com/go-chi/cache"
 | 
				
			||||||
	"gitea.com/go-chi/session"
 | 
						"gitea.com/go-chi/session"
 | 
				
			||||||
	"github.com/go-chi/chi"
 | 
						"github.com/go-chi/chi"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/unknwon/com"
 | 
						"github.com/unknwon/com"
 | 
				
			||||||
	"github.com/unknwon/i18n"
 | 
						"github.com/unknwon/i18n"
 | 
				
			||||||
	"github.com/unrolled/render"
 | 
						"github.com/unrolled/render"
 | 
				
			||||||
@@ -408,7 +408,6 @@ func (ctx *Context) Error(status int, contents ...string) {
 | 
				
			|||||||
func (ctx *Context) JSON(status int, content interface{}) {
 | 
					func (ctx *Context) JSON(status int, content interface{}) {
 | 
				
			||||||
	ctx.Resp.Header().Set("Content-Type", "application/json;charset=utf-8")
 | 
						ctx.Resp.Header().Set("Content-Type", "application/json;charset=utf-8")
 | 
				
			||||||
	ctx.Resp.WriteHeader(status)
 | 
						ctx.Resp.WriteHeader(status)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.NewEncoder(ctx.Resp).Encode(content); err != nil {
 | 
						if err := json.NewEncoder(ctx.Resp).Encode(content); err != nil {
 | 
				
			||||||
		ctx.ServerError("Render JSON failed", err)
 | 
							ctx.ServerError("Render JSON failed", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func wrapNewlines(w io.Writer, prefix []byte, value []byte) (sum int64, err error) {
 | 
					func wrapNewlines(w io.Writer, prefix []byte, value []byte) (sum int64, err error) {
 | 
				
			||||||
@@ -80,7 +80,6 @@ func (e *Event) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
			data = []byte(v)
 | 
								data = []byte(v)
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			var err error
 | 
								var err error
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
			data, err = json.Marshal(e.Data)
 | 
								data, err = json.Marshal(e.Data)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return sum, err
 | 
									return sum, err
 | 
				
			||||||
@@ -91,7 +90,6 @@ func (e *Event) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return sum, err
 | 
								return sum, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	n, err = wrapNewlines(w, []byte("id: "), []byte(e.ID))
 | 
						n, err = wrapNewlines(w, []byte("id: "), []byte(e.ID))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var defaultSetting = Settings{false, "GiteaServer", 60 * time.Second, 60 * time.Second, nil, nil, nil, false}
 | 
					var defaultSetting = Settings{false, "GiteaServer", 60 * time.Second, 60 * time.Second, nil, nil, nil, false}
 | 
				
			||||||
@@ -443,7 +443,6 @@ func (r *Request) ToJSON(v interface{}) error {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err = json.Unmarshal(data, v)
 | 
						err = json.Unmarshal(data, v)
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,13 +18,13 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/analyze"
 | 
						"code.gitea.io/gitea/modules/analyze"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/charset"
 | 
						"code.gitea.io/gitea/modules/charset"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/typesniffer"
 | 
						"code.gitea.io/gitea/modules/typesniffer"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-enry/go-enry/v2"
 | 
						"github.com/go-enry/go-enry/v2"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/olivere/elastic/v7"
 | 
						"github.com/olivere/elastic/v7"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -321,7 +321,6 @@ func convertResult(searchResult *elastic.SearchResult, kw string, pageSize int)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		repoID, fileName := parseIndexerID(hit.Id)
 | 
							repoID, fileName := parseIndexerID(hit.Id)
 | 
				
			||||||
		var res = make(map[string]interface{})
 | 
							var res = make(map[string]interface{})
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		if err := json.Unmarshal(hit.Source, &res); err != nil {
 | 
							if err := json.Unmarshal(hit.Source, &res); err != nil {
 | 
				
			||||||
			return 0, nil, nil, err
 | 
								return 0, nil, nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										142
									
								
								modules/json/json.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								modules/json/json.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					// Copyright 2020 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						jsoniter "github.com/json-iterator/go"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Encoder represents an encoder for json
 | 
				
			||||||
 | 
					type Encoder interface {
 | 
				
			||||||
 | 
						Encode(v interface{}) error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Decoder represents a decoder for json
 | 
				
			||||||
 | 
					type Decoder interface {
 | 
				
			||||||
 | 
						Decode(v interface{}) error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Interface represents an interface to handle json data
 | 
				
			||||||
 | 
					type Interface interface {
 | 
				
			||||||
 | 
						Marshal(v interface{}) ([]byte, error)
 | 
				
			||||||
 | 
						Unmarshal(data []byte, v interface{}) error
 | 
				
			||||||
 | 
						NewEncoder(writer io.Writer) Encoder
 | 
				
			||||||
 | 
						NewDecoder(reader io.Reader) Decoder
 | 
				
			||||||
 | 
						Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						// DefaultJSONHandler default json handler
 | 
				
			||||||
 | 
						DefaultJSONHandler Interface = JSONiter{jsoniter.ConfigCompatibleWithStandardLibrary}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_ Interface = StdJSON{}
 | 
				
			||||||
 | 
						_ Interface = JSONiter{}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// StdJSON implements Interface via encoding/json
 | 
				
			||||||
 | 
					type StdJSON struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Marshal implements Interface
 | 
				
			||||||
 | 
					func (StdJSON) Marshal(v interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						return json.Marshal(v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Unmarshal implements Interface
 | 
				
			||||||
 | 
					func (StdJSON) Unmarshal(data []byte, v interface{}) error {
 | 
				
			||||||
 | 
						return json.Unmarshal(data, v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewEncoder implements Interface
 | 
				
			||||||
 | 
					func (StdJSON) NewEncoder(writer io.Writer) Encoder {
 | 
				
			||||||
 | 
						return json.NewEncoder(writer)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewDecoder implements Interface
 | 
				
			||||||
 | 
					func (StdJSON) NewDecoder(reader io.Reader) Decoder {
 | 
				
			||||||
 | 
						return json.NewDecoder(reader)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Indent implements Interface
 | 
				
			||||||
 | 
					func (StdJSON) Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
 | 
				
			||||||
 | 
						return json.Indent(dst, src, prefix, indent)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// JSONiter implements Interface via jsoniter
 | 
				
			||||||
 | 
					type JSONiter struct {
 | 
				
			||||||
 | 
						jsoniter.API
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Marshal implements Interface
 | 
				
			||||||
 | 
					func (j JSONiter) Marshal(v interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						return j.API.Marshal(v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Unmarshal implements Interface
 | 
				
			||||||
 | 
					func (j JSONiter) Unmarshal(data []byte, v interface{}) error {
 | 
				
			||||||
 | 
						return j.API.Unmarshal(data, v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewEncoder implements Interface
 | 
				
			||||||
 | 
					func (j JSONiter) NewEncoder(writer io.Writer) Encoder {
 | 
				
			||||||
 | 
						return j.API.NewEncoder(writer)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewDecoder implements Interface
 | 
				
			||||||
 | 
					func (j JSONiter) NewDecoder(reader io.Reader) Decoder {
 | 
				
			||||||
 | 
						return j.API.NewDecoder(reader)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Indent implements Interface, since jsoniter don't support Indent, just use encoding/json's
 | 
				
			||||||
 | 
					func (j JSONiter) Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
 | 
				
			||||||
 | 
						return json.Indent(dst, src, prefix, indent)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Marshal converts object as bytes
 | 
				
			||||||
 | 
					func Marshal(v interface{}) ([]byte, error) {
 | 
				
			||||||
 | 
						return DefaultJSONHandler.Marshal(v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Unmarshal decodes object from bytes
 | 
				
			||||||
 | 
					func Unmarshal(data []byte, v interface{}) error {
 | 
				
			||||||
 | 
						return DefaultJSONHandler.Unmarshal(data, v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewEncoder creates an encoder to write objects to writer
 | 
				
			||||||
 | 
					func NewEncoder(writer io.Writer) Encoder {
 | 
				
			||||||
 | 
						return DefaultJSONHandler.NewEncoder(writer)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewDecoder creates a decoder to read objects from reader
 | 
				
			||||||
 | 
					func NewDecoder(reader io.Reader) Decoder {
 | 
				
			||||||
 | 
						return DefaultJSONHandler.NewDecoder(reader)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Indent appends to dst an indented form of the JSON-encoded src.
 | 
				
			||||||
 | 
					func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
 | 
				
			||||||
 | 
						return DefaultJSONHandler.Indent(dst, src, prefix, indent)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalIndent copied from encoding/json
 | 
				
			||||||
 | 
					func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
 | 
				
			||||||
 | 
						b, err := Marshal(v)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var buf bytes.Buffer
 | 
				
			||||||
 | 
						err = Indent(&buf, b, prefix, indent)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return buf.Bytes(), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Valid proxy to json.Valid
 | 
				
			||||||
 | 
					func Valid(data []byte) bool {
 | 
				
			||||||
 | 
						return json.Valid(data)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -13,9 +13,8 @@ import (
 | 
				
			|||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const batchSize = 20
 | 
					const batchSize = 20
 | 
				
			||||||
@@ -69,7 +68,7 @@ func (c *HTTPClient) batch(ctx context.Context, operation string, objects []Poin
 | 
				
			|||||||
	request := &BatchRequest{operation, c.transferNames(), nil, objects}
 | 
						request := &BatchRequest{operation, c.transferNames(), nil, objects}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	payload := new(bytes.Buffer)
 | 
						payload := new(bytes.Buffer)
 | 
				
			||||||
	err := jsoniter.NewEncoder(payload).Encode(request)
 | 
						err := json.NewEncoder(payload).Encode(request)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Error encoding json: %v", err)
 | 
							log.Error("Error encoding json: %v", err)
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -102,7 +101,7 @@ func (c *HTTPClient) batch(ctx context.Context, operation string, objects []Poin
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var response BatchResponse
 | 
						var response BatchResponse
 | 
				
			||||||
	err = jsoniter.NewDecoder(res.Body).Decode(&response)
 | 
						err = json.NewDecoder(res.Body).Decode(&response)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Error decoding json: %v", err)
 | 
							log.Error("Error decoding json: %v", err)
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,8 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -146,7 +147,7 @@ func lfsTestRoundtripHandler(req *http.Request) *http.Response {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	payload := new(bytes.Buffer)
 | 
						payload := new(bytes.Buffer)
 | 
				
			||||||
	jsoniter.NewEncoder(payload).Encode(batchResponse)
 | 
						json.NewEncoder(payload).Encode(batchResponse)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &http.Response{StatusCode: http.StatusOK, Body: ioutil.NopCloser(payload)}
 | 
						return &http.Response{StatusCode: http.StatusOK, Body: ioutil.NopCloser(payload)}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -160,7 +161,7 @@ func TestHTTPClientDownload(t *testing.T) {
 | 
				
			|||||||
		assert.Equal(t, MediaType, req.Header.Get("Accept"))
 | 
							assert.Equal(t, MediaType, req.Header.Get("Accept"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var batchRequest BatchRequest
 | 
							var batchRequest BatchRequest
 | 
				
			||||||
		err := jsoniter.NewDecoder(req.Body).Decode(&batchRequest)
 | 
							err := json.NewDecoder(req.Body).Decode(&batchRequest)
 | 
				
			||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		assert.Equal(t, "download", batchRequest.Operation)
 | 
							assert.Equal(t, "download", batchRequest.Operation)
 | 
				
			||||||
@@ -267,7 +268,7 @@ func TestHTTPClientUpload(t *testing.T) {
 | 
				
			|||||||
		assert.Equal(t, MediaType, req.Header.Get("Accept"))
 | 
							assert.Equal(t, MediaType, req.Header.Get("Accept"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var batchRequest BatchRequest
 | 
							var batchRequest BatchRequest
 | 
				
			||||||
		err := jsoniter.NewDecoder(req.Body).Decode(&batchRequest)
 | 
							err := json.NewDecoder(req.Body).Decode(&batchRequest)
 | 
				
			||||||
		assert.NoError(t, err)
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		assert.Equal(t, "upload", batchRequest.Operation)
 | 
							assert.Equal(t, "upload", batchRequest.Operation)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,9 +12,8 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TransferAdapter represents an adapter for downloading/uploading LFS objects
 | 
					// TransferAdapter represents an adapter for downloading/uploading LFS objects
 | 
				
			||||||
@@ -65,7 +64,7 @@ func (a *BasicTransferAdapter) Upload(ctx context.Context, l *Link, p Pointer, r
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Verify calls the verify handler on the LFS server
 | 
					// Verify calls the verify handler on the LFS server
 | 
				
			||||||
func (a *BasicTransferAdapter) Verify(ctx context.Context, l *Link, p Pointer) error {
 | 
					func (a *BasicTransferAdapter) Verify(ctx context.Context, l *Link, p Pointer) error {
 | 
				
			||||||
	b, err := jsoniter.Marshal(p)
 | 
						b, err := json.Marshal(p)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Error encoding json: %v", err)
 | 
							log.Error("Error encoding json: %v", err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -128,7 +127,7 @@ func handleErrorResponse(resp *http.Response) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func decodeReponseError(r io.Reader) (ErrorResponse, error) {
 | 
					func decodeReponseError(r io.Reader) (ErrorResponse, error) {
 | 
				
			||||||
	var er ErrorResponse
 | 
						var er ErrorResponse
 | 
				
			||||||
	err := jsoniter.NewDecoder(r).Decode(&er)
 | 
						err := json.NewDecoder(r).Decode(&er)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Error decoding json: %v", err)
 | 
							log.Error("Error decoding json: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,8 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +50,7 @@ func TestBasicTransferAdapter(t *testing.T) {
 | 
				
			|||||||
			assert.Equal(t, MediaType, req.Header.Get("Content-Type"))
 | 
								assert.Equal(t, MediaType, req.Header.Get("Content-Type"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var vp Pointer
 | 
								var vp Pointer
 | 
				
			||||||
			err := jsoniter.NewDecoder(req.Body).Decode(&vp)
 | 
								err := json.NewDecoder(req.Body).Decode(&vp)
 | 
				
			||||||
			assert.NoError(t, err)
 | 
								assert.NoError(t, err)
 | 
				
			||||||
			assert.Equal(t, p.Oid, vp.Oid)
 | 
								assert.Equal(t, p.Oid, vp.Oid)
 | 
				
			||||||
			assert.Equal(t, p.Size, vp.Size)
 | 
								assert.Equal(t, p.Size, vp.Size)
 | 
				
			||||||
@@ -60,7 +61,7 @@ func TestBasicTransferAdapter(t *testing.T) {
 | 
				
			|||||||
				Message: "Object not found",
 | 
									Message: "Object not found",
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			payload := new(bytes.Buffer)
 | 
								payload := new(bytes.Buffer)
 | 
				
			||||||
			jsoniter.NewEncoder(payload).Encode(er)
 | 
								json.NewEncoder(payload).Encode(er)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return &http.Response{StatusCode: http.StatusNotFound, Body: ioutil.NopCloser(payload)}
 | 
								return &http.Response{StatusCode: http.StatusNotFound, Body: ioutil.NopCloser(payload)}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type connWriter struct {
 | 
					type connWriter struct {
 | 
				
			||||||
@@ -106,7 +106,6 @@ func NewConn() LoggerProvider {
 | 
				
			|||||||
// Init inits connection writer with json config.
 | 
					// Init inits connection writer with json config.
 | 
				
			||||||
// json config only need key "level".
 | 
					// json config only need key "level".
 | 
				
			||||||
func (log *ConnLogger) Init(jsonconfig string) error {
 | 
					func (log *ConnLogger) Init(jsonconfig string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(jsonconfig), log)
 | 
						err := json.Unmarshal([]byte(jsonconfig), log)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
							return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CanColorStdout reports if we can color the Stdout
 | 
					// CanColorStdout reports if we can color the Stdout
 | 
				
			||||||
@@ -52,7 +52,6 @@ func NewConsoleLogger() LoggerProvider {
 | 
				
			|||||||
// Init inits connection writer with json config.
 | 
					// Init inits connection writer with json config.
 | 
				
			||||||
// json config only need key "level".
 | 
					// json config only need key "level".
 | 
				
			||||||
func (log *ConsoleLogger) Init(config string) error {
 | 
					func (log *ConsoleLogger) Init(config string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(config), log)
 | 
						err := json.Unmarshal([]byte(config), log)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
							return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,8 +15,8 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FileLogger implements LoggerProvider.
 | 
					// FileLogger implements LoggerProvider.
 | 
				
			||||||
@@ -101,7 +101,6 @@ func NewFileLogger() LoggerProvider {
 | 
				
			|||||||
//	"rotate":true
 | 
					//	"rotate":true
 | 
				
			||||||
//	}
 | 
					//	}
 | 
				
			||||||
func (log *FileLogger) Init(config string) error {
 | 
					func (log *FileLogger) Init(config string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(config), log); err != nil {
 | 
						if err := json.Unmarshal([]byte(config), log); err != nil {
 | 
				
			||||||
		return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
							return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Level is the level of the logger
 | 
					// Level is the level of the logger
 | 
				
			||||||
@@ -104,7 +104,6 @@ func FromString(level string) Level {
 | 
				
			|||||||
// UnmarshalJSON takes text and turns it into a Level
 | 
					// UnmarshalJSON takes text and turns it into a Level
 | 
				
			||||||
func (l *Level) UnmarshalJSON(b []byte) error {
 | 
					func (l *Level) UnmarshalJSON(b []byte) error {
 | 
				
			||||||
	var tmp interface{}
 | 
						var tmp interface{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal(b, &tmp)
 | 
						err := json.Unmarshal(b, &tmp)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "Err: %v", err)
 | 
							fmt.Fprintf(os.Stderr, "Err: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,8 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,7 +18,6 @@ type testLevel struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestLevelMarshalUnmarshalJSON(t *testing.T) {
 | 
					func TestLevelMarshalUnmarshalJSON(t *testing.T) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	levelBytes, err := json.Marshal(testLevel{
 | 
						levelBytes, err := json.Marshal(testLevel{
 | 
				
			||||||
		Level: INFO,
 | 
							Level: INFO,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
	"net/smtp"
 | 
						"net/smtp"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type smtpWriter struct {
 | 
					type smtpWriter struct {
 | 
				
			||||||
@@ -57,7 +57,6 @@ func NewSMTPLogger() LoggerProvider {
 | 
				
			|||||||
//		"level":LevelError
 | 
					//		"level":LevelError
 | 
				
			||||||
//	}
 | 
					//	}
 | 
				
			||||||
func (log *SMTPLogger) Init(jsonconfig string) error {
 | 
					func (log *SMTPLogger) Init(jsonconfig string) error {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.Unmarshal([]byte(jsonconfig), log)
 | 
						err := json.Unmarshal([]byte(jsonconfig), log)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
							return fmt.Errorf("Unable to parse JSON: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,10 +10,10 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/notification/base"
 | 
						"code.gitea.io/gitea/modules/notification/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repository"
 | 
						"code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type actionNotifier struct {
 | 
					type actionNotifier struct {
 | 
				
			||||||
@@ -296,7 +296,6 @@ func (*actionNotifier) NotifyPullRevieweDismiss(doer *models.User, review *model
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (a *actionNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
 | 
					func (a *actionNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.Marshal(commits)
 | 
						data, err := json.Marshal(commits)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Marshal: %v", err)
 | 
							log.Error("Marshal: %v", err)
 | 
				
			||||||
@@ -368,7 +367,6 @@ func (a *actionNotifier) NotifyDeleteRef(doer *models.User, repo *models.Reposit
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (a *actionNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
 | 
					func (a *actionNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.Marshal(commits)
 | 
						data, err := json.Marshal(commits)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("json.Marshal: %v", err)
 | 
							log.Error("json.Marshal: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,15 +6,14 @@ package private
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Git environment variables
 | 
					// Git environment variables
 | 
				
			||||||
@@ -88,7 +87,6 @@ func HookPreReceive(ctx context.Context, ownerName, repoName string, opts HookOp
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
	req := newInternalRequest(ctx, reqURL, "POST")
 | 
						req := newInternalRequest(ctx, reqURL, "POST")
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(opts)
 | 
						jsonBytes, _ := json.Marshal(opts)
 | 
				
			||||||
	req.Body(jsonBytes)
 | 
						req.Body(jsonBytes)
 | 
				
			||||||
	req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
 | 
						req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
 | 
				
			||||||
@@ -115,7 +113,6 @@ func HookPostReceive(ctx context.Context, ownerName, repoName string, opts HookO
 | 
				
			|||||||
	req := newInternalRequest(ctx, reqURL, "POST")
 | 
						req := newInternalRequest(ctx, reqURL, "POST")
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
 | 
						req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(opts)
 | 
						jsonBytes, _ := json.Marshal(opts)
 | 
				
			||||||
	req.Body(jsonBytes)
 | 
						req.Body(jsonBytes)
 | 
				
			||||||
	resp, err := req.Response()
 | 
						resp, err := req.Response()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/httplib"
 | 
						"code.gitea.io/gitea/modules/httplib"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newRequest(ctx context.Context, url, method string) *httplib.Request {
 | 
					func newRequest(ctx context.Context, url, method string) *httplib.Request {
 | 
				
			||||||
@@ -30,7 +30,6 @@ type Response struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func decodeJSONError(resp *http.Response) *Response {
 | 
					func decodeJSONError(resp *http.Response) *Response {
 | 
				
			||||||
	var res Response
 | 
						var res Response
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err := json.NewDecoder(resp.Body).Decode(&res)
 | 
						err := json.NewDecoder(resp.Body).Decode(&res)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		res.Err = err.Error()
 | 
							res.Err = err.Error()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@ import (
 | 
				
			|||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Email structure holds a data for sending general emails
 | 
					// Email structure holds a data for sending general emails
 | 
				
			||||||
@@ -33,7 +33,6 @@ func SendEmail(ctx context.Context, subject, message string, to []string) (int,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	req := newInternalRequest(ctx, reqURL, "POST")
 | 
						req := newInternalRequest(ctx, reqURL, "POST")
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(Email{
 | 
						jsonBytes, _ := json.Marshal(Email{
 | 
				
			||||||
		Subject: subject,
 | 
							Subject: subject,
 | 
				
			||||||
		Message: message,
 | 
							Message: message,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,8 @@ import (
 | 
				
			|||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Shutdown calls the internal shutdown function
 | 
					// Shutdown calls the internal shutdown function
 | 
				
			||||||
@@ -66,7 +66,6 @@ func FlushQueues(ctx context.Context, timeout time.Duration, nonBlocking bool) (
 | 
				
			|||||||
		req.SetTimeout(timeout+10*time.Second, timeout+10*time.Second)
 | 
							req.SetTimeout(timeout+10*time.Second, timeout+10*time.Second)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(FlushOptions{
 | 
						jsonBytes, _ := json.Marshal(FlushOptions{
 | 
				
			||||||
		Timeout:     timeout,
 | 
							Timeout:     timeout,
 | 
				
			||||||
		NonBlocking: nonBlocking,
 | 
							NonBlocking: nonBlocking,
 | 
				
			||||||
@@ -153,7 +152,6 @@ func AddLogger(ctx context.Context, group, name, mode string, config map[string]
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	req := newInternalRequest(ctx, reqURL, "POST")
 | 
						req := newInternalRequest(ctx, reqURL, "POST")
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(LoggerOptions{
 | 
						jsonBytes, _ := json.Marshal(LoggerOptions{
 | 
				
			||||||
		Group:  group,
 | 
							Group:  group,
 | 
				
			||||||
		Name:   name,
 | 
							Name:   name,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,8 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RestoreParams structure holds a data for restore repository
 | 
					// RestoreParams structure holds a data for restore repository
 | 
				
			||||||
@@ -30,7 +30,6 @@ func RestoreRepo(ctx context.Context, repoDir, ownerName, repoName string, units
 | 
				
			|||||||
	req := newInternalRequest(ctx, reqURL, "POST")
 | 
						req := newInternalRequest(ctx, reqURL, "POST")
 | 
				
			||||||
	req.SetTimeout(3*time.Second, 0) // since the request will spend much time, don't timeout
 | 
						req.SetTimeout(3*time.Second, 0) // since the request will spend much time, don't timeout
 | 
				
			||||||
	req = req.Header("Content-Type", "application/json")
 | 
						req = req.Header("Content-Type", "application/json")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	jsonBytes, _ := json.Marshal(RestoreParams{
 | 
						jsonBytes, _ := json.Marshal(RestoreParams{
 | 
				
			||||||
		RepoDir:   repoDir,
 | 
							RepoDir:   repoDir,
 | 
				
			||||||
		OwnerName: ownerName,
 | 
							OwnerName: ownerName,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,8 @@ import (
 | 
				
			|||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// KeyAndOwner is the response from ServNoCommand
 | 
					// KeyAndOwner is the response from ServNoCommand
 | 
				
			||||||
@@ -35,7 +35,6 @@ func ServNoCommand(ctx context.Context, keyID int64) (*models.PublicKey, *models
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var keyAndOwner KeyAndOwner
 | 
						var keyAndOwner KeyAndOwner
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.NewDecoder(resp.Body).Decode(&keyAndOwner); err != nil {
 | 
						if err := json.NewDecoder(resp.Body).Decode(&keyAndOwner); err != nil {
 | 
				
			||||||
		return nil, nil, err
 | 
							return nil, nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -91,7 +90,7 @@ func ServCommand(ctx context.Context, keyID int64, ownerName, repoName string, m
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer resp.Body.Close()
 | 
						defer resp.Body.Close()
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		var errServCommand ErrServCommand
 | 
							var errServCommand ErrServCommand
 | 
				
			||||||
		if err := json.NewDecoder(resp.Body).Decode(&errServCommand); err != nil {
 | 
							if err := json.NewDecoder(resp.Body).Decode(&errServCommand); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ package queue
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Mappable represents an interface that can MapTo another interface
 | 
					// Mappable represents an interface that can MapTo another interface
 | 
				
			||||||
@@ -20,8 +20,6 @@ type Mappable interface {
 | 
				
			|||||||
// It will tolerate the cfg being passed as a []byte or string of a json representation of the
 | 
					// It will tolerate the cfg being passed as a []byte or string of a json representation of the
 | 
				
			||||||
// exemplar or the correct type of the exemplar itself
 | 
					// exemplar or the correct type of the exemplar itself
 | 
				
			||||||
func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
					func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// First of all check if we've got the same type as the exemplar - if so it's all fine.
 | 
						// First of all check if we've got the same type as the exemplar - if so it's all fine.
 | 
				
			||||||
	if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
 | 
						if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
 | 
				
			||||||
		return cfg, nil
 | 
							return cfg, nil
 | 
				
			||||||
@@ -48,7 +46,6 @@ func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
				
			|||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		// hmm ... can we marshal it to json?
 | 
							// hmm ... can we marshal it to json?
 | 
				
			||||||
		var err error
 | 
							var err error
 | 
				
			||||||
 | 
					 | 
				
			||||||
		configBytes, err = json.Marshal(cfg)
 | 
							configBytes, err = json.Marshal(cfg)
 | 
				
			||||||
		ok = err == nil
 | 
							ok = err == nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -68,7 +65,6 @@ func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// unmarshalAs will attempt to unmarshal provided bytes as the provided exemplar
 | 
					// unmarshalAs will attempt to unmarshal provided bytes as the provided exemplar
 | 
				
			||||||
func unmarshalAs(bs []byte, exemplar interface{}) (data Data, err error) {
 | 
					func unmarshalAs(bs []byte, exemplar interface{}) (data Data, err error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if exemplar != nil {
 | 
						if exemplar != nil {
 | 
				
			||||||
		t := reflect.TypeOf(exemplar)
 | 
							t := reflect.TypeOf(exemplar)
 | 
				
			||||||
		n := reflect.New(t)
 | 
							n := reflect.New(t)
 | 
				
			||||||
@@ -78,7 +74,6 @@ func unmarshalAs(bs []byte, exemplar interface{}) (data Data, err error) {
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		err = json.Unmarshal(bs, &data)
 | 
							err = json.Unmarshal(bs, &data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var manager *Manager
 | 
					var manager *Manager
 | 
				
			||||||
@@ -110,7 +110,6 @@ func (m *Manager) Add(managed interface{},
 | 
				
			|||||||
	configuration,
 | 
						configuration,
 | 
				
			||||||
	exemplar interface{}) int64 {
 | 
						exemplar interface{}) int64 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	cfg, _ := json.Marshal(configuration)
 | 
						cfg, _ := json.Marshal(configuration)
 | 
				
			||||||
	mq := &ManagedQueue{
 | 
						mq := &ManagedQueue{
 | 
				
			||||||
		Type:          t,
 | 
							Type:          t,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ByteFIFOQueueConfiguration is the configuration for a ByteFIFOQueue
 | 
					// ByteFIFOQueueConfiguration is the configuration for a ByteFIFOQueue
 | 
				
			||||||
@@ -83,7 +83,6 @@ func (q *ByteFIFOQueue) PushFunc(data Data, fn func() error) error {
 | 
				
			|||||||
	if !assignableTo(data, q.exemplar) {
 | 
						if !assignableTo(data, q.exemplar) {
 | 
				
			||||||
		return fmt.Errorf("Unable to assign data: %v to same type as exemplar: %v in %s", data, q.exemplar, q.name)
 | 
							return fmt.Errorf("Unable to assign data: %v to same type as exemplar: %v in %s", data, q.exemplar, q.name)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	bs, err := json.Marshal(data)
 | 
						bs, err := json.Marshal(data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -309,7 +308,6 @@ func (q *ByteFIFOUniqueQueue) Has(data Data) (bool, error) {
 | 
				
			|||||||
	if !assignableTo(data, q.exemplar) {
 | 
						if !assignableTo(data, q.exemplar) {
 | 
				
			||||||
		return false, fmt.Errorf("Unable to assign data: %v to same type as exemplar: %v in %s", data, q.exemplar, q.name)
 | 
							return false, fmt.Errorf("Unable to assign data: %v to same type as exemplar: %v in %s", data, q.exemplar, q.name)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	bs, err := json.Marshal(data)
 | 
						bs, err := json.Marshal(data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return false, err
 | 
							return false, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,8 @@ package queue
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,8 +30,6 @@ func TestToConfig(t *testing.T) {
 | 
				
			|||||||
	assert.True(t, ok)
 | 
						assert.True(t, ok)
 | 
				
			||||||
	assert.NotEqual(t, cfg2, exemplar)
 | 
						assert.NotEqual(t, cfg2, exemplar)
 | 
				
			||||||
	assert.Equal(t, &cfg, &cfg2)
 | 
						assert.Equal(t, &cfg, &cfg2)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	cfgString, err := json.Marshal(cfg)
 | 
						cfgString, err := json.Marshal(cfg)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,9 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validType(t string) (Type, error) {
 | 
					func validType(t string) (Type, error) {
 | 
				
			||||||
@@ -27,8 +27,6 @@ func validType(t string) (Type, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func getQueueSettings(name string) (setting.QueueSettings, []byte) {
 | 
					func getQueueSettings(name string) (setting.QueueSettings, []byte) {
 | 
				
			||||||
	q := setting.GetQueueSettings(name)
 | 
						q := setting.GetQueueSettings(name)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	cfg, err := json.Marshal(q)
 | 
						cfg, err := json.Marshal(q)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Unable to marshall generic options: %v Error: %v", q, err)
 | 
							log.Error("Unable to marshall generic options: %v Error: %v", q, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,9 +12,9 @@ import (
 | 
				
			|||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Response is the structure of JSON returned from API
 | 
					// Response is the structure of JSON returned from API
 | 
				
			||||||
@@ -50,8 +50,8 @@ func Verify(ctx context.Context, response string) (bool, error) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return false, fmt.Errorf("Failed to read CAPTCHA response: %s", err)
 | 
							return false, fmt.Errorf("Failed to read CAPTCHA response: %s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var jsonResponse Response
 | 
						var jsonResponse Response
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	err = json.Unmarshal(body, &jsonResponse)
 | 
						err = json.Unmarshal(body, &jsonResponse)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return false, fmt.Errorf("Failed to parse CAPTCHA response: %s", err)
 | 
							return false, fmt.Errorf("Failed to parse CAPTCHA response: %s", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,12 +8,13 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.com/go-chi/session"
 | 
						"gitea.com/go-chi/session"
 | 
				
			||||||
	couchbase "gitea.com/go-chi/session/couchbase"
 | 
						couchbase "gitea.com/go-chi/session/couchbase"
 | 
				
			||||||
	memcache "gitea.com/go-chi/session/memcache"
 | 
						memcache "gitea.com/go-chi/session/memcache"
 | 
				
			||||||
	mysql "gitea.com/go-chi/session/mysql"
 | 
						mysql "gitea.com/go-chi/session/mysql"
 | 
				
			||||||
	postgres "gitea.com/go-chi/session/postgres"
 | 
						postgres "gitea.com/go-chi/session/postgres"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// VirtualSessionProvider represents a shadowed session provider implementation.
 | 
					// VirtualSessionProvider represents a shadowed session provider implementation.
 | 
				
			||||||
@@ -25,7 +26,6 @@ type VirtualSessionProvider struct {
 | 
				
			|||||||
// Init initializes the cookie session provider with given root path.
 | 
					// Init initializes the cookie session provider with given root path.
 | 
				
			||||||
func (o *VirtualSessionProvider) Init(gclifetime int64, config string) error {
 | 
					func (o *VirtualSessionProvider) Init(gclifetime int64, config string) error {
 | 
				
			||||||
	var opts session.Options
 | 
						var opts session.Options
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(config), &opts); err != nil {
 | 
						if err := json.Unmarshal([]byte(config), &opts); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,14 +13,13 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ini "gopkg.in/ini.v1"
 | 
						ini "gopkg.in/ini.v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var filenameSuffix = ""
 | 
					var filenameSuffix = ""
 | 
				
			||||||
 | 
					 | 
				
			||||||
var descriptionLock = sync.RWMutex{}
 | 
					var descriptionLock = sync.RWMutex{}
 | 
				
			||||||
var logDescriptions = make(map[string]*LogDescription)
 | 
					var logDescriptions = make(map[string]*LogDescription)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -203,8 +202,6 @@ func generateLogConfig(sec *ini.Section, name string, defaults defaultLogOptions
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logConfig["colorize"] = sec.Key("COLORIZE").MustBool(false)
 | 
						logConfig["colorize"] = sec.Key("COLORIZE").MustBool(false)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	byteConfig, err := json.Marshal(logConfig)
 | 
						byteConfig, err := json.Marshal(logConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Failed to marshal log configuration: %v %v", logConfig, err)
 | 
							log.Error("Failed to marshal log configuration: %v %v", logConfig, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@ import (
 | 
				
			|||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -65,8 +65,6 @@ func newSessionService() {
 | 
				
			|||||||
	default:
 | 
						default:
 | 
				
			||||||
		SessionConfig.SameSite = http.SameSiteLaxMode
 | 
							SessionConfig.SameSite = http.SameSiteLaxMode
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	shadowConfig, err := json.Marshal(SessionConfig)
 | 
						shadowConfig, err := json.Marshal(SessionConfig)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal("Can't shadow session config: %v", err)
 | 
							log.Fatal("Can't shadow session config: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,11 +24,11 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/generate"
 | 
						"code.gitea.io/gitea/modules/generate"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/user"
 | 
						"code.gitea.io/gitea/modules/user"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	shellquote "github.com/kballard/go-shellquote"
 | 
						shellquote "github.com/kballard/go-shellquote"
 | 
				
			||||||
	"github.com/unknwon/com"
 | 
						"github.com/unknwon/com"
 | 
				
			||||||
	gossh "golang.org/x/crypto/ssh"
 | 
						gossh "golang.org/x/crypto/ssh"
 | 
				
			||||||
@@ -1116,7 +1116,6 @@ func MakeManifestData(appName string, appURL string, absoluteAssetURL string) []
 | 
				
			|||||||
		Icons     []manifestIcon `json:"icons"`
 | 
							Icons     []manifestIcon `json:"icons"`
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	bytes, err := json.Marshal(&manifestJSON{
 | 
						bytes, err := json.Marshal(&manifestJSON{
 | 
				
			||||||
		Name:      appName,
 | 
							Name:      appName,
 | 
				
			||||||
		ShortName: appName,
 | 
							ShortName: appName,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,8 @@ package setting
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,6 +29,5 @@ func TestMakeAbsoluteAssetURL(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestMakeManifestData(t *testing.T) {
 | 
					func TestMakeManifestData(t *testing.T) {
 | 
				
			||||||
	jsonBytes := MakeManifestData(`Example App '\"`, "https://example.com", "https://example.com/foo/bar")
 | 
						jsonBytes := MakeManifestData(`Example App '\"`, "https://example.com", "https://example.com/foo/bar")
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	assert.True(t, json.Valid(jsonBytes))
 | 
						assert.True(t, json.Valid(jsonBytes))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ package storage
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Mappable represents an interface that can MapTo another interface
 | 
					// Mappable represents an interface that can MapTo another interface
 | 
				
			||||||
@@ -20,8 +20,6 @@ type Mappable interface {
 | 
				
			|||||||
// It will tolerate the cfg being passed as a []byte or string of a json representation of the
 | 
					// It will tolerate the cfg being passed as a []byte or string of a json representation of the
 | 
				
			||||||
// exemplar or the correct type of the exemplar itself
 | 
					// exemplar or the correct type of the exemplar itself
 | 
				
			||||||
func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
					func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// First of all check if we've got the same type as the exemplar - if so it's all fine.
 | 
						// First of all check if we've got the same type as the exemplar - if so it's all fine.
 | 
				
			||||||
	if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
 | 
						if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
 | 
				
			||||||
		return cfg, nil
 | 
							return cfg, nil
 | 
				
			||||||
@@ -48,7 +46,6 @@ func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 | 
				
			|||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		// hmm ... can we marshal it to json?
 | 
							// hmm ... can we marshal it to json?
 | 
				
			||||||
		var err error
 | 
							var err error
 | 
				
			||||||
 | 
					 | 
				
			||||||
		configBytes, err = json.Marshal(cfg)
 | 
							configBytes, err = json.Marshal(cfg)
 | 
				
			||||||
		ok = err == nil
 | 
							ok = err == nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -132,14 +132,12 @@ type CreatePayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload return payload information
 | 
					// JSONPayload return payload information
 | 
				
			||||||
func (p *CreatePayload) JSONPayload() ([]byte, error) {
 | 
					func (p *CreatePayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ParseCreateHook parses create event hook content.
 | 
					// ParseCreateHook parses create event hook content.
 | 
				
			||||||
func ParseCreateHook(raw []byte) (*CreatePayload, error) {
 | 
					func ParseCreateHook(raw []byte) (*CreatePayload, error) {
 | 
				
			||||||
	hook := new(CreatePayload)
 | 
						hook := new(CreatePayload)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal(raw, hook); err != nil {
 | 
						if err := json.Unmarshal(raw, hook); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -183,7 +181,6 @@ type DeletePayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload implements Payload
 | 
					// JSONPayload implements Payload
 | 
				
			||||||
func (p *DeletePayload) JSONPayload() ([]byte, error) {
 | 
					func (p *DeletePayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -203,7 +200,6 @@ type ForkPayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload implements Payload
 | 
					// JSONPayload implements Payload
 | 
				
			||||||
func (p *ForkPayload) JSONPayload() ([]byte, error) {
 | 
					func (p *ForkPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -230,7 +226,6 @@ type IssueCommentPayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload implements Payload
 | 
					// JSONPayload implements Payload
 | 
				
			||||||
func (p *IssueCommentPayload) JSONPayload() ([]byte, error) {
 | 
					func (p *IssueCommentPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -261,7 +256,6 @@ type ReleasePayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload implements Payload
 | 
					// JSONPayload implements Payload
 | 
				
			||||||
func (p *ReleasePayload) JSONPayload() ([]byte, error) {
 | 
					func (p *ReleasePayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -287,14 +281,12 @@ type PushPayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload FIXME
 | 
					// JSONPayload FIXME
 | 
				
			||||||
func (p *PushPayload) JSONPayload() ([]byte, error) {
 | 
					func (p *PushPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ParsePushHook parses push event hook content.
 | 
					// ParsePushHook parses push event hook content.
 | 
				
			||||||
func ParsePushHook(raw []byte) (*PushPayload, error) {
 | 
					func ParsePushHook(raw []byte) (*PushPayload, error) {
 | 
				
			||||||
	hook := new(PushPayload)
 | 
						hook := new(PushPayload)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal(raw, hook); err != nil {
 | 
						if err := json.Unmarshal(raw, hook); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -362,7 +354,6 @@ type IssuePayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload encodes the IssuePayload to JSON, with an indentation of two spaces.
 | 
					// JSONPayload encodes the IssuePayload to JSON, with an indentation of two spaces.
 | 
				
			||||||
func (p *IssuePayload) JSONPayload() ([]byte, error) {
 | 
					func (p *IssuePayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -398,7 +389,6 @@ type PullRequestPayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload FIXME
 | 
					// JSONPayload FIXME
 | 
				
			||||||
func (p *PullRequestPayload) JSONPayload() ([]byte, error) {
 | 
					func (p *PullRequestPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", "  ")
 | 
						return json.MarshalIndent(p, "", "  ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -435,6 +425,5 @@ type RepositoryPayload struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload JSON representation of the payload
 | 
					// JSONPayload JSON representation of the payload
 | 
				
			||||||
func (p *RepositoryPayload) JSONPayload() ([]byte, error) {
 | 
					func (p *RepositoryPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.MarshalIndent(p, "", " ")
 | 
						return json.MarshalIndent(p, "", " ")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ package structs
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// User represents a user
 | 
					// User represents a user
 | 
				
			||||||
@@ -56,7 +56,6 @@ type User struct {
 | 
				
			|||||||
func (u User) MarshalJSON() ([]byte, error) {
 | 
					func (u User) MarshalJSON() ([]byte, error) {
 | 
				
			||||||
	// Re-declaring User to avoid recursion
 | 
						// Re-declaring User to avoid recursion
 | 
				
			||||||
	type shadow User
 | 
						type shadow User
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(struct {
 | 
						return json.Marshal(struct {
 | 
				
			||||||
		shadow
 | 
							shadow
 | 
				
			||||||
		CompatUserName string `json:"username"`
 | 
							CompatUserName string `json:"username"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/migrations"
 | 
						"code.gitea.io/gitea/modules/migrations"
 | 
				
			||||||
	migration "code.gitea.io/gitea/modules/migrations/base"
 | 
						migration "code.gitea.io/gitea/modules/migrations/base"
 | 
				
			||||||
@@ -20,7 +21,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func handleCreateError(owner *models.User, err error) error {
 | 
					func handleCreateError(owner *models.User, err error) error {
 | 
				
			||||||
@@ -112,7 +112,6 @@ func runMigrateTask(t *models.Task) (err error) {
 | 
				
			|||||||
			Format: format,
 | 
								Format: format,
 | 
				
			||||||
			Args:   args,
 | 
								Args:   args,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		bs, _ := json.Marshal(message)
 | 
							bs, _ := json.Marshal(message)
 | 
				
			||||||
		t.Message = string(bs)
 | 
							t.Message = string(bs)
 | 
				
			||||||
		_ = t.UpdateCols("message")
 | 
							_ = t.UpdateCols("message")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/migrations/base"
 | 
						"code.gitea.io/gitea/modules/migrations/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
@@ -18,7 +19,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// taskQueue is a global queue of tasks
 | 
					// taskQueue is a global queue of tasks
 | 
				
			||||||
@@ -85,8 +85,6 @@ func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models.
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts.AuthToken = ""
 | 
						opts.AuthToken = ""
 | 
				
			||||||
 | 
					 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	bs, err := json.Marshal(&opts)
 | 
						bs, err := json.Marshal(&opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ package templates
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"container/list"
 | 
						"container/list"
 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"html"
 | 
						"html"
 | 
				
			||||||
@@ -28,6 +27,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/emoji"
 | 
						"code.gitea.io/gitea/modules/emoji"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup"
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repository"
 | 
						"code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
@@ -38,7 +38,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/services/gitdiff"
 | 
						"code.gitea.io/gitea/services/gitdiff"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/editorconfig/editorconfig-core-go/v2"
 | 
						"github.com/editorconfig/editorconfig-core-go/v2"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Used from static.go && dynamic.go
 | 
					// Used from static.go && dynamic.go
 | 
				
			||||||
@@ -46,7 +45,6 @@ var mailSubjectSplit = regexp.MustCompile(`(?m)^-{3,}[\s]*$`)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// NewFuncMap returns functions for injecting to templates
 | 
					// NewFuncMap returns functions for injecting to templates
 | 
				
			||||||
func NewFuncMap() []template.FuncMap {
 | 
					func NewFuncMap() []template.FuncMap {
 | 
				
			||||||
	jsonED := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return []template.FuncMap{map[string]interface{}{
 | 
						return []template.FuncMap{map[string]interface{}{
 | 
				
			||||||
		"GoVer": func() string {
 | 
							"GoVer": func() string {
 | 
				
			||||||
			return strings.Title(runtime.Version())
 | 
								return strings.Title(runtime.Version())
 | 
				
			||||||
@@ -221,7 +219,7 @@ func NewFuncMap() []template.FuncMap {
 | 
				
			|||||||
			return fmt.Sprintf("%f", float64(adds)/(float64(adds)+float64(dels))*100)
 | 
								return fmt.Sprintf("%f", float64(adds)/(float64(adds)+float64(dels))*100)
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		"Json": func(in interface{}) string {
 | 
							"Json": func(in interface{}) string {
 | 
				
			||||||
			out, err := jsonED.Marshal(in)
 | 
								out, err := json.Marshal(in)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return ""
 | 
									return ""
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -847,7 +845,6 @@ func ActionContent2Commits(act Actioner) *repository.PushCommits {
 | 
				
			|||||||
		return push
 | 
							return push
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(act.GetContent()), push); err != nil {
 | 
						if err := json.Unmarshal([]byte(act.GetContent()), push); err != nil {
 | 
				
			||||||
		log.Error("json.Unmarshal:\n%s\nERROR: %v", act.GetContent(), err)
 | 
							log.Error("json.Unmarshal:\n%s\nERROR: %v", act.GetContent(), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,11 +12,11 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/convert"
 | 
						"code.gitea.io/gitea/modules/convert"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/utils"
 | 
						"code.gitea.io/gitea/routers/utils"
 | 
				
			||||||
	"code.gitea.io/gitea/services/webhook"
 | 
						"code.gitea.io/gitea/services/webhook"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetOrgHook get an organization's webhook. If there is an error, write to
 | 
					// GetOrgHook get an organization's webhook. If there is an error, write to
 | 
				
			||||||
@@ -147,7 +147,6 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID
 | 
				
			|||||||
			return nil, false
 | 
								return nil, false
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		meta, err := json.Marshal(&webhook.SlackMeta{
 | 
							meta, err := json.Marshal(&webhook.SlackMeta{
 | 
				
			||||||
			Channel:  strings.TrimSpace(channel),
 | 
								Channel:  strings.TrimSpace(channel),
 | 
				
			||||||
			Username: form.Config["username"],
 | 
								Username: form.Config["username"],
 | 
				
			||||||
@@ -222,7 +221,6 @@ func editHook(ctx *context.APIContext, form *api.EditHookOption, w *models.Webho
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if w.Type == models.SLACK {
 | 
							if w.Type == models.SLACK {
 | 
				
			||||||
			if channel, ok := form.Config["channel"]; ok {
 | 
								if channel, ok := form.Config["channel"]; ok {
 | 
				
			||||||
				json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
				meta, err := json.Marshal(&webhook.SlackMeta{
 | 
									meta, err := json.Marshal(&webhook.SlackMeta{
 | 
				
			||||||
					Channel:  channel,
 | 
										Channel:  channel,
 | 
				
			||||||
					Username: form.Config["username"],
 | 
										Username: form.Config["username"],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,11 +11,11 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/private"
 | 
						"code.gitea.io/gitea/modules/private"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/services/mailer"
 | 
						"code.gitea.io/gitea/services/mailer"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SendEmail pushes messages to mail queue
 | 
					// SendEmail pushes messages to mail queue
 | 
				
			||||||
@@ -32,7 +32,7 @@ func SendEmail(ctx *context.PrivateContext) {
 | 
				
			|||||||
	var mail private.Email
 | 
						var mail private.Email
 | 
				
			||||||
	rd := ctx.Req.Body
 | 
						rd := ctx.Req.Body
 | 
				
			||||||
	defer rd.Close()
 | 
						defer rd.Close()
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	if err := json.NewDecoder(rd).Decode(&mail); err != nil {
 | 
						if err := json.NewDecoder(rd).Decode(&mail); err != nil {
 | 
				
			||||||
		log.Error("%v", err)
 | 
							log.Error("%v", err)
 | 
				
			||||||
		ctx.JSON(http.StatusInternalServerError, private.Response{
 | 
							ctx.JSON(http.StatusInternalServerError, private.Response{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,12 +10,12 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/private"
 | 
						"code.gitea.io/gitea/modules/private"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/web"
 | 
						"code.gitea.io/gitea/modules/web"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FlushQueues flushes all the Queues
 | 
					// FlushQueues flushes all the Queues
 | 
				
			||||||
@@ -130,7 +130,6 @@ func AddLogger(ctx *context.PrivateContext) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bufferLen := setting.Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000)
 | 
						bufferLen := setting.Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	byteConfig, err := json.Marshal(opts.Config)
 | 
						byteConfig, err := json.Marshal(opts.Config)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Error("Failed to marshal log configuration: %v %v", opts.Config, err)
 | 
							log.Error("Failed to marshal log configuration: %v %v", opts.Config, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,14 +9,13 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	myCtx "code.gitea.io/gitea/modules/context"
 | 
						myCtx "code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/migrations"
 | 
						"code.gitea.io/gitea/modules/migrations"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/private"
 | 
						"code.gitea.io/gitea/modules/private"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RestoreRepo restore a repository from data
 | 
					// RestoreRepo restore a repository from data
 | 
				
			||||||
func RestoreRepo(ctx *myCtx.PrivateContext) {
 | 
					func RestoreRepo(ctx *myCtx.PrivateContext) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	bs, err := ioutil.ReadAll(ctx.Req.Body)
 | 
						bs, err := ioutil.ReadAll(ctx.Req.Body)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.JSON(http.StatusInternalServerError, private.Response{
 | 
							ctx.JSON(http.StatusInternalServerError, private.Response{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/cron"
 | 
						"code.gitea.io/gitea/modules/cron"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/process"
 | 
						"code.gitea.io/gitea/modules/process"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
@@ -28,7 +29,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/web"
 | 
						"code.gitea.io/gitea/modules/web"
 | 
				
			||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
	"code.gitea.io/gitea/services/mailer"
 | 
						"code.gitea.io/gitea/services/mailer"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"gitea.com/go-chi/session"
 | 
						"gitea.com/go-chi/session"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -275,7 +275,6 @@ func Config(ctx *context.Context) {
 | 
				
			|||||||
	sessionCfg := setting.SessionConfig
 | 
						sessionCfg := setting.SessionConfig
 | 
				
			||||||
	if sessionCfg.Provider == "VirtualSession" {
 | 
						if sessionCfg.Provider == "VirtualSession" {
 | 
				
			||||||
		var realSession session.Options
 | 
							var realSession session.Options
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		if err := json.Unmarshal([]byte(sessionCfg.ProviderConfig), &realSession); err != nil {
 | 
							if err := json.Unmarshal([]byte(sessionCfg.ProviderConfig), &realSession); err != nil {
 | 
				
			||||||
			log.Error("Unable to unmarshall session config for virtualed provider config: %s\nError: %v", sessionCfg.ProviderConfig, err)
 | 
								log.Error("Unable to unmarshall session config for virtualed provider config: %s\nError: %v", sessionCfg.ProviderConfig, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,10 +13,10 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/convert"
 | 
						"code.gitea.io/gitea/modules/convert"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/eventsource"
 | 
						"code.gitea.io/gitea/modules/eventsource"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/user"
 | 
						"code.gitea.io/gitea/routers/web/user"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Events listens for events
 | 
					// Events listens for events
 | 
				
			||||||
@@ -103,7 +103,6 @@ loop:
 | 
				
			|||||||
				log.Error("Unable to APIFormat stopwatches: %v", err)
 | 
									log.Error("Unable to APIFormat stopwatches: %v", err)
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
			dataBs, err := json.Marshal(apiSWs)
 | 
								dataBs, err := json.Marshal(apiSWs)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				log.Error("Unable to marshal stopwatches: %v", err)
 | 
									log.Error("Unable to marshal stopwatches: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/charset"
 | 
						"code.gitea.io/gitea/modules/charset"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repofiles"
 | 
						"code.gitea.io/gitea/modules/repofiles"
 | 
				
			||||||
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
						repo_module "code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
@@ -26,7 +27,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/web"
 | 
						"code.gitea.io/gitea/modules/web"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/utils"
 | 
						"code.gitea.io/gitea/routers/utils"
 | 
				
			||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -165,7 +165,6 @@ func GetEditorConfig(ctx *context.Context, treePath string) string {
 | 
				
			|||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		def, err := ec.GetDefinitionForFilename(treePath)
 | 
							def, err := ec.GetDefinitionForFilename(treePath)
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
			jsonStr, _ := json.Marshal(def)
 | 
								jsonStr, _ := json.Marshal(def)
 | 
				
			||||||
			return string(jsonStr)
 | 
								return string(jsonStr)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,13 +17,13 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/convert"
 | 
						"code.gitea.io/gitea/modules/convert"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/web"
 | 
						"code.gitea.io/gitea/modules/web"
 | 
				
			||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
	"code.gitea.io/gitea/services/webhook"
 | 
						"code.gitea.io/gitea/services/webhook"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -306,7 +306,6 @@ func DiscordHooksNewPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.DiscordMeta{
 | 
						meta, err := json.Marshal(&webhook.DiscordMeta{
 | 
				
			||||||
		Username: form.Username,
 | 
							Username: form.Username,
 | 
				
			||||||
		IconURL:  form.IconURL,
 | 
							IconURL:  form.IconURL,
 | 
				
			||||||
@@ -402,7 +401,6 @@ func TelegramHooksNewPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.TelegramMeta{
 | 
						meta, err := json.Marshal(&webhook.TelegramMeta{
 | 
				
			||||||
		BotToken: form.BotToken,
 | 
							BotToken: form.BotToken,
 | 
				
			||||||
		ChatID:   form.ChatID,
 | 
							ChatID:   form.ChatID,
 | 
				
			||||||
@@ -455,7 +453,6 @@ func MatrixHooksNewPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.MatrixMeta{
 | 
						meta, err := json.Marshal(&webhook.MatrixMeta{
 | 
				
			||||||
		HomeserverURL: form.HomeserverURL,
 | 
							HomeserverURL: form.HomeserverURL,
 | 
				
			||||||
		Room:          form.RoomID,
 | 
							Room:          form.RoomID,
 | 
				
			||||||
@@ -560,7 +557,6 @@ func SlackHooksNewPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.SlackMeta{
 | 
						meta, err := json.Marshal(&webhook.SlackMeta{
 | 
				
			||||||
		Channel:  strings.TrimSpace(form.Channel),
 | 
							Channel:  strings.TrimSpace(form.Channel),
 | 
				
			||||||
		Username: form.Username,
 | 
							Username: form.Username,
 | 
				
			||||||
@@ -848,7 +844,6 @@ func SlackHooksEditPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.SlackMeta{
 | 
						meta, err := json.Marshal(&webhook.SlackMeta{
 | 
				
			||||||
		Channel:  strings.TrimSpace(form.Channel),
 | 
							Channel:  strings.TrimSpace(form.Channel),
 | 
				
			||||||
		Username: form.Username,
 | 
							Username: form.Username,
 | 
				
			||||||
@@ -894,7 +889,6 @@ func DiscordHooksEditPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	meta, err := json.Marshal(&webhook.DiscordMeta{
 | 
						meta, err := json.Marshal(&webhook.DiscordMeta{
 | 
				
			||||||
		Username: form.Username,
 | 
							Username: form.Username,
 | 
				
			||||||
		IconURL:  form.IconURL,
 | 
							IconURL:  form.IconURL,
 | 
				
			||||||
@@ -970,7 +964,7 @@ func TelegramHooksEditPost(ctx *context.Context) {
 | 
				
			|||||||
		ctx.HTML(http.StatusOK, orCtx.NewTemplate)
 | 
							ctx.HTML(http.StatusOK, orCtx.NewTemplate)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	meta, err := json.Marshal(&webhook.TelegramMeta{
 | 
						meta, err := json.Marshal(&webhook.TelegramMeta{
 | 
				
			||||||
		BotToken: form.BotToken,
 | 
							BotToken: form.BotToken,
 | 
				
			||||||
		ChatID:   form.ChatID,
 | 
							ChatID:   form.ChatID,
 | 
				
			||||||
@@ -1012,7 +1006,7 @@ func MatrixHooksEditPost(ctx *context.Context) {
 | 
				
			|||||||
		ctx.HTML(http.StatusOK, orCtx.NewTemplate)
 | 
							ctx.HTML(http.StatusOK, orCtx.NewTemplate)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	meta, err := json.Marshal(&webhook.MatrixMeta{
 | 
						meta, err := json.Marshal(&webhook.MatrixMeta{
 | 
				
			||||||
		HomeserverURL: form.HomeserverURL,
 | 
							HomeserverURL: form.HomeserverURL,
 | 
				
			||||||
		Room:          form.RoomID,
 | 
							Room:          form.RoomID,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
 | 
						issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup"
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
						"code.gitea.io/gitea/modules/markup/markdown"
 | 
				
			||||||
@@ -26,7 +27,6 @@ import (
 | 
				
			|||||||
	issue_service "code.gitea.io/gitea/services/issue"
 | 
						issue_service "code.gitea.io/gitea/services/issue"
 | 
				
			||||||
	pull_service "code.gitea.io/gitea/services/pull"
 | 
						pull_service "code.gitea.io/gitea/services/pull"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	"github.com/keybase/go-crypto/openpgp"
 | 
						"github.com/keybase/go-crypto/openpgp"
 | 
				
			||||||
	"github.com/keybase/go-crypto/openpgp/armor"
 | 
						"github.com/keybase/go-crypto/openpgp/armor"
 | 
				
			||||||
	"xorm.io/builder"
 | 
						"xorm.io/builder"
 | 
				
			||||||
@@ -703,7 +703,6 @@ func buildIssueOverview(ctx *context.Context, unitType models.UnitType) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Convert []int64 to string
 | 
						// Convert []int64 to string
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	reposParam, _ := json.Marshal(repoIDs)
 | 
						reposParam, _ := json.Marshal(repoIDs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["ReposParam"] = string(reposParam)
 | 
						ctx.Data["ReposParam"] = string(reposParam)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
@@ -25,7 +26,6 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"gitea.com/go-chi/binding"
 | 
						"gitea.com/go-chi/binding"
 | 
				
			||||||
	"github.com/golang-jwt/jwt"
 | 
						"github.com/golang-jwt/jwt"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -507,7 +507,7 @@ func OIDCKeys(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Resp.Header().Set("Content-Type", "application/json")
 | 
						ctx.Resp.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
	enc := jsoniter.NewEncoder(ctx.Resp)
 | 
						enc := json.NewEncoder(ctx.Resp)
 | 
				
			||||||
	if err := enc.Encode(jwks); err != nil {
 | 
						if err := enc.Encode(jwks); err != nil {
 | 
				
			||||||
		log.Error("Failed to encode representation as json. Error: %v", err)
 | 
							log.Error("Failed to encode representation as json. Error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TaskStatus returns task's status
 | 
					// TaskStatus returns task's status
 | 
				
			||||||
@@ -26,7 +26,6 @@ func TaskStatus(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if task.Message != "" && task.Message[0] == '{' {
 | 
						if task.Message != "" && task.Message[0] == '{' {
 | 
				
			||||||
		// assume message is actually a translatable string
 | 
							// assume message is actually a translatable string
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		var translatableMessage models.TranslatableMessage
 | 
							var translatableMessage models.TranslatableMessage
 | 
				
			||||||
		if err := json.Unmarshal([]byte(message), &translatableMessage); err != nil {
 | 
							if err := json.Unmarshal([]byte(message), &translatableMessage); err != nil {
 | 
				
			||||||
			translatableMessage = models.TranslatableMessage{
 | 
								translatableMessage = models.TranslatableMessage{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,10 +8,9 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/secret"
 | 
						"code.gitea.io/gitea/modules/secret"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// .____     ________      _____ __________
 | 
					// .____     ________      _____ __________
 | 
				
			||||||
@@ -79,7 +78,6 @@ func (source *Source) ToDB() ([]byte, error) {
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	source.BindPassword = ""
 | 
						source.BindPassword = ""
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(source)
 | 
						return json.Marshal(source)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,7 @@ package oauth2
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ________      _____          __  .__     ________
 | 
					// ________      _____          __  .__     ________
 | 
				
			||||||
@@ -37,7 +36,6 @@ func (source *Source) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports an SMTPConfig to a serialized format.
 | 
					// ToDB exports an SMTPConfig to a serialized format.
 | 
				
			||||||
func (source *Source) ToDB() ([]byte, error) {
 | 
					func (source *Source) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(source)
 | 
						return json.Marshal(source)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,7 @@ package pam
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// __________  _____      _____
 | 
					// __________  _____      _____
 | 
				
			||||||
@@ -33,7 +32,6 @@ func (source *Source) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports a PAMConfig to a serialized format.
 | 
					// ToDB exports a PAMConfig to a serialized format.
 | 
				
			||||||
func (source *Source) ToDB() ([]byte, error) {
 | 
					func (source *Source) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(source)
 | 
						return json.Marshal(source)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,7 @@ package smtp
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   _________   __________________________
 | 
					//   _________   __________________________
 | 
				
			||||||
@@ -37,7 +36,6 @@ func (source *Source) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports an SMTPConfig to a serialized format.
 | 
					// ToDB exports an SMTPConfig to a serialized format.
 | 
				
			||||||
func (source *Source) ToDB() ([]byte, error) {
 | 
					func (source *Source) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(source)
 | 
						return json.Marshal(source)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ package sspi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   _________ ___________________.___
 | 
					//   _________ ___________________.___
 | 
				
			||||||
@@ -32,7 +32,6 @@ func (cfg *Source) FromDB(bs []byte) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ToDB exports an SSPIConfig to a serialized format.
 | 
					// ToDB exports an SSPIConfig to a serialized format.
 | 
				
			||||||
func (cfg *Source) ToDB() ([]byte, error) {
 | 
					func (cfg *Source) ToDB() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	return json.Marshal(cfg)
 | 
						return json.Marshal(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,8 +14,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/highlight"
 | 
						"code.gitea.io/gitea/modules/highlight"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					
 | 
				
			||||||
	dmp "github.com/sergi/go-diff/diffmatchpatch"
 | 
						dmp "github.com/sergi/go-diff/diffmatchpatch"
 | 
				
			||||||
	"github.com/stretchr/testify/assert"
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
	"gopkg.in/ini.v1"
 | 
						"gopkg.in/ini.v1"
 | 
				
			||||||
@@ -297,7 +298,7 @@ index 6961180..9ba1a00 100644
 | 
				
			|||||||
				t.Errorf("ParsePatch(%q) error = %v, wantErr %v", testcase.name, err, testcase.wantErr)
 | 
									t.Errorf("ParsePatch(%q) error = %v, wantErr %v", testcase.name, err, testcase.wantErr)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
			gotMarshaled, _ := json.MarshalIndent(got, "", "  ")
 | 
								gotMarshaled, _ := json.MarshalIndent(got, "", "  ")
 | 
				
			||||||
			if got.NumFiles != 1 {
 | 
								if got.NumFiles != 1 {
 | 
				
			||||||
				t.Errorf("ParsePath(%q) did not receive 1 file:\n%s", testcase.name, string(gotMarshaled))
 | 
									t.Errorf("ParsePath(%q) did not receive 1 file:\n%s", testcase.name, string(gotMarshaled))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,11 +12,11 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/convert"
 | 
						"code.gitea.io/gitea/modules/convert"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	lfs_module "code.gitea.io/gitea/modules/lfs"
 | 
						lfs_module "code.gitea.io/gitea/modules/lfs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func handleLockListOut(ctx *context.Context, repo *models.Repository, lock *models.LFSLock, err error) {
 | 
					func handleLockListOut(ctx *context.Context, repo *models.Repository, lock *models.LFSLock, err error) {
 | 
				
			||||||
@@ -159,7 +159,7 @@ func PostLockHandler(ctx *context.Context) {
 | 
				
			|||||||
	var req api.LFSLockRequest
 | 
						var req api.LFSLockRequest
 | 
				
			||||||
	bodyReader := ctx.Req.Body
 | 
						bodyReader := ctx.Req.Body
 | 
				
			||||||
	defer bodyReader.Close()
 | 
						defer bodyReader.Close()
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	dec := json.NewDecoder(bodyReader)
 | 
						dec := json.NewDecoder(bodyReader)
 | 
				
			||||||
	if err := dec.Decode(&req); err != nil {
 | 
						if err := dec.Decode(&req); err != nil {
 | 
				
			||||||
		log.Warn("Failed to decode lock request as json. Error: %v", err)
 | 
							log.Warn("Failed to decode lock request as json. Error: %v", err)
 | 
				
			||||||
@@ -293,7 +293,7 @@ func UnLockHandler(ctx *context.Context) {
 | 
				
			|||||||
	var req api.LFSLockDeleteRequest
 | 
						var req api.LFSLockDeleteRequest
 | 
				
			||||||
	bodyReader := ctx.Req.Body
 | 
						bodyReader := ctx.Req.Body
 | 
				
			||||||
	defer bodyReader.Close()
 | 
						defer bodyReader.Close()
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					
 | 
				
			||||||
	dec := json.NewDecoder(bodyReader)
 | 
						dec := json.NewDecoder(bodyReader)
 | 
				
			||||||
	if err := dec.Decode(&req); err != nil {
 | 
						if err := dec.Decode(&req); err != nil {
 | 
				
			||||||
		log.Warn("Failed to decode lock request as json. Error: %v", err)
 | 
							log.Warn("Failed to decode lock request as json. Error: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,12 +17,12 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	lfs_module "code.gitea.io/gitea/modules/lfs"
 | 
						lfs_module "code.gitea.io/gitea/modules/lfs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/golang-jwt/jwt"
 | 
						"github.com/golang-jwt/jwt"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// requestContext contain variables from the HTTP request.
 | 
					// requestContext contain variables from the HTTP request.
 | 
				
			||||||
@@ -243,7 +243,7 @@ func BatchHandler(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Resp.Header().Set("Content-Type", lfs_module.MediaType)
 | 
						ctx.Resp.Header().Set("Content-Type", lfs_module.MediaType)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enc := jsoniter.NewEncoder(ctx.Resp)
 | 
						enc := json.NewEncoder(ctx.Resp)
 | 
				
			||||||
	if err := enc.Encode(respobj); err != nil {
 | 
						if err := enc.Encode(respobj); err != nil {
 | 
				
			||||||
		log.Error("Failed to encode representation as json. Error: %v", err)
 | 
							log.Error("Failed to encode representation as json. Error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -336,7 +336,7 @@ func VerifyHandler(ctx *context.Context) {
 | 
				
			|||||||
func decodeJSON(req *http.Request, v interface{}) error {
 | 
					func decodeJSON(req *http.Request, v interface{}) error {
 | 
				
			||||||
	defer req.Body.Close()
 | 
						defer req.Body.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dec := jsoniter.NewDecoder(req.Body)
 | 
						dec := json.NewDecoder(req.Body)
 | 
				
			||||||
	return dec.Decode(v)
 | 
						return dec.Decode(v)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -429,7 +429,7 @@ func writeStatusMessage(ctx *context.Context, status int, message string) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	er := lfs_module.ErrorResponse{Message: message}
 | 
						er := lfs_module.ErrorResponse{Message: message}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enc := jsoniter.NewEncoder(ctx.Resp)
 | 
						enc := json.NewEncoder(ctx.Resp)
 | 
				
			||||||
	if err := enc.Encode(er); err != nil {
 | 
						if err := enc.Encode(er); err != nil {
 | 
				
			||||||
		log.Error("Failed to encode error response as json. Error: %v", err)
 | 
							log.Error("Failed to encode error response as json. Error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,11 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/graceful"
 | 
						"code.gitea.io/gitea/modules/graceful"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/notification"
 | 
						"code.gitea.io/gitea/modules/notification"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	issue_service "code.gitea.io/gitea/services/issue"
 | 
						issue_service "code.gitea.io/gitea/services/issue"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewPullRequest creates new pull request with labels for repository.
 | 
					// NewPullRequest creates new pull request with labels for repository.
 | 
				
			||||||
@@ -86,7 +86,6 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
 | 
				
			|||||||
			data.CommitIDs = append(data.CommitIDs, e.Value.(*git.Commit).ID.String())
 | 
								data.CommitIDs = append(data.CommitIDs, e.Value.(*git.Commit).ID.String())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
		dataJSON, err := json.Marshal(data)
 | 
							dataJSON, err := json.Marshal(data)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,9 +10,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
	dingtalk "github.com/lunny/dingtalk_webhook"
 | 
						dingtalk "github.com/lunny/dingtalk_webhook"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,7 +27,6 @@ var (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the DingtalkPayload to json
 | 
					// JSONPayload Marshals the DingtalkPayload to json
 | 
				
			||||||
func (d *DingtalkPayload) JSONPayload() ([]byte, error) {
 | 
					func (d *DingtalkPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(d, "", "  ")
 | 
						data, err := json.MarshalIndent(d, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,10 +12,10 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type (
 | 
					type (
 | 
				
			||||||
@@ -68,7 +68,6 @@ type (
 | 
				
			|||||||
// GetDiscordHook returns discord metadata
 | 
					// GetDiscordHook returns discord metadata
 | 
				
			||||||
func GetDiscordHook(w *models.Webhook) *DiscordMeta {
 | 
					func GetDiscordHook(w *models.Webhook) *DiscordMeta {
 | 
				
			||||||
	s := &DiscordMeta{}
 | 
						s := &DiscordMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
						if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
				
			||||||
		log.Error("webhook.GetDiscordHook(%d): %v", w.ID, err)
 | 
							log.Error("webhook.GetDiscordHook(%d): %v", w.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -99,7 +98,6 @@ var (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the DiscordPayload to json
 | 
					// JSONPayload Marshals the DiscordPayload to json
 | 
				
			||||||
func (d *DiscordPayload) JSONPayload() ([]byte, error) {
 | 
					func (d *DiscordPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(d, "", "  ")
 | 
						data, err := json.MarshalIndent(d, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
@@ -250,7 +248,6 @@ func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string)
 | 
				
			|||||||
	s := new(DiscordPayload)
 | 
						s := new(DiscordPayload)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	discord := &DiscordMeta{}
 | 
						discord := &DiscordMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(meta), &discord); err != nil {
 | 
						if err := json.Unmarshal([]byte(meta), &discord); err != nil {
 | 
				
			||||||
		return s, errors.New("GetDiscordPayload meta json:" + err.Error())
 | 
							return s, errors.New("GetDiscordPayload meta json:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type (
 | 
					type (
 | 
				
			||||||
@@ -37,7 +37,6 @@ func newFeishuTextPayload(text string) *FeishuPayload {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the FeishuPayload to json
 | 
					// JSONPayload Marshals the FeishuPayload to json
 | 
				
			||||||
func (f *FeishuPayload) JSONPayload() ([]byte, error) {
 | 
					func (f *FeishuPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(f, "", "  ")
 | 
						data, err := json.MarshalIndent(f, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,10 +15,10 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const matrixPayloadSizeLimit = 1024 * 64
 | 
					const matrixPayloadSizeLimit = 1024 * 64
 | 
				
			||||||
@@ -39,7 +39,6 @@ var messageTypeText = map[int]string{
 | 
				
			|||||||
// GetMatrixHook returns Matrix metadata
 | 
					// GetMatrixHook returns Matrix metadata
 | 
				
			||||||
func GetMatrixHook(w *models.Webhook) *MatrixMeta {
 | 
					func GetMatrixHook(w *models.Webhook) *MatrixMeta {
 | 
				
			||||||
	s := &MatrixMeta{}
 | 
						s := &MatrixMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
						if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
				
			||||||
		log.Error("webhook.GetMatrixHook(%d): %v", w.ID, err)
 | 
							log.Error("webhook.GetMatrixHook(%d): %v", w.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -78,7 +77,6 @@ type MatrixPayloadSafe struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the MatrixPayloadUnsafe to json
 | 
					// JSONPayload Marshals the MatrixPayloadUnsafe to json
 | 
				
			||||||
func (m *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) {
 | 
					func (m *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(m, "", "  ")
 | 
						data, err := json.MarshalIndent(m, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
@@ -228,7 +226,6 @@ func GetMatrixPayload(p api.Payloader, event models.HookEventType, meta string)
 | 
				
			|||||||
	s := new(MatrixPayloadUnsafe)
 | 
						s := new(MatrixPayloadUnsafe)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	matrix := &MatrixMeta{}
 | 
						matrix := &MatrixMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(meta), &matrix); err != nil {
 | 
						if err := json.Unmarshal([]byte(meta), &matrix); err != nil {
 | 
				
			||||||
		return s, errors.New("GetMatrixPayload meta json:" + err.Error())
 | 
							return s, errors.New("GetMatrixPayload meta json:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -262,7 +259,6 @@ func getMessageBody(htmlText string) string {
 | 
				
			|||||||
// The access_token is removed from t.PayloadContent
 | 
					// The access_token is removed from t.PayloadContent
 | 
				
			||||||
func getMatrixHookRequest(w *models.Webhook, t *models.HookTask) (*http.Request, error) {
 | 
					func getMatrixHookRequest(w *models.Webhook, t *models.HookTask) (*http.Request, error) {
 | 
				
			||||||
	payloadunsafe := MatrixPayloadUnsafe{}
 | 
						payloadunsafe := MatrixPayloadUnsafe{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(t.PayloadContent), &payloadunsafe); err != nil {
 | 
						if err := json.Unmarshal([]byte(t.PayloadContent), &payloadunsafe); err != nil {
 | 
				
			||||||
		log.Error("Matrix Hook delivery failed: %v", err)
 | 
							log.Error("Matrix Hook delivery failed: %v", err)
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type (
 | 
					type (
 | 
				
			||||||
@@ -57,7 +57,6 @@ type (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the MSTeamsPayload to json
 | 
					// JSONPayload Marshals the MSTeamsPayload to json
 | 
				
			||||||
func (m *MSTeamsPayload) JSONPayload() ([]byte, error) {
 | 
					func (m *MSTeamsPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(m, "", "  ")
 | 
						data, err := json.MarshalIndent(m, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,10 +11,10 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SlackMeta contains the slack metadata
 | 
					// SlackMeta contains the slack metadata
 | 
				
			||||||
@@ -28,7 +28,6 @@ type SlackMeta struct {
 | 
				
			|||||||
// GetSlackHook returns slack metadata
 | 
					// GetSlackHook returns slack metadata
 | 
				
			||||||
func GetSlackHook(w *models.Webhook) *SlackMeta {
 | 
					func GetSlackHook(w *models.Webhook) *SlackMeta {
 | 
				
			||||||
	s := &SlackMeta{}
 | 
						s := &SlackMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
						if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
				
			||||||
		log.Error("webhook.GetSlackHook(%d): %v", w.ID, err)
 | 
							log.Error("webhook.GetSlackHook(%d): %v", w.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -58,7 +57,6 @@ type SlackAttachment struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// JSONPayload Marshals the SlackPayload to json
 | 
					// JSONPayload Marshals the SlackPayload to json
 | 
				
			||||||
func (s *SlackPayload) JSONPayload() ([]byte, error) {
 | 
					func (s *SlackPayload) JSONPayload() ([]byte, error) {
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(s, "", "  ")
 | 
						data, err := json.MarshalIndent(s, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
@@ -279,7 +277,6 @@ func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (
 | 
				
			|||||||
	s := new(SlackPayload)
 | 
						s := new(SlackPayload)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	slack := &SlackMeta{}
 | 
						slack := &SlackMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(meta), &slack); err != nil {
 | 
						if err := json.Unmarshal([]byte(meta), &slack); err != nil {
 | 
				
			||||||
		return s, errors.New("GetSlackPayload meta json:" + err.Error())
 | 
							return s, errors.New("GetSlackPayload meta json:" + err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,10 +10,10 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup"
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	jsoniter "github.com/json-iterator/go"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type (
 | 
					type (
 | 
				
			||||||
@@ -34,7 +34,6 @@ type (
 | 
				
			|||||||
// GetTelegramHook returns telegram metadata
 | 
					// GetTelegramHook returns telegram metadata
 | 
				
			||||||
func GetTelegramHook(w *models.Webhook) *TelegramMeta {
 | 
					func GetTelegramHook(w *models.Webhook) *TelegramMeta {
 | 
				
			||||||
	s := &TelegramMeta{}
 | 
						s := &TelegramMeta{}
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
						if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
 | 
				
			||||||
		log.Error("webhook.GetTelegramHook(%d): %v", w.ID, err)
 | 
							log.Error("webhook.GetTelegramHook(%d): %v", w.ID, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -50,7 +49,6 @@ func (t *TelegramPayload) JSONPayload() ([]byte, error) {
 | 
				
			|||||||
	t.ParseMode = "HTML"
 | 
						t.ParseMode = "HTML"
 | 
				
			||||||
	t.DisableWebPreview = true
 | 
						t.DisableWebPreview = true
 | 
				
			||||||
	t.Message = markup.Sanitize(t.Message)
 | 
						t.Message = markup.Sanitize(t.Message)
 | 
				
			||||||
	json := jsoniter.ConfigCompatibleWithStandardLibrary
 | 
					 | 
				
			||||||
	data, err := json.MarshalIndent(t, "", "  ")
 | 
						data, err := json.MarshalIndent(t, "", "  ")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return []byte{}, err
 | 
							return []byte{}, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,12 +5,12 @@
 | 
				
			|||||||
package webhook
 | 
					package webhook
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user