summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-03-01 21:08:10 +0000
committerGitHub <noreply@github.com>2021-03-01 22:08:10 +0100
commitf0e15250b9e322cc7731ba026d12387c2b549a42 (patch)
treef13d46119077ba924d620ef172b91daa315bda0a /modules
parent59fd641d1fb021e35aea7f9f4a1916cc11ef5c51 (diff)
downloadgitea-f0e15250b9e322cc7731ba026d12387c2b549a42.tar.gz
gitea-f0e15250b9e322cc7731ba026d12387c2b549a42.zip
Migrate to use jsoniter instead of encoding/json (#14841)
* 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>
Diffstat (limited to 'modules')
-rw-r--r--modules/context/context.go3
-rw-r--r--modules/eventsource/event.go4
-rw-r--r--modules/httplib/httplib.go4
-rw-r--r--modules/indexer/code/elastic_search.go3
-rw-r--r--modules/lfs/locks.go4
-rw-r--r--modules/lfs/server.go7
-rw-r--r--modules/log/conn.go7
-rw-r--r--modules/log/conn_test.go3
-rw-r--r--modules/log/console.go7
-rw-r--r--modules/log/console_test.go3
-rw-r--r--modules/log/file.go5
-rw-r--r--modules/log/level.go4
-rw-r--r--modules/log/level_test.go3
-rw-r--r--modules/log/smtp.go7
-rw-r--r--modules/notification/action/action.go4
-rw-r--r--modules/private/hook.go4
-rw-r--r--modules/private/internal.go3
-rw-r--r--modules/private/mail.go3
-rw-r--r--modules/private/manager.go4
-rw-r--r--modules/private/serv.go4
-rw-r--r--modules/queue/helper.go5
-rw-r--r--modules/queue/manager.go3
-rw-r--r--modules/queue/queue_bytefifo.go4
-rw-r--r--modules/queue/queue_test.go3
-rw-r--r--modules/queue/setting.go3
-rw-r--r--modules/recaptcha/recaptcha.go3
-rw-r--r--modules/session/virtual.go3
-rw-r--r--modules/setting/log.go3
-rw-r--r--modules/setting/session.go3
-rw-r--r--modules/setting/setting.go3
-rw-r--r--modules/setting/setting_test.go3
-rw-r--r--modules/storage/helper.go4
-rw-r--r--modules/structs/hook.go14
-rw-r--r--modules/structs/user.go4
-rw-r--r--modules/task/task.go3
-rw-r--r--modules/templates/helper.go6
36 files changed, 113 insertions, 40 deletions
diff --git a/modules/context/context.go b/modules/context/context.go
index 899f61d686..c06784c116 100644
--- a/modules/context/context.go
+++ b/modules/context/context.go
@@ -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)
}
diff --git a/modules/eventsource/event.go b/modules/eventsource/event.go
index fd418c6f07..a3407a94d2 100644
--- a/modules/eventsource/event.go
+++ b/modules/eventsource/event.go
@@ -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
diff --git a/modules/httplib/httplib.go b/modules/httplib/httplib.go
index 90bbe8f12a..62f284d2e1 100644
--- a/modules/httplib/httplib.go
+++ b/modules/httplib/httplib.go
@@ -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
}
diff --git a/modules/indexer/code/elastic_search.go b/modules/indexer/code/elastic_search.go
index c9d604b694..130cd1430a 100644
--- a/modules/indexer/code/elastic_search.go
+++ b/modules/indexer/code/elastic_search.go
@@ -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
}
diff --git a/modules/lfs/locks.go b/modules/lfs/locks.go
index cf62492c7e..f2688c3260 100644
--- a/modules/lfs/locks.go
+++ b/modules/lfs/locks.go
@@ -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)
diff --git a/modules/lfs/server.go b/modules/lfs/server.go
index be21a4de82..45cba9d9b7 100644
--- a/modules/lfs/server.go
+++ b/modules/lfs/server.go
@@ -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 {
diff --git a/modules/log/conn.go b/modules/log/conn.go
index 1abe44c1d4..ad3d7f74e0 100644
--- a/modules/log/conn.go
+++ b/modules/log/conn.go
@@ -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,
diff --git a/modules/log/conn_test.go b/modules/log/conn_test.go
index 0f35f02a2d..dc5de732f4 100644
--- a/modules/log/conn_test.go
+++ b/modules/log/conn_test.go
@@ -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()
}
diff --git a/modules/log/console.go b/modules/log/console.go
index a805021f0b..339b9ef3a4 100644
--- a/modules/log/console.go
+++ b/modules/log/console.go
@@ -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{
diff --git a/modules/log/console_test.go b/modules/log/console_test.go
index a028b5b875..e7ed07123b 100644
--- a/modules/log/console_test.go
+++ b/modules/log/console_test.go
@@ -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()
}
diff --git a/modules/log/file.go b/modules/log/file.go
index c9b5d47c0b..d5b38d4e01 100644
--- a/modules/log/file.go
+++ b/modules/log/file.go
@@ -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")
diff --git a/modules/log/level.go b/modules/log/level.go
index ab231bd1bd..4b2d4ced41 100644
--- a/modules/log/level.go
+++ b/modules/log/level.go
@@ -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)
diff --git a/modules/log/level_test.go b/modules/log/level_test.go
index 40f6310bfd..2f37e407a1 100644
--- a/modules/log/level_test.go
+++ b/modules/log/level_test.go
@@ -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,
})
diff --git a/modules/log/smtp.go b/modules/log/smtp.go
index edf4943619..3f27b2c658 100644
--- a/modules/log/smtp.go
+++ b/modules/log/smtp.go
@@ -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,
diff --git a/modules/notification/action/action.go b/modules/notification/action/action.go
index 836cb51b3e..3530e48b1c 100644
--- a/modules/notification/action/action.go
+++ b/modules/notification/action/action.go
@@ -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)
diff --git a/modules/private/hook.go b/modules/private/hook.go
index 84d66943ba..178500f736 100644
--- a/modules/private/hook.go
+++ b/modules/private/hook.go
@@ -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()
diff --git a/modules/private/internal.go b/modules/private/internal.go
index b4fee2680f..360fae47b6 100644
--- a/modules/private/internal.go
+++ b/modules/private/internal.go
@@ -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()
diff --git a/modules/private/mail.go b/modules/private/mail.go
index 675dec8f11..9c0912a6e3 100644
--- a/modules/private/mail.go
+++ b/modules/private/mail.go
@@ -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,
diff --git a/modules/private/manager.go b/modules/private/manager.go
index 6c9ec920bb..2bc6cec3b9 100644
--- a/modules/private/manager.go
+++ b/modules/private/manager.go
@@ -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,
diff --git a/modules/private/serv.go b/modules/private/serv.go
index 235d99a2b9..e077b00ccc 100644
--- a/modules/private/serv.go
+++ b/modules/private/serv.go
@@ -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 {
diff --git a/modules/queue/helper.go b/modules/queue/helper.go
index 751e0cfadc..161c2fe8e7 100644
--- a/modules/queue/helper.go
+++ b/modules/queue/helper.go
@@ -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)
diff --git a/modules/queue/manager.go b/modules/queue/manager.go
index 3e9f8fc8db..d44007a0f0 100644
--- a/modules/queue/manager.go
+++ b/modules/queue/manager.go
@@ -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,
diff --git a/modules/queue/queue_bytefifo.go b/modules/queue/queue_bytefifo.go
index 4bb7bbf2b1..fe5178ff2d 100644
--- a/modules/queue/queue_bytefifo.go
+++ b/modules/queue/queue_bytefifo.go
@@ -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
diff --git a/modules/queue/queue_test.go b/modules/queue/queue_test.go
index 3608f68d3d..89ce23ac4c 100644
--- a/modules/queue/queue_test.go
+++ b/modules/queue/queue_test.go
@@ -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)
diff --git a/modules/queue/setting.go b/modules/queue/setting.go
index 9ee1af8c7d..9b2c31b783 100644
--- a/modules/queue/setting.go
+++ b/modules/queue/setting.go
@@ -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)
diff --git a/modules/recaptcha/recaptcha.go b/modules/recaptcha/recaptcha.go
index 54ea1dc0b3..f5f4c7ef9c 100644
--- a/modules/recaptcha/recaptcha.go
+++ b/modules/recaptcha/recaptcha.go
@@ -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)
diff --git a/modules/session/virtual.go b/modules/session/virtual.go
index 8402d49a77..8f5c4a7e89 100644
--- a/modules/session/virtual.go
+++ b/modules/session/virtual.go
@@ -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
}
diff --git a/modules/setting/log.go b/modules/setting/log.go
index 9fe2d5bda3..9bbeee27a2 100644
--- a/modules/setting/log.go
+++ b/modules/setting/log.go
@@ -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)
diff --git a/modules/setting/session.go b/modules/setting/session.go
index 31f876132d..eb5e1a1875 100644
--- a/modules/setting/session.go
+++ b/modules/setting/session.go
@@ -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)
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index cca7f46f14..4976c0007c 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -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,
diff --git a/modules/setting/setting_test.go b/modules/setting/setting_test.go
index 7dd3d3bba9..9bc77ab0bb 100644
--- a/modules/setting/setting_test.go
+++ b/modules/setting/setting_test.go
@@ -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))
}
diff --git a/modules/storage/helper.go b/modules/storage/helper.go
index 93f22734e5..46ab82aed6 100644
--- a/modules/storage/helper.go
+++ b/modules/storage/helper.go
@@ -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)) {
diff --git a/modules/structs/hook.go b/modules/structs/hook.go
index 45ae94f985..693820b57d 100644
--- a/modules/structs/hook.go
+++ b/modules/structs/hook.go
@@ -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, "", " ")
}
diff --git a/modules/structs/user.go b/modules/structs/user.go
index 511e4c56ce..9e021e40fe 100644
--- a/modules/structs/user.go
+++ b/modules/structs/user.go
@@ -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"`
diff --git a/modules/task/task.go b/modules/task/task.go
index 72f111ecc7..0443517c01 100644
--- a/modules/task/task.go
+++ b/modules/task/task.go
@@ -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
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index 4b9b648b2f..d3f6b8e06f 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -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)
}