diff --git a/debug/db.go b/debug/db.go index ba01abe..d241a40 100644 --- a/debug/db.go +++ b/debug/db.go @@ -32,18 +32,10 @@ func (k KeyInfo) String() string { func ToKeyInfo(k []byte, sessionId string) (KeyInfo, error) { o := KeyInfo{} - b := []byte(sessionId) - - 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):] if o.Typ == visedb.DATATYPE_USERDATA { if len(k) == 0 { @@ -53,28 +45,18 @@ 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") - } - - sessionIdBytes := k[1:len(k)-2] - return ToKeyInfo(k, string(sessionIdBytes)) -} - func subTypToString(v storedb.DataTyp) string { return dbTypStr[v + visedb.DATATYPE_USERDATA + 1] } 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/debug/db_test.go b/debug/db_test.go index c8c4d30..4c89fa9 100644 --- a/debug/db_test.go +++ b/debug/db_test.go @@ -10,7 +10,6 @@ import ( func TestDebugDbSubKeyInfo(t *testing.T) { s := "foo" b := []byte{0x20} - b = append(b, []byte(s)...) b = append(b, []byte{0x00, 0x02}...) r, err := ToKeyInfo(b, s) if err != nil { @@ -56,7 +55,6 @@ func TestDebugDbKeyInfo(t *testing.T) { func TestDebugDbKeyInfoRestore(t *testing.T) { s := "bar" b := []byte{visedb.DATATYPE_USERDATA} - b = append(b, []byte(s)...) k := storedb.ToBytes(storedb.DATA_ACTIVE_SYM) b = append(b, k...) diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index d896da8..c1879bf 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -19,12 +19,13 @@ 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.ToKeyInfo(k, sessionId) if err != nil { return "", err } - s := fmt.Sprintf("%vValue: %v\n\n", o, string(v)) + s := fmt.Sprintf("%v\t%v\n", o.Label, string(v)) + return s, nil } @@ -36,18 +37,19 @@ func main() { var database string var engineDebug bool var err error + var first bool 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 +67,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 +81,13 @@ func main() { if k == nil { break } - r, err := formatItem(k, v) + if !first { + fmt.Printf("Session ID: %s\n---\n", sessionId) + first = true + } + 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) diff --git a/devtools/store/generate/main.go b/devtools/store/generate/main.go deleted file mode 100644 index bfcc483..0000000 --- a/devtools/store/generate/main.go +++ /dev/null @@ -1,86 +0,0 @@ -package main - -import ( - "context" - "crypto/sha1" - "flag" - "fmt" - "os" - "path" - - testdataloader "github.com/peteole/testdata-loader" - "git.defalsify.org/vise.git/logging" - "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/store" - storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" -) - -var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join("services", "registration") -) - -func main() { - config.LoadConfig() - - var connStr string - var sessionId string - var database string - var engineDebug bool - var err error - - flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", "", "connection string") - flag.BoolVar(&engineDebug, "d", false, "use engine debug output") - flag.Parse() - - if connStr != "" { - connStr = config.DbConn() - } - connData, err := storage.ToConnData(connStr) - if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) - os.Exit(1) - } - - logg.Infof("start command", "conn", connData) - - ctx := context.Background() - ctx = context.WithValue(ctx, "SessionId", sessionId) - ctx = context.WithValue(ctx, "Database", database) - - resourceDir := scriptDir - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) - - userDb, err := menuStorageService.GetUserdataDb(ctx) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } - userStore := store.UserDataStore{userDb} - - h := sha1.New() - h.Write([]byte(sessionId)) - address := h.Sum(nil) - addressString := fmt.Sprintf("%x", address) - - err = userStore.WriteEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY, []byte(addressString)) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } - - err = userStore.WriteEntry(ctx, addressString, storedb.DATA_PUBLIC_KEY_REVERSE, []byte(sessionId)) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } - - err = userDb.Close() - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } -} diff --git a/go.mod b/go.mod index 9148b5f..187953f 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.grassecon.net/grassrootseconomics/sarafu-vise go 1.23.4 require ( - git.defalsify.org/vise.git v0.2.3-0.20250115000535-e2d329b3f739 + git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05 git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63 diff --git a/go.sum b/go.sum index c450543..f45e963 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -git.defalsify.org/vise.git v0.2.3-0.20250115000535-e2d329b3f739 h1:w7pj1oh7jXrfajahVYU7m7AfHst4C6jNVzDVoaqJ7e8= -git.defalsify.org/vise.git v0.2.3-0.20250115000535-e2d329b3f739/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= +git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b h1:ac6OThj6nqQb3TUyXHqv/vQOQUQZ98XKpYTBHZFbxUI= +git.defalsify.org/vise.git v0.2.3-0.20250118155735-c1256156ed8b/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05 h1:BenzGx6aDHKDwE23/mWIFD2InYIXyzHroZWV3MF5WUk= git.grassecon.net/grassrootseconomics/common v0.0.0-20250113174703-6afccefd1f05/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f h1:FgccQi8vipX6dUt+GRiRDYHMR3UqC+plz73vw7y3fyU=