]> source.dussan.org Git - gitea.git/commitdiff
Migrate to use jsoniter instead of encoding/json (#14841)
authorzeripath <art27@cantab.net>
Mon, 1 Mar 2021 21:08:10 +0000 (21:08 +0000)
committerGitHub <noreply@github.com>
Mon, 1 Mar 2021 21:08:10 +0000 (22:08 +0100)
* Migrate to use jsoniter

* fix tests

* update gitea.com/go-chi/binding

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: 6543 <6543@obermui.de>
77 files changed:
build/generate-emoji.go
cmd/dump.go
cmd/serv.go
go.mod
go.sum
integrations/api_admin_test.go
integrations/api_helper_for_declarative_test.go
integrations/create_no_session_test.go
integrations/integration_test.go
integrations/oauth_test.go
integrations/repo_commits_test.go
integrations/testlogger.go
models/issue_comment.go
models/login_source.go
models/migrations/v130.go
models/repo_unit.go
models/task.go
models/user_heatmap_test.go
models/webhook.go
models/webhook_test.go
modules/context/context.go
modules/eventsource/event.go
modules/httplib/httplib.go
modules/indexer/code/elastic_search.go
modules/lfs/locks.go
modules/lfs/server.go
modules/log/conn.go
modules/log/conn_test.go
modules/log/console.go
modules/log/console_test.go
modules/log/file.go
modules/log/level.go
modules/log/level_test.go
modules/log/smtp.go
modules/notification/action/action.go
modules/private/hook.go
modules/private/internal.go
modules/private/mail.go
modules/private/manager.go
modules/private/serv.go
modules/queue/helper.go
modules/queue/manager.go
modules/queue/queue_bytefifo.go
modules/queue/queue_test.go
modules/queue/setting.go
modules/recaptcha/recaptcha.go
modules/session/virtual.go
modules/setting/log.go
modules/setting/session.go
modules/setting/setting.go
modules/setting/setting_test.go
modules/storage/helper.go
modules/structs/hook.go
modules/structs/user.go
modules/task/task.go
modules/templates/helper.go
routers/admin/admin.go
routers/api/v1/utils/hook.go
routers/events/events.go
routers/private/mail.go
routers/private/manager.go
routers/repo/editor.go
routers/repo/webhook.go
routers/user/home.go
services/gitdiff/gitdiff_test.go
services/pull/pull.go
services/webhook/dingtalk.go
services/webhook/discord.go
services/webhook/feishu.go
services/webhook/matrix.go
services/webhook/msteams.go
services/webhook/slack.go
services/webhook/telegram.go
vendor/gitea.com/go-chi/binding/binding.go
vendor/gitea.com/go-chi/binding/go.mod
vendor/gitea.com/go-chi/binding/go.sum
vendor/modules.txt

index c544fd0af98efbf62abff60688f74e70bfb3310d..53c5285b23ecac3a05d1e92d2440e109c149971f 100644 (file)
@@ -8,7 +8,6 @@
 package main
 
 import (
-       "encoding/json"
        "flag"
        "fmt"
        "go/format"
@@ -20,6 +19,8 @@ import (
        "strconv"
        "strings"
        "unicode/utf8"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 const (
@@ -50,6 +51,7 @@ func (e Emoji) MarshalJSON() ([]byte, error) {
        x.UnicodeVersion = ""
        x.Description = ""
        x.SkinTones = false
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(x)
 }
 
@@ -101,6 +103,7 @@ func generate() ([]byte, error) {
 
        // unmarshal
        var data Gemoji
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err = json.Unmarshal(body, &data)
        if err != nil {
                return nil, err
index 1acc69f1c856906e028bf20eda695afd3ae3c550..43997c8da8c57eef3dadec7289c218f1a8815cb8 100644 (file)
@@ -6,7 +6,6 @@
 package cmd
 
 import (
-       "encoding/json"
        "fmt"
        "io/ioutil"
        "os"
@@ -22,6 +21,7 @@ import (
        "code.gitea.io/gitea/modules/util"
 
        "gitea.com/go-chi/session"
+       jsoniter "github.com/json-iterator/go"
        archiver "github.com/mholt/archiver/v3"
        "github.com/urfave/cli"
 )
@@ -296,6 +296,7 @@ func runDump(ctx *cli.Context) error {
                var excludes []string
                if setting.Cfg.Section("session").Key("PROVIDER").Value() == "file" {
                        var opts session.Options
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
                        if err = json.Unmarshal([]byte(setting.SessionConfig.ProviderConfig), &opts); err != nil {
                                return err
                        }
index 1e66cb511100064bb412cde420f04eb6b2419988..a8db623e162e753556c24533383454e937a8f6b3 100644 (file)
@@ -6,7 +6,6 @@
 package cmd
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "net/url"
@@ -25,6 +24,7 @@ import (
        "code.gitea.io/gitea/modules/setting"
 
        "github.com/dgrijalva/jwt-go"
+       jsoniter "github.com/json-iterator/go"
        "github.com/kballard/go-shellquote"
        "github.com/urfave/cli"
 )
@@ -255,6 +255,7 @@ func runServ(c *cli.Context) error {
                }
                tokenAuthentication.Header["Authorization"] = fmt.Sprintf("Bearer %s", tokenString)
 
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                enc := json.NewEncoder(os.Stdout)
                err = enc.Encode(tokenAuthentication)
                if err != nil {
diff --git a/go.mod b/go.mod
index 6ee34ad594488ca4a15cf2584fd953c6b9eaf7cf..82e3b3b94c160f19c2080c11414d818f3f6a68df 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -6,7 +6,7 @@ require (
        cloud.google.com/go v0.78.0 // indirect
        code.gitea.io/gitea-vet v0.2.1
        code.gitea.io/sdk/gitea v0.13.2
-       gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c
+       gitea.com/go-chi/binding v0.0.0-20210301195521-1fe1c9a555e7
        gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e
        gitea.com/go-chi/captcha v0.0.0-20210110083842-e7696c336a1e
        gitea.com/go-chi/session v0.0.0-20210108030337-0cb48c5ba8ee
@@ -66,6 +66,7 @@ require (
        github.com/issue9/assert v1.3.2 // indirect
        github.com/issue9/identicon v1.0.1
        github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
+       github.com/json-iterator/go v1.1.10
        github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
        github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect
        github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4
diff --git a/go.sum b/go.sum
index 74c1be2489fb1d4592ed04fbb294d49ee75eccf7..7d956962ddd98cfb6f91d695c1be7aaac734ffc7 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -41,8 +41,8 @@ code.gitea.io/gitea-vet v0.2.1/go.mod h1:zcNbT/aJEmivCAhfmkHOlT645KNOf9W2KnkLgFj
 code.gitea.io/sdk/gitea v0.13.2 h1:wAnT/J7Z62q3fJXbgnecoaOBh8CM1Qq0/DakWxiv4yA=
 code.gitea.io/sdk/gitea v0.13.2/go.mod h1:lee2y8LeV3kQb2iK+hHlMqoadL4bp27QOkOV/hawLKg=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c h1:NTtrGYjR40WUdkCdn26Y5LGFT52rIkFPkjmtgCAyiTs=
-gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c/go.mod h1:9bGA9dIsrz+wVQKH1DzvxuAvrudHaQ8Wx8hLme/GVGQ=
+gitea.com/go-chi/binding v0.0.0-20210301195521-1fe1c9a555e7 h1:xCVJPY823C8RWpgMabTw2kOglDrg0iS3GcQU6wdwHkU=
+gitea.com/go-chi/binding v0.0.0-20210301195521-1fe1c9a555e7/go.mod h1:AyfTrwtfYN54R/HmVvMYPnSTenH5bVoyh8x6tBluxEA=
 gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e h1:zgPGaf3kXP0cVm9J0l8ZA2+XDzILYATg0CXbihR6N+o=
 gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e/go.mod h1:k2V/gPDEtXGjjMGuBJiapffAXTv76H4snSmlJRLUhH0=
 gitea.com/go-chi/captcha v0.0.0-20210110083842-e7696c336a1e h1:YjaQU6XFicdhPN+MlGolcXO8seYY2+EY5g7vZPB17CQ=
index fdcfc407892b80596e45bfdc6358a27173b439e8..b3a0de36d369eb710e3c82ce81ca422973fc998d 100644 (file)
@@ -5,7 +5,6 @@
 package integrations
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "testing"
@@ -13,6 +12,7 @@ import (
        "code.gitea.io/gitea/models"
        api "code.gitea.io/gitea/modules/structs"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -190,6 +190,7 @@ func TestAPIEditUser(t *testing.T) {
        resp := session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 
        errMap := make(map[string]interface{})
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        json.Unmarshal(resp.Body.Bytes(), &errMap)
        assert.EqualValues(t, "email is not allowed to be empty string", errMap["message"].(string))
 
index 551a9bb7517bc4c5e88796fe8f0ed19d9998d12f..f1d57e717cac35a30c610234f8dcf88f5b5cbda4 100644 (file)
@@ -6,7 +6,6 @@ package integrations
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
@@ -18,6 +17,7 @@ import (
        "code.gitea.io/gitea/modules/queue"
        api "code.gitea.io/gitea/modules/structs"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -212,6 +212,8 @@ func doAPICreatePullRequest(ctx APITestContext, owner, repo, baseBranch, headBra
                        expected = ctx.ExpectedCode
                }
                resp := ctx.Session.MakeRequest(t, req, expected)
+
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                decoder := json.NewDecoder(resp.Body)
                pr := api.PullRequest{}
                err := decoder.Decode(&pr)
index 89682e95cfcd3f95800aedd29147f58fd0710e63..c864b9c7ae125df65eab9eaab69c224398ab4ee0 100644 (file)
@@ -5,7 +5,6 @@
 package integrations
 
 import (
-       "encoding/json"
        "io/ioutil"
        "net/http"
        "net/http/httptest"
@@ -18,6 +17,7 @@ import (
        "code.gitea.io/gitea/routers/routes"
 
        "gitea.com/go-chi/session"
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -62,6 +62,8 @@ func TestSessionFileCreation(t *testing.T) {
        }()
 
        var config session.Options
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal([]byte(oldSessionConfig), &config)
        assert.NoError(t, err)
 
index ee005c087d33a963ffc6cc3152121ba3bd88d51c..10331a1560f70205803be6d6e7c42335efa78a79 100644 (file)
@@ -8,7 +8,6 @@ import (
        "bytes"
        "context"
        "database/sql"
-       "encoding/json"
        "fmt"
        "io"
        "net/http"
@@ -36,6 +35,7 @@ import (
        "code.gitea.io/gitea/routers/routes"
 
        "github.com/PuerkitoBio/goquery"
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -376,6 +376,8 @@ func NewRequestWithValues(t testing.TB, method, urlStr string, values map[string
 
 func NewRequestWithJSON(t testing.TB, method, urlStr string, v interface{}) *http.Request {
        t.Helper()
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, err := json.Marshal(v)
        assert.NoError(t, err)
        req := NewRequestWithBody(t, method, urlStr, bytes.NewBuffer(jsonBytes))
@@ -453,6 +455,8 @@ func logUnexpectedResponse(t testing.TB, recorder *httptest.ResponseRecorder) {
 
 func DecodeJSON(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) {
        t.Helper()
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        decoder := json.NewDecoder(resp.Body)
        assert.NoError(t, decoder.Decode(v))
 }
index e74ff28cadf142ebf2d0e9a9642e734b881811a9..2da182d0c80f124823e0629ab571e14cf01cc384 100644 (file)
@@ -6,12 +6,12 @@ package integrations
 
 import (
        "bytes"
-       "encoding/json"
        "io/ioutil"
        "testing"
 
        "code.gitea.io/gitea/modules/setting"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -70,6 +70,8 @@ func TestAccessTokenExchange(t *testing.T) {
                RefreshToken string `json:"refresh_token"`
        }
        parsed := new(response)
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
        assert.True(t, len(parsed.AccessToken) > 10)
        assert.True(t, len(parsed.RefreshToken) > 10)
@@ -93,6 +95,8 @@ func TestAccessTokenExchangeWithoutPKCE(t *testing.T) {
                RefreshToken string `json:"refresh_token"`
        }
        parsed := new(response)
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
        assert.True(t, len(parsed.AccessToken) > 10)
        assert.True(t, len(parsed.RefreshToken) > 10)
@@ -181,6 +185,8 @@ func TestAccessTokenExchangeWithBasicAuth(t *testing.T) {
                RefreshToken string `json:"refresh_token"`
        }
        parsed := new(response)
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
        assert.True(t, len(parsed.AccessToken) > 10)
        assert.True(t, len(parsed.RefreshToken) > 10)
@@ -223,6 +229,8 @@ func TestRefreshTokenInvalidation(t *testing.T) {
                RefreshToken string `json:"refresh_token"`
        }
        parsed := new(response)
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.NoError(t, json.Unmarshal(resp.Body.Bytes(), parsed))
 
        // test without invalidation
index f26960271a3beb4f15a961a0905e8042da5941cd..042849db7cf5b1c9155345f1682e161195ede3c5 100644 (file)
@@ -5,7 +5,6 @@
 package integrations
 
 import (
-       "encoding/json"
        "net/http"
        "net/http/httptest"
        "path"
@@ -14,6 +13,7 @@ import (
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -82,6 +82,7 @@ func doTestRepoCommitWithStatus(t *testing.T, state string, classes ...string) {
 }
 
 func testRepoCommitsWithStatus(t *testing.T, resp *httptest.ResponseRecorder, state string) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        decoder := json.NewDecoder(resp.Body)
        statuses := []*api.CommitStatus{}
        assert.NoError(t, decoder.Decode(&statuses))
index f84ed47e4fc3097418fda4a7ec7e29fe507fa98a..9ea357ba27bfc7b543a47fb5861c29aa3a0fcd6a 100644 (file)
@@ -6,7 +6,6 @@ package integrations
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "os"
        "runtime"
@@ -17,6 +16,7 @@ import (
 
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/queue"
+       jsoniter "github.com/json-iterator/go"
 )
 
 var (
@@ -158,6 +158,7 @@ func NewTestLogger() log.LoggerProvider {
 // Init inits connection writer with json config.
 // json config only need key "level".
 func (log *TestLogger) Init(config string) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal([]byte(config), log)
        if err != nil {
                return err
index 6cc03ba0e8afd5c1e89fd1340ecc8ab97ed26d87..724cf921eaa14e5186a5b526ec3378de1183b94c 100644 (file)
@@ -8,7 +8,6 @@ package models
 
 import (
        "container/list"
-       "encoding/json"
        "fmt"
        "regexp"
        "strconv"
@@ -21,6 +20,7 @@ import (
        "code.gitea.io/gitea/modules/references"
        "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/timeutil"
+       jsoniter "github.com/json-iterator/go"
 
        "xorm.io/builder"
        "xorm.io/xorm"
@@ -655,6 +655,7 @@ func (c *Comment) LoadPushCommits() (err error) {
 
        var data PushActionContent
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err = json.Unmarshal([]byte(c.Content), &data)
        if err != nil {
                return
@@ -1241,6 +1242,8 @@ func CreatePushPullComment(pusher *User, pr *PullRequest, oldCommitID, newCommit
        }
 
        ops.Issue = pr.Issue
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        dataJSON, err := json.Marshal(data)
        if err != nil {
                return nil, err
index d351f12861f7906229a7eb6905089269b97bd6de..37bbdc45971d272392dbf79ef438ebe7ca34002e 100644 (file)
@@ -7,7 +7,6 @@ package models
 
 import (
        "crypto/tls"
-       "encoding/json"
        "errors"
        "fmt"
        "net/smtp"
@@ -22,6 +21,7 @@ import (
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/timeutil"
        "code.gitea.io/gitea/modules/util"
+       jsoniter "github.com/json-iterator/go"
 
        "xorm.io/xorm"
        "xorm.io/xorm/convert"
@@ -75,11 +75,13 @@ type LDAPConfig struct {
 
 // FromDB fills up a LDAPConfig from serialized format.
 func (cfg *LDAPConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a LDAPConfig to a serialized format.
 func (cfg *LDAPConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -101,11 +103,13 @@ type SMTPConfig struct {
 
 // FromDB fills up an SMTPConfig from serialized format.
 func (cfg *SMTPConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, cfg)
 }
 
 // ToDB exports an SMTPConfig to a serialized format.
 func (cfg *SMTPConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -116,11 +120,13 @@ type PAMConfig struct {
 
 // FromDB fills up a PAMConfig from serialized format.
 func (cfg *PAMConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a PAMConfig to a serialized format.
 func (cfg *PAMConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -136,11 +142,13 @@ type OAuth2Config struct {
 
 // FromDB fills up an OAuth2Config from serialized format.
 func (cfg *OAuth2Config) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, cfg)
 }
 
 // ToDB exports an SMTPConfig to a serialized format.
 func (cfg *OAuth2Config) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -155,11 +163,13 @@ type SSPIConfig struct {
 
 // FromDB fills up an SSPIConfig from serialized format.
 func (cfg *SSPIConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, cfg)
 }
 
 // ToDB exports an SSPIConfig to a serialized format.
 func (cfg *SSPIConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
index f7be11c400eca9989861b0e9918492da6e2a349f..4f044e26ab80d844aae9e51a297ca0d2a4003d52 100644 (file)
@@ -5,9 +5,8 @@
 package migrations
 
 import (
-       "encoding/json"
-
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 
        "xorm.io/xorm"
 )
@@ -72,6 +71,7 @@ func expandWebhooks(x *xorm.Engine) error {
 
                for _, res := range results {
                        var events HookEvent
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
                        if err = json.Unmarshal([]byte(res.Events), &events); err != nil {
                                return err
                        }
index 8c2d458758a2d56ce4b4e55fbfce6fa1882a52fd..3ef390483369583aeef766b5ec95cc462524b432 100644 (file)
@@ -5,11 +5,11 @@
 package models
 
 import (
-       "encoding/json"
        "fmt"
 
        "code.gitea.io/gitea/modules/timeutil"
 
+       jsoniter "github.com/json-iterator/go"
        "xorm.io/xorm"
        "xorm.io/xorm/convert"
 )
@@ -29,11 +29,13 @@ type UnitConfig struct {
 
 // FromDB fills up a UnitConfig from serialized format.
 func (cfg *UnitConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a UnitConfig to a serialized format.
 func (cfg *UnitConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -44,11 +46,13 @@ type ExternalWikiConfig struct {
 
 // FromDB fills up a ExternalWikiConfig from serialized format.
 func (cfg *ExternalWikiConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a ExternalWikiConfig to a serialized format.
 func (cfg *ExternalWikiConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -61,11 +65,13 @@ type ExternalTrackerConfig struct {
 
 // FromDB fills up a ExternalTrackerConfig from serialized format.
 func (cfg *ExternalTrackerConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a ExternalTrackerConfig to a serialized format.
 func (cfg *ExternalTrackerConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -78,11 +84,13 @@ type IssuesConfig struct {
 
 // FromDB fills up a IssuesConfig from serialized format.
 func (cfg *IssuesConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a IssuesConfig to a serialized format.
 func (cfg *IssuesConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
@@ -97,11 +105,13 @@ type PullRequestsConfig struct {
 
 // FromDB fills up a PullRequestsConfig from serialized format.
 func (cfg *PullRequestsConfig) FromDB(bs []byte) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Unmarshal(bs, &cfg)
 }
 
 // ToDB exports a PullRequestsConfig to a serialized format.
 func (cfg *PullRequestsConfig) ToDB() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(cfg)
 }
 
index b729bb8632a64bde9ca2ae1baa25222c3724de46..35b77a878f031e3533c478a4fc9fbb75027a4e37 100644 (file)
@@ -5,12 +5,12 @@
 package models
 
 import (
-       "encoding/json"
        "fmt"
 
        migration "code.gitea.io/gitea/modules/migrations/base"
        "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/timeutil"
+       jsoniter "github.com/json-iterator/go"
 
        "xorm.io/builder"
 )
@@ -105,6 +105,7 @@ func (task *Task) UpdateCols(cols ...string) error {
 func (task *Task) MigrateConfig() (*migration.MigrateOptions, error) {
        if task.Type == structs.TaskTypeMigrateRepo {
                var opts migration.MigrateOptions
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                err := json.Unmarshal([]byte(task.PayloadContent), &opts)
                if err != nil {
                        return nil, err
@@ -162,6 +163,7 @@ func GetMigratingTaskByID(id, doerID int64) (*Task, *migration.MigrateOptions, e
        }
 
        var opts migration.MigrateOptions
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(task.PayloadContent), &opts); err != nil {
                return nil, nil, err
        }
index d98c4c63e4423bd801ffcb5e2bb310b6af25a5db..6ec8a1a47933bfd0d36eb1de8621ea1675b06961 100644 (file)
@@ -5,10 +5,10 @@
 package models
 
 import (
-       "encoding/json"
        "fmt"
        "testing"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -56,6 +56,7 @@ func TestGetUserHeatmapDataByUser(t *testing.T) {
                assert.Equal(t, tc.CountResult, len(heatmap), fmt.Sprintf("testcase %d", i))
 
                //Test JSON rendering
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                jsonData, err := json.Marshal(heatmap)
                assert.NoError(t, err)
                assert.Equal(t, tc.JSONResult, string(jsonData))
index c7fcfba49e7824b3e91131fbaed28147ab87b697..9ad01f1b9dec76f4a3384cbd9d7f68d710d6c849 100644 (file)
@@ -7,7 +7,6 @@ package models
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "strings"
        "time"
@@ -18,6 +17,7 @@ import (
        "code.gitea.io/gitea/modules/timeutil"
 
        gouuid "github.com/google/uuid"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // HookContentType is the content type of a web hook
@@ -145,6 +145,8 @@ type Webhook struct {
 // AfterLoad updates the webhook object upon setting a column
 func (w *Webhook) AfterLoad() {
        w.HookEvent = &HookEvent{}
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
                log.Error("Unmarshal[%d]: %v", w.ID, err)
        }
@@ -157,6 +159,7 @@ func (w *Webhook) History(page int) ([]*HookTask, error) {
 
 // UpdateEvent handles conversion from HookEvent to Events.
 func (w *Webhook) UpdateEvent() error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.Marshal(w.HookEvent)
        w.Events = string(data)
        return err
@@ -689,6 +692,7 @@ func (t *HookTask) AfterLoad() {
        }
 
        t.RequestInfo = &HookRequest{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
                log.Error("Unmarshal RequestContent[%d]: %v", t.ID, err)
        }
@@ -702,6 +706,7 @@ func (t *HookTask) AfterLoad() {
 }
 
 func (t *HookTask) simpleMarshalJSON(v interface{}) string {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        p, err := json.Marshal(v)
        if err != nil {
                log.Error("Marshal [%d]: %v", t.ID, err)
index 1baf6ef44bfa5f477d8a7fb568fc23dd7fe70732..31cc29d0a4aeb23e54847d4a0acd9de49dbc586c 100644 (file)
@@ -6,12 +6,12 @@ package models
 
 import (
        "context"
-       "encoding/json"
        "testing"
        "time"
 
        api "code.gitea.io/gitea/modules/structs"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -58,6 +58,7 @@ func TestWebhook_UpdateEvent(t *testing.T) {
        assert.NoError(t, webhook.UpdateEvent())
        assert.NotEmpty(t, webhook.Events)
        actualHookEvent := &HookEvent{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.NoError(t, json.Unmarshal([]byte(webhook.Events), actualHookEvent))
        assert.Equal(t, *hookEvent, *actualHookEvent)
 }
index 899f61d686d2473af2825e5d29b570f07acaad65..c06784c1165824cb29f54fef5682685fe16e3f5e 100644 (file)
@@ -9,7 +9,6 @@ import (
        "context"
        "crypto/sha256"
        "encoding/hex"
-       "encoding/json"
        "fmt"
        "html"
        "html/template"
@@ -34,6 +33,7 @@ import (
        "gitea.com/go-chi/cache"
        "gitea.com/go-chi/session"
        "github.com/go-chi/chi"
+       jsoniter "github.com/json-iterator/go"
        "github.com/unknwon/com"
        "github.com/unknwon/i18n"
        "github.com/unrolled/render"
@@ -370,6 +370,7 @@ func (ctx *Context) Error(status int, contents ...string) {
 func (ctx *Context) JSON(status int, content interface{}) {
        ctx.Resp.Header().Set("Content-Type", "application/json;charset=utf-8")
        ctx.Resp.WriteHeader(status)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.NewEncoder(ctx.Resp).Encode(content); err != nil {
                ctx.ServerError("Render JSON failed", err)
        }
index fd418c6f079866fe58e4333ac5ac0fa56bc46f4c..a3407a94d2124b6fac65486b3f636d9bde120cb8 100644 (file)
@@ -6,11 +6,12 @@ package eventsource
 
 import (
        "bytes"
-       "encoding/json"
        "fmt"
        "io"
        "strings"
        "time"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 func wrapNewlines(w io.Writer, prefix []byte, value []byte) (sum int64, err error) {
@@ -79,6 +80,7 @@ func (e *Event) WriteTo(w io.Writer) (int64, error) {
                        data = []byte(v)
                default:
                        var err error
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
                        data, err = json.Marshal(e.Data)
                        if err != nil {
                                return sum, err
index 90bbe8f12af2bbd43f21541049f1dc7b99673e3a..62f284d2e192fccf30d3a927111e55c88e0898c7 100644 (file)
@@ -8,7 +8,6 @@ package httplib
 import (
        "bytes"
        "crypto/tls"
-       "encoding/json"
        "encoding/xml"
        "io"
        "io/ioutil"
@@ -23,6 +22,8 @@ import (
        "strings"
        "sync"
        "time"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 var defaultSetting = Settings{false, "GiteaServer", 60 * time.Second, 60 * time.Second, nil, nil, nil, false}
@@ -434,6 +435,7 @@ func (r *Request) ToJSON(v interface{}) error {
        if err != nil {
                return err
        }
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err = json.Unmarshal(data, v)
        return err
 }
index c9d604b694b898522e8548f557c8b0c26acac773..130cd1430ab055e1a3d5c2332cf82edcd1f1e6a3 100644 (file)
@@ -6,7 +6,6 @@ package code
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "strconv"
        "strings"
@@ -22,6 +21,7 @@ import (
        "code.gitea.io/gitea/modules/timeutil"
 
        "github.com/go-enry/go-enry/v2"
+       jsoniter "github.com/json-iterator/go"
        "github.com/olivere/elastic/v7"
 )
 
@@ -300,6 +300,7 @@ func convertResult(searchResult *elastic.SearchResult, kw string, pageSize int)
 
                repoID, fileName := parseIndexerID(hit.Id)
                var res = make(map[string]interface{})
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                if err := json.Unmarshal(hit.Source, &res); err != nil {
                        return 0, nil, nil, err
                }
index cf62492c7e1e9bc115817dae093104b67ae5ce15..f2688c32607f8c361162decdd94b614cb10eb614 100644 (file)
@@ -5,7 +5,6 @@
 package lfs
 
 import (
-       "encoding/json"
        "strconv"
        "strings"
 
@@ -15,6 +14,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 //checkIsValidRequest check if it a valid request in case of bad request it write the response to ctx.
@@ -184,6 +184,7 @@ func PostLockHandler(ctx *context.Context) {
        var req api.LFSLockRequest
        bodyReader := ctx.Req.Body
        defer bodyReader.Close()
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        dec := json.NewDecoder(bodyReader)
        if err := dec.Decode(&req); err != nil {
                log.Warn("Failed to decode lock request as json. Error: %v", err)
@@ -319,6 +320,7 @@ func UnLockHandler(ctx *context.Context) {
        var req api.LFSLockDeleteRequest
        bodyReader := ctx.Req.Body
        defer bodyReader.Close()
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        dec := json.NewDecoder(bodyReader)
        if err := dec.Decode(&req); err != nil {
                log.Warn("Failed to decode lock request as json. Error: %v", err)
index be21a4de82917e767ac8efce656dae7dad652aec..45cba9d9b75122363048c2566cff1241ad62bd87 100644 (file)
@@ -6,7 +6,6 @@ package lfs
 
 import (
        "encoding/base64"
-       "encoding/json"
        "fmt"
        "io"
        "net/http"
@@ -23,6 +22,7 @@ import (
        "code.gitea.io/gitea/modules/storage"
 
        "github.com/dgrijalva/jwt-go"
+       jsoniter "github.com/json-iterator/go"
 )
 
 const (
@@ -233,6 +233,7 @@ func getMetaHandler(ctx *context.Context) {
        ctx.Resp.Header().Set("Content-Type", metaMediaType)
 
        if ctx.Req.Method == "GET" {
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                enc := json.NewEncoder(ctx.Resp)
                if err := enc.Encode(Represent(rv, meta, true, false)); err != nil {
                        log.Error("Failed to encode representation as json. Error: %v", err)
@@ -304,6 +305,7 @@ func PostHandler(ctx *context.Context) {
        }
        ctx.Resp.WriteHeader(sentStatus)
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        enc := json.NewEncoder(ctx.Resp)
        if err := enc.Encode(Represent(rv, meta, meta.Existing, true)); err != nil {
                log.Error("Failed to encode representation as json. Error: %v", err)
@@ -394,6 +396,7 @@ func BatchHandler(ctx *context.Context) {
 
        respobj := &BatchResponse{Objects: responseObjects}
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        enc := json.NewEncoder(ctx.Resp)
        if err := enc.Encode(respobj); err != nil {
                log.Error("Failed to encode representation as json. Error: %v", err)
@@ -531,6 +534,7 @@ func unpack(ctx *context.Context) *RequestVars {
                var p RequestVars
                bodyReader := r.Body
                defer bodyReader.Close()
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                dec := json.NewDecoder(bodyReader)
                err := dec.Decode(&p)
                if err != nil {
@@ -554,6 +558,7 @@ func unpackbatch(ctx *context.Context) *BatchVars {
 
        bodyReader := r.Body
        defer bodyReader.Close()
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        dec := json.NewDecoder(bodyReader)
        err := dec.Decode(&bv)
        if err != nil {
index 1abe44c1d45c32a995770cb1b89dcf92fb100de4..ad3d7f74e0cde3adc881fec577aa7d65ebf159bd 100644 (file)
@@ -6,9 +6,11 @@
 package log
 
 import (
-       "encoding/json"
+       "fmt"
        "io"
        "net"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 type connWriter struct {
@@ -104,9 +106,10 @@ func NewConn() LoggerProvider {
 // Init inits connection writer with json config.
 // json config only need key "level".
 func (log *ConnLogger) Init(jsonconfig string) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal([]byte(jsonconfig), log)
        if err != nil {
-               return err
+               return fmt.Errorf("Unable to parse JSON: %v", err)
        }
        log.NewWriterLogger(&connWriter{
                ReconnectOnMsg: log.ReconnectOnMsg,
index 0f35f02a2d5693f5c5058071fe82271654f0ef3d..dc5de732f4117b990f732df51b8251bf97907831 100644 (file)
@@ -98,7 +98,8 @@ func TestConnLoggerBadConfig(t *testing.T) {
        logger := NewConn()
 
        err := logger.Init("{")
-       assert.Equal(t, "unexpected end of JSON input", err.Error())
+       assert.Error(t, err)
+       assert.Contains(t, err.Error(), "Unable to parse JSON")
        logger.Close()
 }
 
index a805021f0b0b4ea956d03ba1309d7ddff58f71b7..339b9ef3a48564a6e62cc1bc7364546d51266703 100644 (file)
@@ -6,9 +6,11 @@
 package log
 
 import (
-       "encoding/json"
+       "fmt"
        "io"
        "os"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 // CanColorStdout reports if we can color the Stdout
@@ -50,9 +52,10 @@ func NewConsoleLogger() LoggerProvider {
 // Init inits connection writer with json config.
 // json config only need key "level".
 func (log *ConsoleLogger) Init(config string) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal([]byte(config), log)
        if err != nil {
-               return err
+               return fmt.Errorf("Unable to parse JSON: %v", err)
        }
        if log.Stderr {
                log.NewWriterLogger(&nopWriteCloser{
index a028b5b875ef2c272bf80bc4759358deecf93e53..e7ed07123b06b642cf2e833159132346273d7714 100644 (file)
@@ -17,7 +17,8 @@ func TestConsoleLoggerBadConfig(t *testing.T) {
        logger := NewConsoleLogger()
 
        err := logger.Init("{")
-       assert.Equal(t, "unexpected end of JSON input", err.Error())
+       assert.Error(t, err)
+       assert.Contains(t, err.Error(), "Unable to parse JSON")
        logger.Close()
 }
 
index c9b5d47c0bdd30761dd43d8a7e7f43e49acf8407..d5b38d4e0172d52e081bffe244327b464dc4df9a 100644 (file)
@@ -7,7 +7,6 @@ package log
 import (
        "bufio"
        "compress/gzip"
-       "encoding/json"
        "errors"
        "fmt"
        "os"
@@ -17,6 +16,7 @@ import (
        "time"
 
        "code.gitea.io/gitea/modules/util"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // FileLogger implements LoggerProvider.
@@ -101,8 +101,9 @@ func NewFileLogger() LoggerProvider {
 //     "rotate":true
 //     }
 func (log *FileLogger) Init(config string) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(config), log); err != nil {
-               return err
+               return fmt.Errorf("Unable to parse JSON: %v", err)
        }
        if len(log.Filename) == 0 {
                return errors.New("config must have filename")
index ab231bd1bd0908b7a74ba19ee06ef0b720114271..4b2d4ced4148ee604a0a218fa6cd42dbd1ff9265 100644 (file)
@@ -6,10 +6,11 @@ package log
 
 import (
        "bytes"
-       "encoding/json"
        "fmt"
        "os"
        "strings"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Level is the level of the logger
@@ -103,6 +104,7 @@ func FromString(level string) Level {
 // UnmarshalJSON takes text and turns it into a Level
 func (l *Level) UnmarshalJSON(b []byte) error {
        var tmp interface{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal(b, &tmp)
        if err != nil {
                fmt.Fprintf(os.Stderr, "Err: %v", err)
index 40f6310bfda5ada37ccc8a12e92f92c9332b2372..2f37e407a110efc981297aca8b0bdec7e58e29e4 100644 (file)
@@ -5,10 +5,10 @@
 package log
 
 import (
-       "encoding/json"
        "fmt"
        "testing"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -17,6 +17,7 @@ type testLevel struct {
 }
 
 func TestLevelMarshalUnmarshalJSON(t *testing.T) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        levelBytes, err := json.Marshal(testLevel{
                Level: INFO,
        })
index edf4943619fbdd4111a70ebb6935fb9e130f260c..3f27b2c658a323a73fe920edcf37b47420229b2c 100644 (file)
@@ -6,9 +6,11 @@
 package log
 
 import (
-       "encoding/json"
+       "fmt"
        "net/smtp"
        "strings"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 type smtpWriter struct {
@@ -55,9 +57,10 @@ func NewSMTPLogger() LoggerProvider {
 //             "level":LevelError
 //     }
 func (log *SMTPLogger) Init(jsonconfig string) error {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.Unmarshal([]byte(jsonconfig), log)
        if err != nil {
-               return err
+               return fmt.Errorf("Unable to parse JSON: %v", err)
        }
        log.NewWriterLogger(&smtpWriter{
                owner: log,
index 836cb51b3ebde559f17d0d64414824fbb27a3c89..3530e48b1cebdd7e2356bb71407dd52a47f0037a 100644 (file)
@@ -5,7 +5,6 @@
 package action
 
 import (
-       "encoding/json"
        "fmt"
        "path"
        "strings"
@@ -14,6 +13,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/notification/base"
        "code.gitea.io/gitea/modules/repository"
+       jsoniter "github.com/json-iterator/go"
 )
 
 type actionNotifier struct {
@@ -296,6 +296,7 @@ func (*actionNotifier) NotifyPullRevieweDismiss(doer *models.User, review *model
 }
 
 func (a *actionNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.Marshal(commits)
        if err != nil {
                log.Error("Marshal: %v", err)
@@ -365,6 +366,7 @@ 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) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.Marshal(commits)
        if err != nil {
                log.Error("json.Marshal: %v", err)
index 84d66943ba25549d21af1b721d996aba73df5a04..178500f7362dd3fdba194a0908f628a65db4354a 100644 (file)
@@ -5,7 +5,6 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "net/url"
@@ -13,6 +12,7 @@ import (
        "time"
 
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Git environment variables
@@ -80,6 +80,7 @@ func HookPreReceive(ownerName, repoName string, opts HookOptions) (int, string)
        )
        req := newInternalRequest(reqURL, "POST")
        req = req.Header("Content-Type", "application/json")
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, _ := json.Marshal(opts)
        req.Body(jsonBytes)
        req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
@@ -106,6 +107,7 @@ func HookPostReceive(ownerName, repoName string, opts HookOptions) (*HookPostRec
        req := newInternalRequest(reqURL, "POST")
        req = req.Header("Content-Type", "application/json")
        req.SetTimeout(60*time.Second, time.Duration(60+len(opts.OldCommitIDs))*time.Second)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, _ := json.Marshal(opts)
        req.Body(jsonBytes)
        resp, err := req.Response()
index b4fee2680fbac6bbb8e2feb954dbcaf634ceca0e..360fae47b6e8c640270f96793563a928eb1ffc20 100644 (file)
@@ -6,13 +6,13 @@ package private
 
 import (
        "crypto/tls"
-       "encoding/json"
        "fmt"
        "net"
        "net/http"
 
        "code.gitea.io/gitea/modules/httplib"
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 func newRequest(url, method string) *httplib.Request {
@@ -27,6 +27,7 @@ type Response struct {
 
 func decodeJSONError(resp *http.Response) *Response {
        var res Response
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err := json.NewDecoder(resp.Body).Decode(&res)
        if err != nil {
                res.Err = err.Error()
index 675dec8f11b2b488e9fc05d1971930fdcdf780bb..9c0912a6e349036705c05c876d460c24d30d5f52 100644 (file)
@@ -5,12 +5,12 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
 
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Email structure holds a data for sending general emails
@@ -32,6 +32,7 @@ func SendEmail(subject, message string, to []string) (int, string) {
 
        req := newInternalRequest(reqURL, "POST")
        req = req.Header("Content-Type", "application/json")
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, _ := json.Marshal(Email{
                Subject: subject,
                Message: message,
index 6c9ec920bb83c0293c64e31fd189bddd33a4c713..2bc6cec3b968af0ee688379dcc8ef3610343b356 100644 (file)
@@ -5,13 +5,13 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "net/url"
        "time"
 
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Shutdown calls the internal shutdown function
@@ -65,6 +65,7 @@ func FlushQueues(timeout time.Duration, nonBlocking bool) (int, string) {
                req.SetTimeout(timeout+10*time.Second, timeout+10*time.Second)
        }
        req = req.Header("Content-Type", "application/json")
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, _ := json.Marshal(FlushOptions{
                Timeout:     timeout,
                NonBlocking: nonBlocking,
@@ -151,6 +152,7 @@ func AddLogger(group, name, mode string, config map[string]interface{}) (int, st
 
        req := newInternalRequest(reqURL, "POST")
        req = req.Header("Content-Type", "application/json")
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        jsonBytes, _ := json.Marshal(LoggerOptions{
                Group:  group,
                Name:   name,
index 235d99a2b9c2f2e6d6846f4c899029f2ef4c6795..e077b00ccc1c69a2167675ad19a32aa7ebb81f74 100644 (file)
@@ -5,13 +5,13 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "net/url"
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // KeyAndOwner is the response from ServNoCommand
@@ -34,6 +34,7 @@ func ServNoCommand(keyID int64) (*models.PublicKey, *models.User, error) {
        }
 
        var keyAndOwner KeyAndOwner
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.NewDecoder(resp.Body).Decode(&keyAndOwner); err != nil {
                return nil, nil, err
        }
@@ -90,6 +91,7 @@ func ServCommand(keyID int64, ownerName, repoName string, mode models.AccessMode
                return nil, err
        }
        defer resp.Body.Close()
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if resp.StatusCode != http.StatusOK {
                var errServCommand ErrServCommand
                if err := json.NewDecoder(resp.Body).Decode(&errServCommand); err != nil {
index 751e0cfadc0f96dfdba8a0dd0b8ffa2543bfdfab..161c2fe8e70ead76df52214c4ab6e0f1f1b6c31a 100644 (file)
@@ -5,8 +5,9 @@
 package queue
 
 import (
-       "encoding/json"
        "reflect"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Mappable represents an interface that can MapTo another interface
@@ -19,6 +20,7 @@ type Mappable interface {
 // 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
 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.
        if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
@@ -66,6 +68,7 @@ func toConfig(exemplar, cfg interface{}) (interface{}, error) {
 
 // unmarshalAs will attempt to unmarshal provided bytes as the provided exemplar
 func unmarshalAs(bs []byte, exemplar interface{}) (data Data, err error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if exemplar != nil {
                t := reflect.TypeOf(exemplar)
                n := reflect.New(t)
index 3e9f8fc8dbfe45c84a33dc291f46fef45c005705..d44007a0f007e067ab81697711e76ff85c2813c4 100644 (file)
@@ -6,7 +6,6 @@ package queue
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "reflect"
        "sort"
@@ -14,6 +13,7 @@ import (
        "time"
 
        "code.gitea.io/gitea/modules/log"
+       jsoniter "github.com/json-iterator/go"
 )
 
 var manager *Manager
@@ -110,6 +110,7 @@ func (m *Manager) Add(managed interface{},
        configuration,
        exemplar interface{}) int64 {
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        cfg, _ := json.Marshal(configuration)
        mq := &ManagedQueue{
                Type:          t,
index 4bb7bbf2b110adb2e469466ada5060b43e7b747d..fe5178ff2d286d243f137cd32b5925839f14ff5a 100644 (file)
@@ -6,12 +6,12 @@ package queue
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "sync"
        "time"
 
        "code.gitea.io/gitea/modules/log"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // ByteFIFOQueueConfiguration is the configuration for a ByteFIFOQueue
@@ -71,6 +71,7 @@ func (q *ByteFIFOQueue) PushFunc(data Data, fn func() error) error {
        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)
        }
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        bs, err := json.Marshal(data)
        if err != nil {
                return err
@@ -229,6 +230,7 @@ func (q *ByteFIFOUniqueQueue) Has(data Data) (bool, error) {
        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)
        }
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        bs, err := json.Marshal(data)
        if err != nil {
                return false, err
index 3608f68d3d424fba7e2468577ef745b1ba6a45c5..89ce23ac4c5c7fc7c12a66c22e45fdbf4a672923 100644 (file)
@@ -5,9 +5,9 @@
 package queue
 
 import (
-       "encoding/json"
        "testing"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -30,6 +30,7 @@ func TestToConfig(t *testing.T) {
        assert.NotEqual(t, cfg2, exemplar)
        assert.Equal(t, &cfg, &cfg2)
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        cfgString, err := json.Marshal(cfg)
        assert.NoError(t, err)
 
index 9ee1af8c7d8d7d707f0c2aed2c0988e72d40c859..9b2c31b78334d8d995af5d3480d09445ac132c88 100644 (file)
@@ -5,12 +5,12 @@
 package queue
 
 import (
-       "encoding/json"
        "fmt"
        "strings"
 
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
 )
 
 func validType(t string) (Type, error) {
@@ -28,6 +28,7 @@ func validType(t string) (Type, error) {
 func getQueueSettings(name string) (setting.QueueSettings, []byte) {
        q := setting.GetQueueSettings(name)
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        cfg, err := json.Marshal(q)
        if err != nil {
                log.Error("Unable to marshall generic options: %v Error: %v", q, err)
index 54ea1dc0b3a3cc48e3764e485a9426b7682f3862..f5f4c7ef9c1ccb8fd5c4e6936fcb87e2dc9bcf51 100644 (file)
@@ -6,7 +6,6 @@ package recaptcha
 
 import (
        "context"
-       "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
@@ -15,6 +14,7 @@ import (
 
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/util"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Response is the structure of JSON returned from API
@@ -51,6 +51,7 @@ func Verify(ctx context.Context, response string) (bool, error) {
                return false, fmt.Errorf("Failed to read CAPTCHA response: %s", err)
        }
        var jsonResponse Response
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        err = json.Unmarshal(body, &jsonResponse)
        if err != nil {
                return false, fmt.Errorf("Failed to parse CAPTCHA response: %s", err)
index 8402d49a77568fab06a6265e6fc53cea95fcc380..8f5c4a7e8942bbf89e9a8a36afd46f8c0a626e5e 100644 (file)
@@ -5,7 +5,6 @@
 package session
 
 import (
-       "encoding/json"
        "fmt"
        "sync"
 
@@ -14,6 +13,7 @@ import (
        memcache "gitea.com/go-chi/session/memcache"
        mysql "gitea.com/go-chi/session/mysql"
        postgres "gitea.com/go-chi/session/postgres"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // VirtualSessionProvider represents a shadowed session provider implementation.
@@ -25,6 +25,7 @@ type VirtualSessionProvider struct {
 // Init initializes the cookie session provider with given root path.
 func (o *VirtualSessionProvider) Init(gclifetime int64, config string) error {
        var opts session.Options
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(config), &opts); err != nil {
                return err
        }
index 9fe2d5bda380e5026bea1e0dfb3dcbb979b2077c..9bbeee27a22e9d2b8b5d58902b26a6f85cda6c6d 100644 (file)
@@ -5,7 +5,6 @@
 package setting
 
 import (
-       "encoding/json"
        "fmt"
        golog "log"
        "os"
@@ -15,6 +14,7 @@ import (
        "sync"
 
        "code.gitea.io/gitea/modules/log"
+       jsoniter "github.com/json-iterator/go"
 
        ini "gopkg.in/ini.v1"
 )
@@ -205,6 +205,7 @@ func generateLogConfig(sec *ini.Section, name string, defaults defaultLogOptions
 
        logConfig["colorize"] = sec.Key("COLORIZE").MustBool(false)
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        byteConfig, err := json.Marshal(logConfig)
        if err != nil {
                log.Error("Failed to marshal log configuration: %v %v", logConfig, err)
index 31f876132db0a47776e90edb3ae3a2edeaf9e2df..eb5e1a1875fa4fd65a4d239e9c4fd345ad34541b 100644 (file)
@@ -5,12 +5,12 @@
 package setting
 
 import (
-       "encoding/json"
        "path"
        "path/filepath"
        "strings"
 
        "code.gitea.io/gitea/modules/log"
+       jsoniter "github.com/json-iterator/go"
 )
 
 var (
@@ -53,6 +53,7 @@ func newSessionService() {
        SessionConfig.Maxlifetime = sec.Key("SESSION_LIFE_TIME").MustInt64(86400)
        SessionConfig.Domain = sec.Key("DOMAIN").String()
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        shadowConfig, err := json.Marshal(SessionConfig)
        if err != nil {
                log.Fatal("Can't shadow session config: %v", err)
index cca7f46f1408e275934030a5fd8f4eb9269204bd..4976c0007c648c97bcb6931759fe3c0e988fde2d 100644 (file)
@@ -7,7 +7,6 @@ package setting
 
 import (
        "encoding/base64"
-       "encoding/json"
        "fmt"
        "io"
        "io/ioutil"
@@ -28,6 +27,7 @@ import (
        "code.gitea.io/gitea/modules/user"
        "code.gitea.io/gitea/modules/util"
 
+       jsoniter "github.com/json-iterator/go"
        shellquote "github.com/kballard/go-shellquote"
        "github.com/unknwon/com"
        gossh "golang.org/x/crypto/ssh"
@@ -1111,6 +1111,7 @@ func MakeManifestData(appName string, appURL string, absoluteAssetURL string) []
                Icons     []manifestIcon `json:"icons"`
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        bytes, err := json.Marshal(&manifestJSON{
                Name:      appName,
                ShortName: appName,
index 7dd3d3bba989b2db3d687f29260c3a647c6c6857..9bc77ab0bb470610a0c95e755b60d5004505b0a1 100644 (file)
@@ -5,9 +5,9 @@
 package setting
 
 import (
-       "encoding/json"
        "testing"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/stretchr/testify/assert"
 )
 
@@ -28,5 +28,6 @@ func TestMakeAbsoluteAssetURL(t *testing.T) {
 
 func TestMakeManifestData(t *testing.T) {
        jsonBytes := MakeManifestData(`Example App '\"`, "https://example.com", "https://example.com/foo/bar")
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        assert.True(t, json.Valid(jsonBytes))
 }
index 93f22734e57fd2dcfedc8169e48ba4c912ea65ce..46ab82aed61423853a2f95a57000ecbb688da691 100644 (file)
@@ -5,8 +5,9 @@
 package storage
 
 import (
-       "encoding/json"
        "reflect"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Mappable represents an interface that can MapTo another interface
@@ -19,6 +20,7 @@ type Mappable interface {
 // 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
 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.
        if reflect.TypeOf(cfg).AssignableTo(reflect.TypeOf(exemplar)) {
index 45ae94f98521ac1f75ce963ddbc13d912bb01943..693820b57d3e9503b32bef604ba80a9dd60701c8 100644 (file)
@@ -6,10 +6,11 @@
 package structs
 
 import (
-       "encoding/json"
        "errors"
        "strings"
        "time"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 var (
@@ -138,12 +139,14 @@ func (p *CreatePayload) SetSecret(secret string) {
 
 // JSONPayload return payload information
 func (p *CreatePayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
 // ParseCreateHook parses create event hook content.
 func ParseCreateHook(raw []byte) (*CreatePayload, error) {
        hook := new(CreatePayload)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal(raw, hook); err != nil {
                return nil, err
        }
@@ -193,6 +196,7 @@ func (p *DeletePayload) SetSecret(secret string) {
 
 // JSONPayload implements Payload
 func (p *DeletePayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -218,6 +222,7 @@ func (p *ForkPayload) SetSecret(secret string) {
 
 // JSONPayload implements Payload
 func (p *ForkPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -250,6 +255,7 @@ func (p *IssueCommentPayload) SetSecret(secret string) {
 
 // JSONPayload implements Payload
 func (p *IssueCommentPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -286,6 +292,7 @@ func (p *ReleasePayload) SetSecret(secret string) {
 
 // JSONPayload implements Payload
 func (p *ReleasePayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -317,12 +324,14 @@ func (p *PushPayload) SetSecret(secret string) {
 
 // JSONPayload FIXME
 func (p *PushPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
 // ParsePushHook parses push event hook content.
 func ParsePushHook(raw []byte) (*PushPayload, error) {
        hook := new(PushPayload)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal(raw, hook); err != nil {
                return nil, err
        }
@@ -396,6 +405,7 @@ func (p *IssuePayload) SetSecret(secret string) {
 
 // JSONPayload encodes the IssuePayload to JSON, with an indentation of two spaces.
 func (p *IssuePayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -437,6 +447,7 @@ func (p *PullRequestPayload) SetSecret(secret string) {
 
 // JSONPayload FIXME
 func (p *PullRequestPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", "  ")
 }
 
@@ -479,5 +490,6 @@ func (p *RepositoryPayload) SetSecret(secret string) {
 
 // JSONPayload JSON representation of the payload
 func (p *RepositoryPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.MarshalIndent(p, "", " ")
 }
index 511e4c56ce24d049eaf420536dc7c347fc160427..9e021e40fe880b610365bc4afb05bd6de09154a0 100644 (file)
@@ -5,8 +5,9 @@
 package structs
 
 import (
-       "encoding/json"
        "time"
+
+       jsoniter "github.com/json-iterator/go"
 )
 
 // User represents a user
@@ -38,6 +39,7 @@ type User struct {
 func (u User) MarshalJSON() ([]byte, error) {
        // Re-declaring User to avoid recursion
        type shadow User
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        return json.Marshal(struct {
                shadow
                CompatUserName string `json:"username"`
index 72f111ecc7c527435063f666e729cfff654abd84..0443517c01694eee65d0e36b93bc54b34041bcab 100644 (file)
@@ -5,7 +5,6 @@
 package task
 
 import (
-       "encoding/json"
        "fmt"
 
        "code.gitea.io/gitea/models"
@@ -16,6 +15,7 @@ import (
        repo_module "code.gitea.io/gitea/modules/repository"
        "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/timeutil"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // taskQueue is a global queue of tasks
@@ -65,6 +65,7 @@ func MigrateRepository(doer, u *models.User, opts base.MigrateOptions) error {
 
 // CreateMigrateTask creates a migrate task
 func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models.Task, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        bs, err := json.Marshal(&opts)
        if err != nil {
                return nil, err
index 4b9b648b2f79e1d09d9bc64dee5149a63088c21a..d3f6b8e06f97d6e61bd88215aa011e801d4d32fa 100644 (file)
@@ -38,6 +38,7 @@ import (
        mirror_service "code.gitea.io/gitea/services/mirror"
 
        "github.com/editorconfig/editorconfig-core-go/v2"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Used from static.go && dynamic.go
@@ -45,6 +46,7 @@ var mailSubjectSplit = regexp.MustCompile(`(?m)^-{3,}[\s]*$`)
 
 // NewFuncMap returns functions for injecting to templates
 func NewFuncMap() []template.FuncMap {
+       jsonED := jsoniter.ConfigCompatibleWithStandardLibrary
        return []template.FuncMap{map[string]interface{}{
                "GoVer": func() string {
                        return strings.Title(runtime.Version())
@@ -215,7 +217,7 @@ func NewFuncMap() []template.FuncMap {
                        return fmt.Sprintf("%f", float64(adds)/(float64(adds)+float64(dels))*100)
                },
                "Json": func(in interface{}) string {
-                       out, err := json.Marshal(in)
+                       out, err := jsonED.Marshal(in)
                        if err != nil {
                                return ""
                        }
@@ -814,6 +816,8 @@ func ActionIcon(opType models.ActionType) string {
 // ActionContent2Commits converts action content to push commits
 func ActionContent2Commits(act Actioner) *repository.PushCommits {
        push := repository.NewPushCommits()
+
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(act.GetContent()), push); err != nil {
                log.Error("json.Unmarshal:\n%s\nERROR: %v", act.GetContent(), err)
        }
index 2b2328a93aee382de2ff07bfcd5218747c227978..49f6a394a6ef235386f2f7c21764cf44b35eaacb 100644 (file)
@@ -6,7 +6,6 @@
 package admin
 
 import (
-       "encoding/json"
        "fmt"
        "net/url"
        "os"
@@ -28,6 +27,7 @@ import (
        "code.gitea.io/gitea/modules/timeutil"
        "code.gitea.io/gitea/modules/web"
        "code.gitea.io/gitea/services/mailer"
+       jsoniter "github.com/json-iterator/go"
 
        "gitea.com/go-chi/session"
 )
@@ -274,6 +274,7 @@ func Config(ctx *context.Context) {
        sessionCfg := setting.SessionConfig
        if sessionCfg.Provider == "VirtualSession" {
                var realSession session.Options
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                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)
                }
index b0ce40b9fb736140bcefbba337ff4cd979e0c6c1..c7af40dcf056eff6a9968e4ddde08ea943aa3131 100644 (file)
@@ -5,7 +5,6 @@
 package utils
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "strings"
@@ -17,6 +16,7 @@ import (
        "code.gitea.io/gitea/modules/util"
        "code.gitea.io/gitea/routers/utils"
        "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
@@ -147,6 +147,7 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID
                        return nil, false
                }
 
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                meta, err := json.Marshal(&webhook.SlackMeta{
                        Channel:  strings.TrimSpace(channel),
                        Username: form.Config["username"],
@@ -221,6 +222,7 @@ func editHook(ctx *context.APIContext, form *api.EditHookOption, w *models.Webho
 
                if w.Type == models.SLACK {
                        if channel, ok := form.Config["channel"]; ok {
+                               json := jsoniter.ConfigCompatibleWithStandardLibrary
                                meta, err := json.Marshal(&webhook.SlackMeta{
                                        Channel:  channel,
                                        Username: form.Config["username"],
index 2b78d8603baecd7c8b50377ea955b1b7875bc86e..27dbb08fc8ea75263ee613277a98826b3fc3514d 100644 (file)
@@ -5,7 +5,6 @@
 package events
 
 import (
-       "encoding/json"
        "net/http"
        "time"
 
@@ -17,6 +16,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/routers/user"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // Events listens for events
@@ -92,6 +92,7 @@ loop:
                                log.Error("Unable to APIFormat stopwatches: %v", err)
                                continue
                        }
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
                        dataBs, err := json.Marshal(apiSWs)
                        if err != nil {
                                log.Error("Unable to marshal stopwatches: %v", err)
index 330de14c46d29314f83f7c0f7c218ac7a575ad6c..cda442ea04781fe5602c37432dce8979ffdf5c33 100644 (file)
@@ -5,7 +5,6 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
        "strconv"
@@ -16,6 +15,7 @@ import (
        "code.gitea.io/gitea/modules/private"
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/services/mailer"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // SendEmail pushes messages to mail queue
@@ -32,6 +32,7 @@ func SendEmail(ctx *context.PrivateContext) {
        var mail private.Email
        rd := ctx.Req.Body
        defer rd.Close()
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.NewDecoder(rd).Decode(&mail); err != nil {
                log.Error("%v", err)
                ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
index e5b4583fd1b2e5ea51d0108f365047dd091f981f..192c4947e76a1f5654be2172682fb3964ea393cc 100644 (file)
@@ -5,7 +5,6 @@
 package private
 
 import (
-       "encoding/json"
        "fmt"
        "net/http"
 
@@ -16,6 +15,7 @@ import (
        "code.gitea.io/gitea/modules/queue"
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/web"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // FlushQueues flushes all the Queues
@@ -130,6 +130,7 @@ func AddLogger(ctx *context.PrivateContext) {
        }
 
        bufferLen := setting.Cfg.Section("log").Key("BUFFER_LEN").MustInt64(10000)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        byteConfig, err := json.Marshal(opts.Config)
        if err != nil {
                log.Error("Failed to marshal log configuration: %v %v", opts.Config, err)
index 344174828e255fd28727019e8868f584a043e050..14a75556d2b278f1c5fa756d0275489e629d774f 100644 (file)
@@ -5,7 +5,6 @@
 package repo
 
 import (
-       "encoding/json"
        "fmt"
        "io/ioutil"
        "path"
@@ -25,6 +24,7 @@ import (
        "code.gitea.io/gitea/modules/util"
        "code.gitea.io/gitea/modules/web"
        "code.gitea.io/gitea/routers/utils"
+       jsoniter "github.com/json-iterator/go"
 )
 
 const (
@@ -158,6 +158,7 @@ func GetEditorConfig(ctx *context.Context, treePath string) string {
        if err == nil {
                def, err := ec.GetDefinitionForFilename(treePath)
                if err == nil {
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
                        jsonStr, _ := json.Marshal(def)
                        return string(jsonStr)
                }
index 01d142843f929c080e97d7b40d7e1f5202e93186..d1d4dc02082843b04b1824499a5474ca16271cce 100644 (file)
@@ -6,7 +6,6 @@
 package repo
 
 import (
-       "encoding/json"
        "errors"
        "fmt"
        "path"
@@ -23,6 +22,7 @@ import (
        "code.gitea.io/gitea/modules/util"
        "code.gitea.io/gitea/modules/web"
        "code.gitea.io/gitea/services/webhook"
+       jsoniter "github.com/json-iterator/go"
 )
 
 const (
@@ -305,6 +305,7 @@ func DiscordHooksNewPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.DiscordMeta{
                Username: form.Username,
                IconURL:  form.IconURL,
@@ -400,6 +401,7 @@ func TelegramHooksNewPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.TelegramMeta{
                BotToken: form.BotToken,
                ChatID:   form.ChatID,
@@ -452,6 +454,7 @@ func MatrixHooksNewPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.MatrixMeta{
                HomeserverURL: form.HomeserverURL,
                Room:          form.RoomID,
@@ -556,6 +559,7 @@ func SlackHooksNewPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.SlackMeta{
                Channel:  strings.TrimSpace(form.Channel),
                Username: form.Username,
@@ -799,6 +803,7 @@ func SlackHooksEditPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.SlackMeta{
                Channel:  strings.TrimSpace(form.Channel),
                Username: form.Username,
@@ -844,6 +849,7 @@ func DiscordHooksEditPost(ctx *context.Context) {
                return
        }
 
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.DiscordMeta{
                Username: form.Username,
                IconURL:  form.IconURL,
@@ -919,6 +925,7 @@ func TelegramHooksEditPost(ctx *context.Context) {
                ctx.HTML(200, orCtx.NewTemplate)
                return
        }
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.TelegramMeta{
                BotToken: form.BotToken,
                ChatID:   form.ChatID,
@@ -960,6 +967,7 @@ func MatrixHooksEditPost(ctx *context.Context) {
                ctx.HTML(200, orCtx.NewTemplate)
                return
        }
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        meta, err := json.Marshal(&webhook.MatrixMeta{
                HomeserverURL: form.HomeserverURL,
                Room:          form.RoomID,
index a8020b64e0486b94b2f2885e0fd61888d86a46ed..9957ec6b02b4d04337c3a0419b141186767b75c6 100644 (file)
@@ -7,7 +7,6 @@ package user
 
 import (
        "bytes"
-       "encoding/json"
        "fmt"
        "regexp"
        "sort"
@@ -25,6 +24,7 @@ import (
        issue_service "code.gitea.io/gitea/services/issue"
        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/armor"
        "xorm.io/builder"
@@ -691,6 +691,7 @@ func buildIssueOverview(ctx *context.Context, unitType models.UnitType) {
        }
 
        // Convert []int64 to string
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        reposParam, _ := json.Marshal(repoIDs)
 
        ctx.Data["ReposParam"] = string(reposParam)
index 2f92a016943bd70bccc9ced5a808c5bd7fa7a6f7..f8c25a3912d513bd0957b0aef65505217f8e61ab 100644 (file)
@@ -6,7 +6,6 @@
 package gitdiff
 
 import (
-       "encoding/json"
        "fmt"
        "html/template"
        "strconv"
@@ -17,6 +16,7 @@ import (
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/highlight"
        "code.gitea.io/gitea/modules/setting"
+       jsoniter "github.com/json-iterator/go"
        dmp "github.com/sergi/go-diff/diffmatchpatch"
        "github.com/stretchr/testify/assert"
        "gopkg.in/ini.v1"
@@ -298,7 +298,8 @@ index 6961180..9ba1a00 100644
                                t.Errorf("ParsePatch(%q) error = %v, wantErr %v", testcase.name, err, testcase.wantErr)
                                return
                        }
-                       gotMarshaled, _ := json.MarshalIndent(got, "  ", "  ")
+                       json := jsoniter.ConfigCompatibleWithStandardLibrary
+                       gotMarshaled, _ := json.MarshalIndent(got, "", "  ")
                        if got.NumFiles != 1 {
                                t.Errorf("ParsePath(%q) did not receive 1 file:\n%s", testcase.name, string(gotMarshaled))
                                return
index cadb317472ddb39d6aff78e7304a5a2de3256651..331ef46d3d34cfa888e854cf3d18623a25fa18cf 100644 (file)
@@ -8,7 +8,6 @@ import (
        "bufio"
        "bytes"
        "context"
-       "encoding/json"
        "errors"
        "fmt"
        "strings"
@@ -21,6 +20,7 @@ import (
        "code.gitea.io/gitea/modules/notification"
        "code.gitea.io/gitea/modules/setting"
        issue_service "code.gitea.io/gitea/services/issue"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // NewPullRequest creates new pull request with labels for repository.
@@ -86,6 +86,7 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
                        data.CommitIDs = append(data.CommitIDs, e.Value.(*git.Commit).ID.String())
                }
 
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                dataJSON, err := json.Marshal(data)
                if err != nil {
                        return err
index a9032db046fead7497d19bb6ff55c4c618d17772..0401464a448a6c4fdfdcb64ec3e021691d5c8b89 100644 (file)
@@ -5,7 +5,6 @@
 package webhook
 
 import (
-       "encoding/json"
        "fmt"
        "strings"
 
@@ -13,6 +12,7 @@ import (
        "code.gitea.io/gitea/modules/git"
        api "code.gitea.io/gitea/modules/structs"
 
+       jsoniter "github.com/json-iterator/go"
        dingtalk "github.com/lunny/dingtalk_webhook"
 )
 
@@ -30,6 +30,7 @@ func (d *DingtalkPayload) SetSecret(_ string) {}
 
 // JSONPayload Marshals the DingtalkPayload to json
 func (d *DingtalkPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(d, "", "  ")
        if err != nil {
                return []byte{}, err
index 530e7adbda4deecf03add194d9d790ccdf4b053b..d28904715f61857ceb39c5bee04c35784541c87e 100644 (file)
@@ -5,7 +5,6 @@
 package webhook
 
 import (
-       "encoding/json"
        "errors"
        "fmt"
        "strconv"
@@ -16,6 +15,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 type (
@@ -68,6 +68,7 @@ type (
 // GetDiscordHook returns discord metadata
 func GetDiscordHook(w *models.Webhook) *DiscordMeta {
        s := &DiscordMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
                log.Error("webhook.GetDiscordHook(%d): %v", w.ID, err)
        }
@@ -101,6 +102,7 @@ func (d *DiscordPayload) SetSecret(_ string) {}
 
 // JSONPayload Marshals the DiscordPayload to json
 func (d *DiscordPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(d, "", "  ")
        if err != nil {
                return []byte{}, err
@@ -407,6 +409,7 @@ func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string)
        s := new(DiscordPayload)
 
        discord := &DiscordMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(meta), &discord); err != nil {
                return s, errors.New("GetDiscordPayload meta json:" + err.Error())
        }
index 3d789e6c1f1925b63998c7f28e1abc4065ef3eb3..847a991f366c3d3af4ebc94121d90655b3b4a39a 100644 (file)
@@ -5,13 +5,13 @@
 package webhook
 
 import (
-       "encoding/json"
        "fmt"
        "strings"
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/git"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 type (
@@ -40,6 +40,7 @@ func (f *FeishuPayload) SetSecret(_ string) {}
 
 // JSONPayload Marshals the FeishuPayload to json
 func (f *FeishuPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(f, "", "  ")
        if err != nil {
                return []byte{}, err
index 063147198ae629b422a9394f43a325be3e6f19f1..1658dd4b44e97b31c0ab7947148299eb6a5e2a24 100644 (file)
@@ -6,7 +6,6 @@ package webhook
 
 import (
        "crypto/sha1"
-       "encoding/json"
        "errors"
        "fmt"
        "html"
@@ -19,6 +18,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 const matrixPayloadSizeLimit = 1024 * 64
@@ -39,6 +39,7 @@ var messageTypeText = map[int]string{
 // GetMatrixHook returns Matrix metadata
 func GetMatrixHook(w *models.Webhook) *MatrixMeta {
        s := &MatrixMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
                log.Error("webhook.GetMatrixHook(%d): %v", w.ID, err)
        }
@@ -80,6 +81,7 @@ func (m *MatrixPayloadUnsafe) SetSecret(_ string) {}
 
 // JSONPayload Marshals the MatrixPayloadUnsafe to json
 func (m *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(m, "", "  ")
        if err != nil {
                return []byte{}, err
@@ -229,6 +231,7 @@ func GetMatrixPayload(p api.Payloader, event models.HookEventType, meta string)
        s := new(MatrixPayloadUnsafe)
 
        matrix := &MatrixMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(meta), &matrix); err != nil {
                return s, errors.New("GetMatrixPayload meta json:" + err.Error())
        }
@@ -262,6 +265,7 @@ func getMessageBody(htmlText string) string {
 // The access_token is removed from t.PayloadContent
 func getMatrixHookRequest(t *models.HookTask) (*http.Request, error) {
        payloadunsafe := MatrixPayloadUnsafe{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(t.PayloadContent), &payloadunsafe); err != nil {
                log.Error("Matrix Hook delivery failed: %v", err)
                return nil, err
index a68c97ea37ce874917f8f31c81a02918ebda4693..dc83a47c8d8016f962d775e3fa03c0033825bfec 100644 (file)
@@ -5,13 +5,13 @@
 package webhook
 
 import (
-       "encoding/json"
        "fmt"
        "strings"
 
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/git"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 type (
@@ -60,6 +60,7 @@ func (m *MSTeamsPayload) SetSecret(_ string) {}
 
 // JSONPayload Marshals the MSTeamsPayload to json
 func (m *MSTeamsPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(m, "", "  ")
        if err != nil {
                return []byte{}, err
index aaecad6c678f63e9e7206826e0fbaa260acfc3ce..f5c857f2a961483d166fd3fda726070dec45a141 100644 (file)
@@ -5,7 +5,6 @@
 package webhook
 
 import (
-       "encoding/json"
        "errors"
        "fmt"
        "strings"
@@ -15,6 +14,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 // SlackMeta contains the slack metadata
@@ -28,6 +28,7 @@ type SlackMeta struct {
 // GetSlackHook returns slack metadata
 func GetSlackHook(w *models.Webhook) *SlackMeta {
        s := &SlackMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
                log.Error("webhook.GetSlackHook(%d): %v", w.ID, err)
        }
@@ -60,6 +61,7 @@ func (s *SlackPayload) SetSecret(_ string) {}
 
 // JSONPayload Marshals the SlackPayload to json
 func (s *SlackPayload) JSONPayload() ([]byte, error) {
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(s, "", "  ")
        if err != nil {
                return []byte{}, err
@@ -320,6 +322,7 @@ func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (
        s := new(SlackPayload)
 
        slack := &SlackMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(meta), &slack); err != nil {
                return s, errors.New("GetSlackPayload meta json:" + err.Error())
        }
index 84fc210042c66ad0379a27f451401cbffae7dee5..5b78b46f8ec02ab67506b4377ed2b6928af97e5d 100644 (file)
@@ -5,7 +5,6 @@
 package webhook
 
 import (
-       "encoding/json"
        "fmt"
        "strings"
 
@@ -14,6 +13,7 @@ import (
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/markup"
        api "code.gitea.io/gitea/modules/structs"
+       jsoniter "github.com/json-iterator/go"
 )
 
 type (
@@ -34,6 +34,7 @@ type (
 // GetTelegramHook returns telegram metadata
 func GetTelegramHook(w *models.Webhook) *TelegramMeta {
        s := &TelegramMeta{}
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
                log.Error("webhook.GetTelegramHook(%d): %v", w.ID, err)
        }
@@ -52,6 +53,7 @@ func (t *TelegramPayload) JSONPayload() ([]byte, error) {
        t.ParseMode = "HTML"
        t.DisableWebPreview = true
        t.Message = markup.Sanitize(t.Message)
+       json := jsoniter.ConfigCompatibleWithStandardLibrary
        data, err := json.MarshalIndent(t, "", "  ")
        if err != nil {
                return []byte{}, err
index acd2a7e17118ee44e5e50956e00e5de00aa3832c..455b9b8832ebcd0d0807bed475d2f7a2c5c6a3b4 100644 (file)
@@ -18,7 +18,6 @@
 package binding
 
 import (
-       "encoding/json"
        "fmt"
        "io"
        "mime/multipart"
@@ -30,6 +29,7 @@ import (
        "strings"
        "unicode/utf8"
 
+       jsoniter "github.com/json-iterator/go"
        "github.com/unknwon/com"
 )
 
@@ -89,6 +89,7 @@ func errorHandler(errs Errors, rw http.ResponseWriter) {
                } else {
                        rw.WriteHeader(STATUS_UNPROCESSABLE_ENTITY)
                }
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                errOutput, _ := json.Marshal(errs)
                rw.Write(errOutput)
                return
@@ -171,6 +172,7 @@ func JSON(req *http.Request, jsonStruct interface{}) Errors {
 
        if req.Body != nil {
                defer req.Body.Close()
+               json := jsoniter.ConfigCompatibleWithStandardLibrary
                err := json.NewDecoder(req.Body).Decode(jsonStruct)
                if err != nil && err != io.EOF {
                        errors.Add([]string{}, ERR_DESERIALIZATION, err.Error())
index 68e7cc5c7e9487a02cbc48fcd33faf955243a332..ada44675234b428345fe45283792c8201391e6e1 100644 (file)
@@ -4,6 +4,7 @@ go 1.13
 
 require (
        github.com/go-chi/chi v1.5.1
+       github.com/json-iterator/go v1.1.10
        github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337
        github.com/unknwon/com v0.0.0-20190804042917-757f69c95f3e
 )
index 158860f7c2124c4e883ebbd5ff2ceabed6eed74f..af9a07b2e8e526a2bdb46a9edee2f617c9e3048d 100644 (file)
@@ -1,17 +1,32 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/go-chi/chi v1.5.1 h1:kfTK3Cxd/dkMu/rKs5ZceWYp+t5CtiE7vmaTv3LjC6w=
 github.com/go-chi/chi v1.5.1/go.mod h1:REp24E+25iKvxgeTfHmdUoL5x15kBiDBlnIl5bCwe2k=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg=
 github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 h1:Jpy1PXuP99tXNrhbq2BaPz9B+jNAvH1JPQQpG/9GCXY=
 github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
 github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8=
 github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/unknwon/com v0.0.0-20190804042917-757f69c95f3e h1:GSGeB9EAKY2spCABz6xOX5DbxZEXolK+nBSvmsQwRjM=
 github.com/unknwon/com v0.0.0-20190804042917-757f69c95f3e/go.mod h1:tOOxU81rwgoCLoOVVPHb6T/wt8HZygqH5id+GNnlCXM=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
index dc05ee912af3acfb1aad4dfaf7bb13c7ad2173df..66779fc23a90b16c3a88235159ef5156765fe10a 100644 (file)
@@ -8,7 +8,7 @@ code.gitea.io/gitea-vet/checks
 # code.gitea.io/sdk/gitea v0.13.2
 ## explicit
 code.gitea.io/sdk/gitea
-# gitea.com/go-chi/binding v0.0.0-20210113025129-03f1d313373c
+# gitea.com/go-chi/binding v0.0.0-20210301195521-1fe1c9a555e7
 ## explicit
 gitea.com/go-chi/binding
 # gitea.com/go-chi/cache v0.0.0-20210110083709-82c4c9ce2d5e
@@ -483,6 +483,7 @@ github.com/jessevdk/go-flags
 # github.com/josharian/intern v1.0.0
 github.com/josharian/intern
 # github.com/json-iterator/go v1.1.10
+## explicit
 github.com/json-iterator/go
 # github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
 ## explicit