Skip to content

Commit 47d6c22

Browse files
author
Pedro Faria
authored
Adding encoding backward compatibility (#157)
1 parent f40dd44 commit 47d6c22

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

server/import.go

+17-6
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import (
55
"io"
66

77
"github.com/sirupsen/logrus"
8+
89
"golang.org/x/text/transform"
910
)
1011

11-
func ImportServer(configuration, settings, event, eventRules, entrylist, bop, assistRules io.Reader) error {
12+
func ImportServer(configuration, settings, event, eventRules, entrylist, bop, assistRules io.ReadSeeker) error {
1213
server := new(ServerSettings)
1314

1415
if err := importFile(configuration, &server.Configuration, configurationJsonName); err != nil {
@@ -46,14 +47,24 @@ func ImportServer(configuration, settings, event, eventRules, entrylist, bop, as
4647
return nil
4748
}
4849

49-
func importFile(reader io.Reader, config interface{}, filename string) error {
50+
func importFile(reader io.ReadSeeker, config interface{}, filename string) error {
5051
r := transform.NewReader(reader, utf16Encoding.NewDecoder().Transformer)
5152

5253
if err := json.NewDecoder(r).Decode(config); err != nil {
53-
logrus.WithError(err).
54-
WithField("file", filename).
55-
Error("Error unmarshalling configuration file JSON on import")
56-
return err
54+
if _, er := reader.Seek(0, io.SeekStart); er != nil {
55+
return er
56+
}
57+
58+
// trying decode non ut16 content
59+
if err2 := json.NewDecoder(reader).Decode(config); err2 != nil {
60+
logrus.WithError(err).
61+
WithField("file", filename).
62+
WithField("err_non_utf16", err2).
63+
Error("Error unmarshalling configuration file JSON on import")
64+
return err
65+
} else {
66+
return nil
67+
}
5768
}
5869

5970
return nil

server/list.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package server
22

33
import (
44
"encoding/json"
5+
"io"
56
"io/ioutil"
67
"os"
78
"path/filepath"
@@ -94,7 +95,16 @@ func loadConfigFromFile(config interface{}, path string) error {
9495
r := transform.NewReader(f, utf16Encoding.NewDecoder().Transformer)
9596

9697
if err := json.NewDecoder(r).Decode(config); err != nil {
97-
return err
98+
if _, er := f.Seek(0, io.SeekStart); er != nil {
99+
return er
100+
}
101+
102+
// trying decode non ut16 content
103+
if err2 := json.NewDecoder(f).Decode(config); err2 != nil {
104+
return err2
105+
} else {
106+
return nil
107+
}
98108
}
99109

100110
return nil

0 commit comments

Comments
 (0)