@@ -3,14 +3,16 @@ package api
3
3
import (
4
4
"context"
5
5
"encoding/json"
6
+ "errors"
6
7
"fmt"
7
- imgGenerator "github.com/tonkeeper/opentonapi/pkg/image"
8
8
"math/big"
9
9
"reflect"
10
10
"strconv"
11
11
"strings"
12
12
"unicode"
13
13
14
+ imgGenerator "github.com/tonkeeper/opentonapi/pkg/image"
15
+
14
16
"github.com/go-faster/jx"
15
17
"github.com/tonkeeper/tongo"
16
18
"github.com/tonkeeper/tongo/boc"
@@ -22,15 +24,47 @@ import (
22
24
walletPkg "github.com/tonkeeper/opentonapi/pkg/wallet"
23
25
)
24
26
25
- func toError (code int , err error ) * oas.ErrorStatusCode {
26
- if strings .HasPrefix (err .Error (), "failed to connect to" ) || strings .Contains (err .Error (), "host=" ) {
27
- return & oas.ErrorStatusCode {StatusCode : code , Response : oas.Error {Error : "unknown error" }}
27
+ // Error helps to pass additional information about an error from private tonapi2 handlers.
28
+ type Error struct {
29
+ Code int
30
+ Message string
31
+ Key string
32
+ }
33
+
34
+ func (e Error ) Error () string {
35
+ return e .Message
36
+ }
37
+
38
+ // censor removes sensitive information from the error message.
39
+ func censor (msg string ) string {
40
+ if strings .HasPrefix (msg , "failed to connect to" ) || strings .Contains (msg , "host=" ) {
41
+ return "unknown error"
42
+ }
43
+ return msg
44
+ }
45
+
46
+ func errorKey (s string ) oas.OptErrorErrorKey {
47
+ if s == "" {
48
+ return oas.OptErrorErrorKey {}
49
+ }
50
+ return oas .NewOptErrorErrorKey (oas .ErrorErrorKey (s ))
51
+ }
52
+
53
+ func toError (defaultCode int , err error ) * oas.ErrorStatusCode {
54
+ var e Error
55
+ if errors .As (err , & e ) {
56
+ return & oas.ErrorStatusCode {
57
+ StatusCode : e .Code ,
58
+ Response : oas.Error {
59
+ Error : censor (e .Message ),
60
+ ErrorKey : errorKey (e .Key ),
61
+ },
62
+ }
28
63
}
29
64
if s , ok := status .FromError (err ); ok {
30
- return & oas.ErrorStatusCode {StatusCode : code , Response : oas.Error {Error : s .Message ()}}
65
+ return & oas.ErrorStatusCode {StatusCode : defaultCode , Response : oas.Error {Error : censor ( s .Message () )}}
31
66
}
32
- msg := err .Error ()
33
- return & oas.ErrorStatusCode {StatusCode : code , Response : oas.Error {Error : msg }}
67
+ return & oas.ErrorStatusCode {StatusCode : defaultCode , Response : oas.Error {Error : censor (err .Error ())}}
34
68
}
35
69
36
70
func anyToJSONRawMap (a any ) map [string ]jx.Raw { //todo: переписать этот ужас
0 commit comments