refactor: align with crypto.DefaultAES interface

This commit is contained in:
AI Engineer 2026-05-12 23:10:29 +08:00
parent 53f64af5f2
commit 90e7052258
6 changed files with 39 additions and 45 deletions

7
.gitignore vendored
View File

@ -1,5 +1,8 @@
.log.meta.json .log.meta.json
.ai/ .ai/
.geminiignore .geminiignore
.gemini
env.json
env.yml
env.yaml
/CODE-FULL.md

13
Base.go
View File

@ -10,7 +10,6 @@ import (
"time" "time"
"apigo.cc/go/cast" "apigo.cc/go/cast"
"apigo.cc/go/log"
) )
var structFieldsCache = sync.Map{} var structFieldsCache = sync.Map{}
@ -78,10 +77,10 @@ func baseExec(db *sql.DB, tx *sql.Tx, query string, args ...any) *ExecResult {
} else if db != nil { } else if db != nil {
r, err = db.Exec(query, args...) r, err = db.Exec(query, args...)
} else { } else {
return &ExecResult{Sql: &query, Args: args, usedTime: log.MakeUsedTime(startTime, time.Now()), Error: errors.New("operate on a bad connection")} return &ExecResult{Sql: &query, Args: args, usedTime: makeUsedTime(startTime, time.Now()), Error: errors.New("operate on a bad connection")}
} }
endTime := time.Now() endTime := time.Now()
usedTime := log.MakeUsedTime(startTime, endTime) usedTime := makeUsedTime(startTime, endTime)
if err != nil { if err != nil {
return &ExecResult{Sql: &query, Args: args, usedTime: usedTime, Error: err} return &ExecResult{Sql: &query, Args: args, usedTime: usedTime, Error: err}
@ -89,6 +88,10 @@ func baseExec(db *sql.DB, tx *sql.Tx, query string, args ...any) *ExecResult {
return &ExecResult{Sql: &query, Args: args, usedTime: usedTime, result: r} return &ExecResult{Sql: &query, Args: args, usedTime: usedTime, result: r}
} }
func makeUsedTime(startTime, endTime time.Time) float32 {
return float32(endTime.UnixNano()-startTime.UnixNano()) / 1e6
}
func flatArgs(args []any) []any { func flatArgs(args []any) []any {
for i, arg := range args { for i, arg := range args {
if arg == nil { if arg == nil {
@ -114,10 +117,10 @@ func baseQuery(db *sql.DB, tx *sql.Tx, query string, args ...any) *QueryResult {
} else if db != nil { } else if db != nil {
rows, err = db.Query(query, args...) rows, err = db.Query(query, args...)
} else { } else {
return &QueryResult{Sql: &query, Args: args, usedTime: log.MakeUsedTime(startTime, time.Now()), Error: errors.New("operate on a bad connection")} return &QueryResult{Sql: &query, Args: args, usedTime: makeUsedTime(startTime, time.Now()), Error: errors.New("operate on a bad connection")}
} }
endTime := time.Now() endTime := time.Now()
usedTime := log.MakeUsedTime(startTime, endTime) usedTime := makeUsedTime(startTime, endTime)
if err != nil { if err != nil {
return &QueryResult{Sql: &query, Args: args, usedTime: usedTime, Error: err} return &QueryResult{Sql: &query, Args: args, usedTime: usedTime, Error: err}

22
DB.go
View File

@ -161,9 +161,9 @@ func (dbInfo *Config) ConfigureBy(setting string) {
if sslCa != "" && sslCert != "" && sslKey != "" { if sslCa != "" && sslCert != "" && sslKey != "" {
sslName := id.Get12BytesUltraPerSecond() sslName := id.Get12BytesUltraPerSecond()
dbInfo.SSL = sslName dbInfo.SSL = sslName
decryptedCa, _ := confAes.DecryptBytes([]byte(sslCa)) decryptedCa, _ := confAES.DecryptBytes([]byte(sslCa))
decryptedCert, _ := confAes.DecryptBytes([]byte(sslCert)) decryptedCert, _ := confAES.DecryptBytes([]byte(sslCert))
decryptedKey, _ := confAes.DecryptBytes([]byte(sslKey)) decryptedKey, _ := confAES.DecryptBytes([]byte(sslKey))
tlsConf := BuildTLSConfig(decryptedCa, decryptedCert, decryptedKey, sslSkipVerify) tlsConf := BuildTLSConfig(decryptedCa, decryptedCert, decryptedKey, sslSkipVerify)
if tlsConf != nil { if tlsConf != nil {
dbInfo.tls = tlsConf dbInfo.tls = tlsConf
@ -221,14 +221,16 @@ type TableField struct {
IsVersion bool IsVersion bool
} }
var confAes, _ = crypto.NewAESCBCAndEraseKey([]byte("?GQ$0K0GgLdO=f+~L68PLm$uhKr4'=tV"), []byte("VFs7@sK61cj^f?HZ")) var confAES *crypto.Symmetric
var keysSetted = sync.Once{}
func init() {
crypto.OnSetDefaultAES(func(aes *crypto.Symmetric) {
confAES = aes
})
}
func SetEncryptKeys(key, iv []byte) { func SetEncryptKeys(key, iv []byte) {
keysSetted.Do(func() { crypto.SetDefaultAES(key, iv)
confAes.Close()
confAes, _ = crypto.NewAESGCMAndEraseKey(key, iv)
})
} }
type dbLogger struct { type dbLogger struct {
@ -445,7 +447,7 @@ func getDB(name string, logger *log.Logger, useCache bool) *DB {
if conf.Password != "" { if conf.Password != "" {
if encryptedPassword, err := base64.URLEncoding.DecodeString(conf.Password); err == nil { if encryptedPassword, err := base64.URLEncoding.DecodeString(conf.Password); err == nil {
if pwdSafeBuf, err := confAes.Decrypt(encryptedPassword); err == nil { if pwdSafeBuf, err := confAES.Decrypt(encryptedPassword); err == nil {
conf.pwd = pwdSafeBuf conf.pwd = pwdSafeBuf
} }
} }

View File

@ -4,8 +4,6 @@ import (
"database/sql" "database/sql"
"errors" "errors"
"time" "time"
"apigo.cc/go/log"
) )
type Stmt struct { type Stmt struct {
@ -24,7 +22,7 @@ func (stmt *Stmt) Exec(args ...any) *ExecResult {
startTime := time.Now() startTime := time.Now()
r, err := stmt.conn.Exec(args...) r, err := stmt.conn.Exec(args...)
endTime := time.Now() endTime := time.Now()
usedTime := log.MakeUsedTime(startTime, endTime) usedTime := makeUsedTime(startTime, endTime)
if err != nil { if err != nil {
stmt.logger.LogQueryError(err.Error(), *stmt.lastSql, stmt.lastArgs, usedTime) stmt.logger.LogQueryError(err.Error(), *stmt.lastSql, stmt.lastArgs, usedTime)
return &ExecResult{Sql: stmt.lastSql, Args: stmt.lastArgs, usedTime: usedTime, logger: stmt.logger, Error: err} return &ExecResult{Sql: stmt.lastSql, Args: stmt.lastArgs, usedTime: usedTime, logger: stmt.logger, Error: err}

2
go.mod
View File

@ -23,7 +23,7 @@ require (
apigo.cc/go/file v1.3.0 // indirect apigo.cc/go/file v1.3.0 // indirect
filippo.io/edwards25519 v1.2.0 // indirect filippo.io/edwards25519 v1.2.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/gomodule/redigo v1.9.3 // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect

36
go.sum
View File

@ -1,25 +1,14 @@
apigo.cc/go/cast v1.2.10 h1:wa9/hz6GW6Z+5co6l7LftMn2Eo06WpVHHDCCQphnmH8= apigo.cc/go/cast v1.3.0 h1:ZTcLYijkqZjSWSCSpJUWMfzJYeJKbwKxquKkPrFsROQ=
apigo.cc/go/cast v1.2.10/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk= apigo.cc/go/config v1.3.0 h1:TwI3bv3D+BJrAnFx+o62HQo3FarY2Ge3SCGsKchFYGg=
apigo.cc/go/config v1.0.8 h1:ZvontnJngNJrm6EJAPYmPhmBnLC9V7g5kZLiuN1MT60= apigo.cc/go/crypto v1.3.0 h1:rGRrrb5O+4M50X5hVUmJQbXx3l87zzlcgzGtUvZrZL8=
apigo.cc/go/config v1.0.8/go.mod h1:FCZj70MCejeWwv81O7sdpg0zmjOzglAMmNEfT3dQYzw= apigo.cc/go/encoding v1.3.0 h1:8jqNHoZBR8vOU/BGsLFebfp1Txa1UxDRpd7YwzIFLJs=
apigo.cc/go/crypto v1.1.1 h1:AE0jNtKzcq4euz6fL9MAYEHQpbIEfDTHv2mriP/juig= apigo.cc/go/file v1.3.0 h1:xG9FcY3Rv6Br83r9pq9QsIXFrplx4g8ITOkHSzfzXRg=
apigo.cc/go/crypto v1.1.1/go.mod h1:Q26As+TQrNs6olGkiVdD6649DJirxA4CUBT4oukKPuw= apigo.cc/go/id v1.3.0 h1:Tr2Yj0Rl19lfwW5wBTJ407o/zgo2oVRLE20WWEgJzdE=
apigo.cc/go/encoding v1.1.2 h1:reSrLkyYrtZsf4S91XPdyBY2AQpvA43n9q0Q9wz5uJA= apigo.cc/go/log v1.3.0 h1:61Z80WGN6SnhgxgoR8xuVYIieMdjlJKmf8JX1HXzp0Y=
apigo.cc/go/encoding v1.1.2/go.mod h1:iLuvrYHEK8mLnk8jijx5Sv1tInFreny0yGNBouA1d20= apigo.cc/go/rand v1.3.0 h1:k+UFAhMySwXf+dq8Om9TniZV6fm6gAE0evbrqMEdwQU=
apigo.cc/go/file v1.0.8 h1:GPkixU080cvrmz7cbdXkC2DqMvsWWyY3UzoyUVQYFvs= apigo.cc/go/redis v1.3.0 h1:3NJE3xPXzhCwL+Mh1iyphFrsKWEuPlY26LHJfMVFSeU=
apigo.cc/go/file v1.0.8/go.mod h1:T/wYji/va0S+JM2fAHonhKpnXKIELk/bmgnFEgMMY2s= apigo.cc/go/safe v1.3.0 h1:uctdAUsphT9p60Tk4oS5xPCe0NoIdOHfsYv4PNS0Rok=
apigo.cc/go/id v1.0.7 h1:vXCK8mUW3s4cJYmli0o2BxgyI9XbJrG8gSGJOP2Fe4g= apigo.cc/go/shell v1.3.0 h1:hdxuYPN/7T2BuM/Ja8AjVUhbRqU/wpi8OjcJVziJ0nw=
apigo.cc/go/id v1.0.7/go.mod h1:wXBrPpcEpyUDM7bp7M5uPM9zFw4VcnvXMQLw4Yd+uZE=
apigo.cc/go/log v1.1.16 h1:uqPqeHvs+FdNupLBzzamJmY4oHAqtPEkGuW/pW5i2nQ=
apigo.cc/go/log v1.1.16/go.mod h1:bOfPXjrX2bY+FNG9eEtBnvaVXoxZDGvz0jQfF3s/mYk=
apigo.cc/go/rand v1.0.6 h1:p51rkaDrYUdZPIRbQAujZmQelWg2ipAMts33A/tG7QE=
apigo.cc/go/rand v1.0.6/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
apigo.cc/go/redis v1.0.9 h1:5MnCchcDgoVnGHQn+KJF9PJXXRayK9nlZg+Q0lTnMoU=
apigo.cc/go/redis v1.0.9/go.mod h1:SVOD7iuUL/jxYEa28qObDQf4GY9UVSKjhM9vVj9TXLI=
apigo.cc/go/safe v1.0.7 h1:f0d+v9K2dHPyG5DNqhyddCmAmSiIqIfkPi/AMED/iQI=
apigo.cc/go/safe v1.0.7/go.mod h1:Hu7TVDWPe/I+nBZfYJH4mt+ROzG+rwk2D1zHTXj/2eE=
apigo.cc/go/shell v1.0.6 h1:RngaSMr2AkAFDl545A1Ln+D8ckqV2jknUp4PohDaLIA=
apigo.cc/go/shell v1.0.6/go.mod h1:X7Nozjd7oau4nvAJCI21vxrxfd4ZL5nE4C6eUsmi2Hc=
filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -29,8 +18,7 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw= github.com/go-sql-driver/mysql v1.10.0 h1:Q+1LV8DkHJvSYAdR83XzuhDaTykuDx0l6fkXxoWCWfw=
github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk= github.com/go-sql-driver/mysql v1.10.0/go.mod h1:M+cqaI7+xxXGG9swrdeUIoPG3Y3KCkF0pZej+SK+nWk=
github.com/gomodule/redigo v1.9.3 h1:dNPSXeXv6HCq2jdyWfjgmhBdqnR6PRO3m/G05nvpPC8= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
github.com/gomodule/redigo v1.9.3/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw=
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=