Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b2a7ab163 | ||
|
|
a5339d98d5 | ||
|
|
b2364194b1 |
@ -83,7 +83,7 @@ func TestBuiltinSigners(t *testing.T) {
|
||||
if err := signer.Sign(req, config); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expected := "Basic " + encoding.Base64ToString([]byte("admin:123"))
|
||||
expected := "Basic " + encoding.Base64([]byte("admin:123"))
|
||||
if req.GetHeader("Authorization") != expected {
|
||||
t.Errorf("expected %s, got %s", expected, req.GetHeader("Authorization"))
|
||||
}
|
||||
|
||||
@ -218,8 +218,8 @@ func decryptMapWithPrefix(m map[string]any) []*safe.SafeBuf {
|
||||
raw := s[2:]
|
||||
var b64 []byte
|
||||
var err error
|
||||
if b64, err = encoding.UnUrlBase64FromString(raw); err != nil {
|
||||
b64, err = encoding.UnBase64FromString(raw)
|
||||
if b64, err = encoding.UnURLBase64(raw); err != nil {
|
||||
b64, err = encoding.UnBase64(raw)
|
||||
}
|
||||
|
||||
if err == nil && len(b64) > 0 {
|
||||
@ -249,8 +249,8 @@ func decryptMap(m map[string]any) []*safe.SafeBuf {
|
||||
inner = s[4 : len(s)-1]
|
||||
}
|
||||
|
||||
if b64, err = encoding.UnUrlBase64FromString(inner); err != nil {
|
||||
b64, err = encoding.UnBase64FromString(inner)
|
||||
if b64, err = encoding.UnURLBase64(inner); err != nil {
|
||||
b64, err = encoding.UnBase64(inner)
|
||||
}
|
||||
|
||||
if err == nil && len(b64) > 0 {
|
||||
|
||||
24
go.mod
24
go.mod
@ -3,21 +3,21 @@ module apigo.cc/go/api
|
||||
go 1.25.0
|
||||
|
||||
require (
|
||||
apigo.cc/go/cast v1.3.3
|
||||
apigo.cc/go/config v1.3.1
|
||||
apigo.cc/go/crypto v1.3.1
|
||||
apigo.cc/go/encoding v1.3.1
|
||||
apigo.cc/go/http v1.3.2
|
||||
apigo.cc/go/jsmod v1.0.1
|
||||
apigo.cc/go/safe v1.3.1
|
||||
apigo.cc/go/cast v1.5.0
|
||||
apigo.cc/go/config v1.5.0
|
||||
apigo.cc/go/crypto v1.5.0
|
||||
apigo.cc/go/encoding v1.5.0
|
||||
apigo.cc/go/http v1.5.0
|
||||
apigo.cc/go/jsmod v1.5.0
|
||||
apigo.cc/go/safe v1.5.0
|
||||
)
|
||||
|
||||
require (
|
||||
apigo.cc/go/file v1.3.2 // indirect
|
||||
apigo.cc/go/id v1.3.1 // indirect
|
||||
apigo.cc/go/log v1.3.4 // indirect
|
||||
apigo.cc/go/rand v1.3.1 // indirect
|
||||
apigo.cc/go/shell v1.3.1 // indirect
|
||||
apigo.cc/go/file v1.5.0 // indirect
|
||||
apigo.cc/go/id v1.5.0 // indirect
|
||||
apigo.cc/go/log v1.5.0 // indirect
|
||||
apigo.cc/go/rand v1.5.0 // indirect
|
||||
apigo.cc/go/shell v1.5.0 // indirect
|
||||
golang.org/x/crypto v0.51.0 // indirect
|
||||
golang.org/x/net v0.54.0 // indirect
|
||||
golang.org/x/sys v0.44.0 // indirect
|
||||
|
||||
48
go.sum
48
go.sum
@ -1,27 +1,27 @@
|
||||
apigo.cc/go/cast v1.3.3 h1:aln5eDR5DZVWVzZ/y5SJh1gQNgWv2sT82I25NaO9g34=
|
||||
apigo.cc/go/cast v1.3.3/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk=
|
||||
apigo.cc/go/config v1.3.1 h1:wZzUh4oL+fGD6SayVgX6prLPMsniM25etWFcEH8XzIE=
|
||||
apigo.cc/go/config v1.3.1/go.mod h1:7KHz/1WmtBLM762Lln/TaXh2dmlMvJTLhnlk33zbS3U=
|
||||
apigo.cc/go/crypto v1.3.1 h1:ulQ2zX9bUWirk0sEacx1Srsjs2Jow7HlZq7ED7msNcg=
|
||||
apigo.cc/go/crypto v1.3.1/go.mod h1:SwHlBFDPddttWgFFtzsEMla8CM/rcFy9nvdsJjW4CIs=
|
||||
apigo.cc/go/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y=
|
||||
apigo.cc/go/encoding v1.3.1/go.mod h1:xAJk5b83VZ31mXMTnyp0dfMoBKfT/AHDn0u+cQfojgY=
|
||||
apigo.cc/go/file v1.3.2 h1:pu4oiDyiqgj3/eykfnJf+/6+A9v/Z0b3ClP5XK+lwG4=
|
||||
apigo.cc/go/file v1.3.2/go.mod h1:vci4h0Pz94mV6dkniQkuyBYERVYeq7/LX4jJVuCg9hs=
|
||||
apigo.cc/go/http v1.3.2 h1:0Or5KfoIq4+yeWKYusYPV8XLPw8XuzJMeaFv7dZViLI=
|
||||
apigo.cc/go/http v1.3.2/go.mod h1:Q9R7Ors0Fz2A6Mxg0dykO2PjCzdAHRRXreOUMjMOLwA=
|
||||
apigo.cc/go/id v1.3.1 h1:pkqi6VeWyQoHuIu0Zbx/RRxIAdM61Js0j6cY1M9XVCk=
|
||||
apigo.cc/go/id v1.3.1/go.mod h1:P2/vl3tyW3US+ayOFSMoPIOCulNLBngNYPhXJC/Z7J4=
|
||||
apigo.cc/go/jsmod v1.0.1 h1:vaz3cMQi75UVoALLfyV/Trs8iP/Nh28yN57IvBFpPGk=
|
||||
apigo.cc/go/jsmod v1.0.1/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
|
||||
apigo.cc/go/log v1.3.4 h1:UT8Neb9r4QjjbCFbTzw+ZeTxd+DmdmR5gNExeR4Cj+g=
|
||||
apigo.cc/go/log v1.3.4/go.mod h1:/Q/2r51xWSsrS4QN5U9jLiTw8n6qNC8kG9nuVHweY20=
|
||||
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
|
||||
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
|
||||
apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q=
|
||||
apigo.cc/go/safe v1.3.1/go.mod h1:XdOpBhN2vkImalaykYXXmEpczqWa1y3ah6/Q72cdRqE=
|
||||
apigo.cc/go/shell v1.3.1 h1:M8oD0b2HcJuCC6frQFx11b3UTcTx3lATX8XK+YXSVm8=
|
||||
apigo.cc/go/shell v1.3.1/go.mod h1:ZMdJjpCpWdvsHKUXlelh/AxsV/nWdkH/k3lISfzMdUw=
|
||||
apigo.cc/go/cast v1.5.0 h1:UBGJtFQ8eJPMQXs37cUgqd7YQo1zI9opuSDBDmn2/pE=
|
||||
apigo.cc/go/cast v1.5.0/go.mod h1:z2GW5p5WCZGEqVVIJUdhl232vRbLf2Qu4EDlEakX/D8=
|
||||
apigo.cc/go/config v1.5.0 h1:Yuz9QEb11XXG4XkhDi/ueT2M1T3Q9PElE5tiakvjehs=
|
||||
apigo.cc/go/config v1.5.0/go.mod h1:jdMiDLPa9gzB8/FFZvm9jOopUqdxb7XSX+0OeWcZZUM=
|
||||
apigo.cc/go/crypto v1.5.0 h1:Nxz7a6VKCdvaF258IU0NkjQyureOLxfR308Sy2iftUI=
|
||||
apigo.cc/go/crypto v1.5.0/go.mod h1:F9M6nXv+5328r1ZwbTvI6fcr8VdgqHVzALOcsdv6ntE=
|
||||
apigo.cc/go/encoding v1.5.0 h1:EJNdRVDOMoI2DAvZwQNQTbYuqB/6zsEzvg7lS5pQI+I=
|
||||
apigo.cc/go/encoding v1.5.0/go.mod h1:8++NfZj3hWig0qh2g7GQRw/4LpSvCYMWUZ+8J+x58cA=
|
||||
apigo.cc/go/file v1.5.0 h1:Fh1NSDBqaxjuXYJ71yPHPXVJ8BFEv/AGS3l+jkLi5uw=
|
||||
apigo.cc/go/file v1.5.0/go.mod h1:4YhOGgBINTpmmmgws3H8LAyXQQBGzBp44hYUoCS+kr0=
|
||||
apigo.cc/go/http v1.5.0 h1:GGIu0dhMjTiYygxH9NWOzz6AY+WZjfyTL1qZ8G9vI1U=
|
||||
apigo.cc/go/http v1.5.0/go.mod h1:CIIH7HS6wdicLpSgkEVozdDcHlM9W9ygmmzJvzhAKWg=
|
||||
apigo.cc/go/id v1.5.0 h1:MjNWPhBhDsoXaLeJDv/0wfJmVMU9EvOs8pWYfsTQ6e8=
|
||||
apigo.cc/go/id v1.5.0/go.mod h1:qhu4a1/KLc/XcBpcsRu+mXZt7U7Wvd9zMcPs4VspuPA=
|
||||
apigo.cc/go/jsmod v1.5.0 h1:JgQtJNiJWy1NOP9AzE8NX5VXJkpO/x3GqLsCCSny5Ec=
|
||||
apigo.cc/go/jsmod v1.5.0/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
|
||||
apigo.cc/go/log v1.5.0 h1:kQuLLtbt33mEuc/xJVcy8NODXkso/QKSZWNclKrSpsI=
|
||||
apigo.cc/go/log v1.5.0/go.mod h1:Djy+I5aLhGB/EjwRz4KHqkVEz584IAD55FAFiIfInuo=
|
||||
apigo.cc/go/rand v1.5.0 h1:1o8hh8fhdBuk1/h02IvugvamuT3dkWbVJrqEJVQKB2E=
|
||||
apigo.cc/go/rand v1.5.0/go.mod h1:Lh98S2dm9UY0X+M+kNQQEKyXHG5pcCKSFPyXN0QCGdk=
|
||||
apigo.cc/go/safe v1.5.0 h1:W1NblmcU8cex1f9Y5z8mNLUJOzZTE1s6fszb3FbhGnk=
|
||||
apigo.cc/go/safe v1.5.0/go.mod h1:OfQ5d6COePSGEuPvMeOk6KagX2sezw7nvKh7exj9SeM=
|
||||
apigo.cc/go/shell v1.5.0 h1:WLDMMqUU0INeaBDmQsTPr0h/NfB2RknAtiJ5NL467+Q=
|
||||
apigo.cc/go/shell v1.5.0/go.mod h1:rYHA77d5hEsQHcJrbAWf1pHy0sxayeJ0gU55LA/JWQk=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
|
||||
12
js_export.go
12
js_export.go
@ -8,18 +8,16 @@ import (
|
||||
|
||||
func init() {
|
||||
jsmod.Register("api", map[string]any{
|
||||
"call": call,
|
||||
"setConfig": SetConfig,
|
||||
"registerAction": RegisterAction,
|
||||
"registerSigner": registerSigner,
|
||||
"Call": call,
|
||||
"SetConfig": SetConfig,
|
||||
"RegisterAction": RegisterAction,
|
||||
"RegisterSigner": registerSigner,
|
||||
})
|
||||
}
|
||||
|
||||
// call 提供给 JS 的私有入口
|
||||
func call(ctx context.Context, name string, payload any) (any, error) {
|
||||
// 注意:在低代码环境中,我们可能需要将 ctx 传入以透传追踪信息给 JS 签名器。
|
||||
// 虽然 api.CallBy[any] 目前不接收 ctx,但底层的 jsRunner 钩子可以从 context 中获取信息。
|
||||
// 如果未来 jsRunner 需要 ctx,我们可以在这里通过 context.WithValue 注入。
|
||||
// 将 ctx 传入以透传追踪信息给 JS 签名器
|
||||
return CallBy[any](name, payload)
|
||||
}
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ func TestSafeConfigDecryption(t *testing.T) {
|
||||
|
||||
plaintext := "my-secret-password"
|
||||
ciphertext, _ := confAES.EncryptBytes([]byte(plaintext))
|
||||
b64 := encoding.Base64ToString(ciphertext)
|
||||
b64 := encoding.Base64(ciphertext)
|
||||
|
||||
GlobalConfigs = map[string]any{
|
||||
"api": map[string]any{
|
||||
@ -51,7 +51,7 @@ func TestSafeConfigDecryption(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
expectedAuth := "Basic " + encoding.Base64ToString([]byte("admin:"+plaintext))
|
||||
expectedAuth := "Basic " + encoding.Base64([]byte("admin:"+plaintext))
|
||||
if req.GetHeader("Authorization") != expectedAuth {
|
||||
t.Errorf("expected %s, got %s", expectedAuth, req.GetHeader("Authorization"))
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user