From 825c06c3bb6a9e44138ff68aabe59c8d1bf96950 Mon Sep 17 00:00:00 2001 From: lash Date: Fri, 17 Jan 2025 10:36:02 +0000 Subject: [PATCH] Rehabilitate dump tool --- debug/db.go | 26 +++++++++++++------------- debug/db_debug.go | 3 +++ devtools/store/dump/main.go | 18 ++++++++++-------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/debug/db.go b/debug/db.go index ba01abe..11dd48f 100644 --- a/debug/db.go +++ b/debug/db.go @@ -32,18 +32,17 @@ func (k KeyInfo) String() string { func ToKeyInfo(k []byte, sessionId string) (KeyInfo, error) { o := KeyInfo{} - b := []byte(sessionId) + //b := []byte(sessionId) - if len(k) <= len(b) { - return o, fmt.Errorf("storage key missing") - } +// if len(k) <= len(b) { +// return o, fmt.Errorf("storage key missing") +// } o.SessionId = sessionId - o.Typ = uint8(k[0]) k = k[1:] - o.SessionId = string(k[:len(b)]) - k = k[len(b):] + //o.SessionId = string(k[:len(b)]) + //k = k[len(b):] if o.Typ == visedb.DATATYPE_USERDATA { if len(k) == 0 { @@ -53,22 +52,23 @@ func ToKeyInfo(k []byte, sessionId string) (KeyInfo, error) { o.SubTyp = storedb.DataTyp(v) o.Label = subTypToString(o.SubTyp) k = k[2:] + if len(k) != 0 { + return o, fmt.Errorf("excess key information: %x", k) + } } else { o.Label = typToString(o.Typ) + k = k[2:] } - if len(k) != 0 { - return o, fmt.Errorf("excess key information") - } - + return o, nil } func FromKey(k []byte) (KeyInfo, error) { o := KeyInfo{} - if len(k) < 4 { - return o, fmt.Errorf("insufficient key length") + if len(k) < 3 { + return o, fmt.Errorf("insufficient key length: %d", len(k)) } sessionIdBytes := k[1:len(k)-2] diff --git a/debug/db_debug.go b/debug/db_debug.go index 13de8ac..03be181 100644 --- a/debug/db_debug.go +++ b/debug/db_debug.go @@ -29,6 +29,9 @@ func init() { dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_PUBLIC_KEY_REVERSE] = "public_key_reverse" dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_ACTIVE_DECIMAL] = "active decimal" dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_ACTIVE_ADDRESS] = "active address" + dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_INCORRECT_PIN_ATTEMPTS] = "incorrect pin attempts" + dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_SELECTED_LANGUAGE_CODE] = "selected language" + dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_INITIAL_LANGUAGE_CODE] = "initial language" dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_VOUCHER_SYMBOLS] = "voucher symbols" dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_VOUCHER_BALANCES] = "voucher balances" dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_VOUCHER_DECIMALS] = "voucher decimals" diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index d896da8..cd9304d 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -19,8 +19,9 @@ var ( scriptDir = path.Join("services", "registration") ) -func formatItem(k []byte, v []byte) (string, error) { - o, err := debug.FromKey(k) +func formatItem(k []byte, v []byte, sessionId string) (string, error) { + //o, err := debug.FromKey(k) + o, err := debug.ToKeyInfo(k, sessionId) if err != nil { return "", err } @@ -38,16 +39,16 @@ func main() { var err error flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", ".state", "connection string") + flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if connStr != "" { + if connStr == "" { connStr = config.DbConn() } connData, err := storage.ToConnData(connStr) if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "connstr err: %v\n", err) os.Exit(1) } @@ -65,9 +66,10 @@ func main() { fmt.Fprintf(os.Stderr, "get userdata db: %v\n", err.Error()) os.Exit(1) } + store.SetSession(sessionId) store.SetPrefix(db.DATATYPE_USERDATA) - d, err := store.Dump(ctx, []byte(sessionId)) + d, err := store.Dump(ctx, []byte("")) if err != nil { fmt.Fprintf(os.Stderr, "store dump fail: %v\n", err.Error()) os.Exit(1) @@ -78,9 +80,9 @@ func main() { if k == nil { break } - r, err := formatItem(k, v) + r, err := formatItem(append([]byte{db.DATATYPE_USERDATA}, k...), v, sessionId) if err != nil { - fmt.Fprintf(os.Stderr, "format db item error: %v", err) + fmt.Fprintf(os.Stderr, "format db item error: %v\n", err) os.Exit(1) } fmt.Printf(r)