diff --git a/args/lang.go b/args/lang.go index f9afdc9..68efe52 100644 --- a/args/lang.go +++ b/args/lang.go @@ -10,7 +10,7 @@ type LangVar struct { v []lang.Language } -func(lv *LangVar) Set(s string) error { +func (lv *LangVar) Set(s string) error { v, err := lang.LanguageFromCode(s) if err != nil { return err @@ -19,16 +19,14 @@ func(lv *LangVar) Set(s string) error { return err } -func(lv *LangVar) String() string { +func (lv *LangVar) String() string { var s []string - for _, v := range(lv.v) { + for _, v := range lv.v { s = append(s, v.Code) } return strings.Join(s, ",") } -func(lv *LangVar) Langs() []lang.Language { +func (lv *LangVar) Langs() []lang.Language { return lv.v } - - diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index fe24975..1d24358 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -12,18 +12,18 @@ import ( "syscall" "git.defalsify.org/vise.git/engine" - "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/lang" + "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - "git.grassecon.net/grassrootseconomics/visedriver/storage" "git.grassecon.net/grassrootseconomics/visedriver/request" - - at "git.grassecon.net/grassrootseconomics/visedriver-africastalking/africastalking" + "git.grassecon.net/grassrootseconomics/visedriver/storage" + "git.grassecon.net/grassrootseconomics/sarafu-vise/args" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" "git.grassecon.net/grassrootseconomics/sarafu-vise/services" + at "git.grassecon.net/grassrootseconomics/visedriver-africastalking/africastalking" ) var ( @@ -36,8 +36,7 @@ var ( func main() { config.LoadConfig() - var connStr string - var resourceDir string + override := config.NewOverride() var size uint var engineDebug bool var host string @@ -45,11 +44,14 @@ func main() { var err error var gettextDir string var langs args.LangVar + var resourceDir string - - flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") - flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.Host(), "http host") flag.UintVar(&port, "p", config.Port(), "http port") @@ -57,16 +59,18 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if connStr == "" { - connStr = config.DbConn() + if resourceDir != "" { + *override.ResourceConn = resourceDir + override.ResourceConnMode = storage.DBMODE_TEXT } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } - logg.Infof("start command", "build", build, "conn", connData, "resourcedir", resourceDir, "outputsize", size) + logg.Infof("start command", "build", build, "conn", conns, "outputsize", size) ctx := context.Background() ln, err := lang.LanguageFromCode(config.Language()) @@ -89,7 +93,7 @@ func main() { cfg.EngineDebug = true } - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) rs, err := menuStorageService.GetResource(ctx) if err != nil { fmt.Fprintf(os.Stderr, "menustorageservice: %v\n", err) @@ -101,7 +105,6 @@ func main() { fmt.Fprintf(os.Stderr, "userdatadb: %v\n", err) os.Exit(1) } - defer userdataStore.Close() dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -120,8 +123,8 @@ func main() { os.Exit(1) } - accountService := services.New(ctx, menuStorageService, connData) - + accountService := services.New(ctx, menuStorageService) + hl, err := lhs.GetHandler(accountService) if err != nil { fmt.Fprintf(os.Stderr, "httpaccountservice: %v\n", err) @@ -133,7 +136,6 @@ func main() { fmt.Fprintf(os.Stderr, "getstatestore: %v\n", err) os.Exit(1) } - defer stateStore.Close() rp := &at.ATRequestParser{} bsh := request.NewBaseRequestHandler(cfg, rs, stateStore, userdataStore, rp, hl) @@ -146,7 +148,10 @@ func main() { Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))), Handler: mux, } - s.RegisterOnShutdown(sh.Shutdown) + shutdownFunc := func() { + sh.Shutdown(ctx) + } + s.RegisterOnShutdown(shutdownFunc) cint := make(chan os.Signal) cterm := make(chan os.Signal) diff --git a/cmd/async/main.go b/cmd/async/main.go index e68efe8..9feac12 100644 --- a/cmd/async/main.go +++ b/cmd/async/main.go @@ -14,12 +14,12 @@ import ( "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" - "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/visedriver/request" - "git.grassecon.net/grassrootseconomics/sarafu-vise/services" "git.grassecon.net/grassrootseconomics/sarafu-vise/args" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" + "git.grassecon.net/grassrootseconomics/sarafu-vise/services" + "git.grassecon.net/grassrootseconomics/visedriver/request" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -44,9 +44,8 @@ func (p *asyncRequestParser) GetInput(r any) ([]byte, error) { func main() { config.LoadConfig() - var connStr string + override := config.NewOverride() var sessionId string - var resourceDir string var size uint var engineDebug bool var host string @@ -54,10 +53,15 @@ func main() { var err error var gettextDir string var langs args.LangVar + var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") - flag.StringVar(&connStr, "c", "", "connection string") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") + flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.Host(), "http host") @@ -66,16 +70,18 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if connStr == "" { - connStr = config.DbConn() + if resourceDir != "" { + *override.ResourceConn = resourceDir + override.ResourceConnMode = storage.DBMODE_TEXT } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } - logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId) + logg.Infof("start command", "conn", conns, "outputsize", size, "sessionId", sessionId) ctx := context.Background() @@ -99,7 +105,7 @@ func main() { cfg.EngineDebug = true } - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) @@ -116,7 +122,7 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer userdataStore.Close() + //defer userdataStore.Close(ctx) dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -126,7 +132,7 @@ func main() { lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs) lhs.SetDataStore(&userdataStore) - accountService := services.New(ctx, menuStorageService, connData) + accountService := services.New(ctx, menuStorageService) hl, err := lhs.GetHandler(accountService) if err != nil { @@ -139,7 +145,7 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer stateStore.Close() + //defer stateStore.Close(ctx) rp := &asyncRequestParser{ sessionId: sessionId, @@ -161,7 +167,7 @@ func main() { case _ = <-cint: case _ = <-cterm: } - sh.Shutdown() + sh.Shutdown(ctx) }() for true { @@ -177,7 +183,7 @@ func main() { fmt.Errorf("error in output: %v", err) os.Exit(1) } - rqs, err = sh.Reset(rqs) + rqs, err = sh.Reset(ctx, rqs) if err != nil { logg.ErrorCtxf(ctx, "error in reset: %v", "err", err) fmt.Errorf("error in reset: %v", err) diff --git a/cmd/http/main.go b/cmd/http/main.go index 10f0874..ec4b95b 100644 --- a/cmd/http/main.go +++ b/cmd/http/main.go @@ -17,13 +17,13 @@ import ( "git.defalsify.org/vise.git/resource" "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - httprequest "git.grassecon.net/grassrootseconomics/visedriver/request/http" "git.grassecon.net/grassrootseconomics/visedriver/request" + httprequest "git.grassecon.net/grassrootseconomics/visedriver/request/http" "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/services" "git.grassecon.net/grassrootseconomics/sarafu-vise/args" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" + "git.grassecon.net/grassrootseconomics/sarafu-vise/services" ) var ( @@ -35,8 +35,7 @@ var ( func main() { config.LoadConfig() - var connStr string - var resourceDir string + override := config.NewOverride() var size uint var engineDebug bool var host string @@ -44,9 +43,14 @@ func main() { var err error var gettextDir string var langs args.LangVar + var resourceDir string + + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") - flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") - flag.StringVar(&connStr, "c", "", "connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.Host(), "http host") @@ -55,16 +59,18 @@ func main() { flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if connStr == "" { - connStr = config.DbConn() + if resourceDir != "" { + *override.ResourceConn = resourceDir + override.ResourceConnMode = storage.DBMODE_TEXT } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } - logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size) + logg.Infof("start command", "conn", conns, "outputsize", size) ctx := context.Background() @@ -88,7 +94,7 @@ func main() { cfg.EngineDebug = true } - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) rs, err := menuStorageService.GetResource(ctx) if err != nil { @@ -101,7 +107,6 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer userdataStore.Close() dbResource, ok := rs.(*resource.DbResource) if !ok { @@ -116,8 +121,8 @@ func main() { os.Exit(1) } - accountService := services.New(ctx, menuStorageService, connData) - + accountService := services.New(ctx, menuStorageService) + hl, err := lhs.GetHandler(accountService) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) @@ -129,7 +134,6 @@ func main() { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) } - defer stateStore.Close() //accountService := services.New(ctx, menuStorageService, connData) @@ -140,7 +144,10 @@ func main() { Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))), Handler: sh, } - s.RegisterOnShutdown(sh.Shutdown) + shutdownFunc := func() { + sh.Shutdown(ctx) + } + s.RegisterOnShutdown(shutdownFunc) cint := make(chan os.Signal) cterm := make(chan os.Signal) diff --git a/cmd/main.go b/cmd/main.go index 81aad6f..7f83863 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -5,17 +5,19 @@ import ( "flag" "fmt" "os" + "os/signal" "path" + "syscall" "git.defalsify.org/vise.git/engine" + "git.defalsify.org/vise.git/lang" "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" - "git.defalsify.org/vise.git/lang" - "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/services" "git.grassecon.net/grassrootseconomics/sarafu-vise/args" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" + "git.grassecon.net/grassrootseconomics/sarafu-vise/services" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -27,34 +29,33 @@ var ( func main() { config.LoadConfig() - var connStr string + override := config.NewOverride() var size uint var sessionId string var engineDebug bool - var resourceDir string var err error var gettextDir string var langs args.LangVar - flag.StringVar(&resourceDir, "resourcedir", scriptDir, "resource dir") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", "", "connection string") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory") flag.Var(&langs, "language", "add symbol resolution for language") flag.Parse() - if connStr == "" { - connStr = config.DbConn() - } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v\n", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } - logg.Infof("start command", "conn", connData, "outputsize", size) + logg.Infof("start command", "conn", conns, "outputsize", size) if len(langs.Langs()) == 0 { langs.Set(config.Language()) @@ -80,12 +81,12 @@ func main() { MenuSeparator: menuSeparator, } - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) if err != nil { fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err) os.Exit(1) } - + if gettextDir != "" { menuStorageService = menuStorageService.WithGettext(gettextDir, langs.Langs()) } @@ -122,7 +123,7 @@ func main() { os.Exit(1) } - accountService := services.New(ctx, menuStorageService, connData) + accountService := services.New(ctx, menuStorageService) hl, err := lhs.GetHandler(accountService) if err != nil { fmt.Fprintf(os.Stderr, "get accounts service handler: %v\n", err) @@ -135,6 +136,21 @@ func main() { en = en.WithDebug(nil) } + cint := make(chan os.Signal) + cterm := make(chan os.Signal) + signal.Notify(cint, os.Interrupt, syscall.SIGINT) + signal.Notify(cterm, os.Interrupt, syscall.SIGTERM) + go func() { + var s os.Signal + select { + case s = <-cterm: + case s = <-cint: + } + logg.InfoCtxf(ctx, "stopping on signal", "sig", s) + en.Finish(ctx) + os.Exit(0) + }() + err = engine.Loop(ctx, en, os.Stdin, os.Stdout, nil) if err != nil { fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) diff --git a/cmd/ssh/main.go b/cmd/ssh/main.go index c04252b..86bcf4b 100644 --- a/cmd/ssh/main.go +++ b/cmd/ssh/main.go @@ -31,34 +31,30 @@ var ( func main() { config.LoadConfig() - var connStr string + override := config.NewOverride() var authConnStr string - var resourceDir string var size uint var engineDebug bool var stateDebug bool var host string var port uint - flag.StringVar(&connStr, "c", "", "connection string") - flag.StringVar(&authConnStr, "authdb", "", "auth connection string") - flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.UintVar(&size, "s", 160, "max size of output") flag.StringVar(&host, "h", config.HostSSH(), "socket host") flag.UintVar(&port, "p", config.PortSSH(), "socket port") flag.Parse() - if connStr == "" { - connStr = config.DbConn() - } - if authConnStr == "" { - authConnStr = connStr - } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } + authConnData, err := storage.ToConnData(authConnStr) if err != nil { fmt.Fprintf(os.Stderr, "auth connstr err: %v", err) @@ -79,7 +75,7 @@ func main() { logg.WarnCtxf(ctx, "!!!!! Do not expose to internet and only use with tunnel!") logg.WarnCtxf(ctx, "!!!!! (See ssh -L <...>)") - logg.Infof("start command", "conn", connData, "authconn", authConnData, "resourcedir", resourceDir, "outputsize", size, "keyfile", sshKeyFile, "host", host, "port", port) + logg.Infof("start command", "conn", conns, "authconn", authConnData, "outputsize", size, "keyfile", sshKeyFile, "host", host, "port", port) pfp := path.Join(scriptDir, "pp.csv") @@ -102,7 +98,7 @@ func main() { } defer func() { logg.TraceCtxf(ctx, "shutdown auth key store reached") - err = authKeyStore.Close() + err = authKeyStore.Close(ctx) if err != nil { logg.ErrorCtxf(ctx, "keystore close error", "err", err) } @@ -114,14 +110,13 @@ func main() { signal.Notify(cterm, os.Interrupt, syscall.SIGTERM) runner := &ssh.SshRunner{ - Cfg: cfg, - Debug: engineDebug, - FlagFile: pfp, - Conn: connData, - ResourceDir: resourceDir, - SrvKeyFile: sshKeyFile, - Host: host, - Port: port, + Cfg: cfg, + Debug: engineDebug, + FlagFile: pfp, + Conn: conns, + SrvKeyFile: sshKeyFile, + Host: host, + Port: port, } go func() { select { diff --git a/cmd/ssh/sshkey/main.go b/cmd/ssh/sshkey/main.go index 3aac78c..b05fe06 100644 --- a/cmd/ssh/sshkey/main.go +++ b/cmd/ssh/sshkey/main.go @@ -34,7 +34,7 @@ func main() { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } - defer store.Close() + defer store.Close(ctx) err = store.AddFromFile(ctx, sshKeyFile, sessionId) if err != nil { diff --git a/config/args.go b/config/args.go new file mode 100644 index 0000000..82f7c4c --- /dev/null +++ b/config/args.go @@ -0,0 +1,28 @@ +package config + +import ( + viseconfig "git.grassecon.net/grassrootseconomics/visedriver/config" + "git.grassecon.net/grassrootseconomics/visedriver/storage" +) + +func NewOverride() *viseconfig.Override { + var a string + var b string + var c string + var d string + o := &viseconfig.Override{ + DbConn: &a, + StateConn: &b, + StateConnMode: storage.DBMODE_TEXT, + ResourceConn: &c, + ResourceConnMode: storage.DBMODE_TEXT, + UserConn: &d, + UserConnMode: storage.DBMODE_BINARY, + } + return o +} + +func Apply(o *viseconfig.Override) error { + viseconfig.ApplyConn(o) + return nil +} diff --git a/config/config.go b/config/config.go index c1ad1d8..863e418 100644 --- a/config/config.go +++ b/config/config.go @@ -8,19 +8,29 @@ import ( "git.grassecon.net/grassrootseconomics/visedriver/env" ) -func init() { - env.LoadEnvVariables() +var ( + GetConns = viseconfig.GetConns + EnvPath string +) + +func loadEnv() { + if EnvPath == "" { + env.LoadEnvVariables() + } else { + env.LoadEnvVariablesPath(EnvPath) + } } const ( defaultSSHHost string = "127.0.0.1" defaultSSHPort uint = 7122 defaultHTTPHost string = "127.0.0.1" - defaultHTTPPort uint = 7123 + defaultHTTPPort uint = 7123 defaultDomain = "sarafu.local" ) func LoadConfig() error { + loadEnv() err := viseconfig.LoadConfig() if err != nil { return err @@ -42,9 +52,6 @@ func SearchDomains() []string { return ParsedDomains } -func DbConn() string { - return viseconfig.DbConn -} func Language() string { return viseconfig.DefaultLanguage diff --git a/debug/db.go b/debug/db.go index ba01abe..15e54d1 100644 --- a/debug/db.go +++ b/debug/db.go @@ -1,11 +1,11 @@ package debug import ( - "fmt" "encoding/binary" + "fmt" - storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" visedb "git.defalsify.org/vise.git/db" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" ) var ( @@ -13,10 +13,10 @@ var ( ) type KeyInfo struct { - SessionId string - Typ uint8 - SubTyp storedb.DataTyp - Label string + SessionId string + Typ uint8 + SubTyp storedb.DataTyp + Label string Description string } @@ -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,30 +45,19 @@ 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) - } - - if len(k) != 0 { - return o, fmt.Errorf("excess key information") + k = k[2:] } 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] + return dbTypStr[v+visedb.DATATYPE_USERDATA+1] } func typToString(v uint8) string { diff --git a/debug/db_debug.go b/debug/db_debug.go index 13de8ac..f781d9f 100644 --- a/debug/db_debug.go +++ b/debug/db_debug.go @@ -1,3 +1,4 @@ +//go:build debugdb // +build debugdb package debug @@ -11,34 +12,37 @@ import ( func init() { DebugCap |= 1 dbTypStr[db.DATATYPE_STATE] = "internal state" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TRACKING_ID] = "tracking id" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_PUBLIC_KEY] = "public key" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_ACCOUNT_PIN] = "account pin" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_FIRST_NAME] = "first name" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_FAMILY_NAME] = "family name" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_YOB] = "year of birth" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_LOCATION] = "location" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_GENDER] = "gender" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_OFFERINGS] = "offerings" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_RECIPIENT] = "recipient" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_AMOUNT] = "amount" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TEMPORARY_VALUE] = "temporary value" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_ACTIVE_SYM] = "active sym" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_ACTIVE_BAL] = "active bal" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_BLOCKED_NUMBER] = "blocked number" - 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_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" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_VOUCHER_ADDRESSES] = "voucher addresses" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_SENDERS] = "tx senders" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_RECIPIENTS] = "tx recipients" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_VALUES] = "tx values" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_ADDRESSES] = "tx addresses" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_HASHES] = "tx hashes" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_DATES] = "tx dates" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_SYMBOLS] = "tx symbols" - dbTypStr[db.DATATYPE_USERDATA + 1 + storedb.DATA_TX_DECIMALS] = "tx decimals" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TRACKING_ID] = "tracking id" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_PUBLIC_KEY] = "public key" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_ACCOUNT_PIN] = "account pin" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_FIRST_NAME] = "first name" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_FAMILY_NAME] = "family name" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_YOB] = "year of birth" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_LOCATION] = "location" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_GENDER] = "gender" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_OFFERINGS] = "offerings" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_RECIPIENT] = "recipient" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_AMOUNT] = "amount" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TEMPORARY_VALUE] = "temporary value" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_ACTIVE_SYM] = "active sym" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_ACTIVE_BAL] = "active bal" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_BLOCKED_NUMBER] = "blocked number" + 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" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_VOUCHER_ADDRESSES] = "voucher addresses" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_SENDERS] = "tx senders" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_RECIPIENTS] = "tx recipients" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_VALUES] = "tx values" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_ADDRESSES] = "tx addresses" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_HASHES] = "tx hashes" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_DATES] = "tx dates" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_SYMBOLS] = "tx symbols" + dbTypStr[db.DATATYPE_USERDATA+1+storedb.DATA_TX_DECIMALS] = "tx decimals" } diff --git a/debug/db_test.go b/debug/db_test.go index c8c4d30..c7b8930 100644 --- a/debug/db_test.go +++ b/debug/db_test.go @@ -3,14 +3,13 @@ package debug import ( "testing" - storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" visedb "git.defalsify.org/vise.git/db" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" ) 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 { @@ -25,7 +24,7 @@ func TestDebugDbSubKeyInfo(t *testing.T) { if r.SubTyp != 2 { t.Fatalf("expected 2, got %d", r.SubTyp) } - if DebugCap & 1 > 0 { + if DebugCap&1 > 0 { if r.Label != "tracking id" { t.Fatalf("expected 'tracking id', got '%s'", r.Label) } @@ -46,7 +45,7 @@ func TestDebugDbKeyInfo(t *testing.T) { if r.Typ != 16 { t.Fatalf("expected 16, got %d", r.Typ) } - if DebugCap & 1 > 0 { + if DebugCap&1 > 0 { if r.Label != "internal state" { t.Fatalf("expected 'internal_state', got '%s'", r.Label) } @@ -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...) @@ -70,7 +68,7 @@ func TestDebugDbKeyInfoRestore(t *testing.T) { if r.Typ != 32 { t.Fatalf("expected 32, got %d", r.Typ) } - if DebugCap & 1 > 0 { + if DebugCap&1 > 0 { if r.Label != "active sym" { t.Fatalf("expected 'active sym', got '%s'", r.Label) } diff --git a/devtools/admin/main.go b/devtools/admin/main.go index 3ef0466..4e93ce8 100644 --- a/devtools/admin/main.go +++ b/devtools/admin/main.go @@ -10,35 +10,43 @@ import ( "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/internal/cmd" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" + "git.grassecon.net/grassrootseconomics/sarafu-vise/internal/cmd" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( - logg = logging.NewVanilla().WithContextKey("SessionId") - scriptDir = path.Join("services", "registration") + logg = logging.NewVanilla().WithContextKey("SessionId") + scriptDir = path.Join("services", "registration") ) func main() { config.LoadConfig() + override := config.NewOverride() var sessionId string - var connStr string + var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", "", "connection string") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") flag.Parse() - - if connStr == "" { - connStr = config.DbConn() + if resourceDir != "" { + *override.ResourceConn = resourceDir + override.ResourceConnMode = storage.DBMODE_TEXT } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v\n", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } + ctx := context.Background() ctx = context.WithValue(ctx, "SessionId", sessionId) @@ -49,16 +57,16 @@ func main() { os.Exit(1) } - x := cmd.NewCmd(connData, sessionId, flagParser) + x := cmd.NewCmd(sessionId, flagParser) err = x.Parse(flag.Args()) if err != nil { fmt.Fprintf(os.Stderr, "cmd parse fail: %v\n", err) os.Exit(1) } - logg.Infof("start command", "conn", connData, "subcmd", x) + logg.Infof("start command", "conn", conns, "subcmd", x) - menuStorageService := storage.NewMenuStorageService(connData, "") + menuStorageService := storage.NewMenuStorageService(conns) if err != nil { fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err) os.Exit(1) diff --git a/devtools/lang/main.go b/devtools/lang/main.go index 6023927..4dd3090 100644 --- a/devtools/lang/main.go +++ b/devtools/lang/main.go @@ -8,18 +8,17 @@ import ( "path" "strings" - "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/lang" + "git.defalsify.org/vise.git/logging" "git.grassecon.net/grassrootseconomics/visedriver/config" ) const ( - changeHeadSrc = `LOAD reset_account_authorized 0 LOAD reset_incorrect 0 CATCH incorrect_pin flag_incorrect_pin 1 CATCH pin_entry flag_account_authorized 0 -` +` selectSrc = `LOAD set_language 6 RELOAD set_language @@ -29,8 +28,8 @@ MOVE language_changed ) var ( - logg = logging.NewVanilla() - mouts string + logg = logging.NewVanilla() + mouts string incmps string ) @@ -63,7 +62,7 @@ func main() { } logg.Tracef("using languages", "lang", config.Languages) - for i, v := range(config.Languages) { + for i, v := range config.Languages { ln, err := lang.LanguageFromCode(v) if err != nil { fmt.Fprintf(os.Stderr, "error parsing language: %s\n", v) @@ -76,7 +75,7 @@ func main() { incmps += fmt.Sprintf("INCMP %s %v\n", v, n) p := path.Join(srcDir, v) - w, err := os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600) + w, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) if err != nil { fmt.Fprintf(os.Stderr, "failed open language set template output: %v\n", err) os.Exit(1) @@ -93,7 +92,7 @@ func main() { src += "INCMP . *\n" p := path.Join(srcDir, "select_language.vis") - w, err := os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600) + w, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) if err != nil { fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err) os.Exit(1) @@ -107,7 +106,7 @@ func main() { src = changeHeadSrc + src p = path.Join(srcDir, "change_language.vis") - w, err = os.OpenFile(p, os.O_WRONLY | os.O_CREATE | os.O_EXCL, 0600) + w, err = os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) if err != nil { fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err) os.Exit(1) diff --git a/devtools/store/dump/main.go b/devtools/store/dump/main.go index d896da8..f58efce 100644 --- a/devtools/store/dump/main.go +++ b/devtools/store/dump/main.go @@ -7,11 +7,11 @@ import ( "os" "path" - "git.grassecon.net/grassrootseconomics/sarafu-vise/config" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/debug" "git.defalsify.org/vise.git/db" "git.defalsify.org/vise.git/logging" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" + "git.grassecon.net/grassrootseconomics/sarafu-vise/debug" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -19,55 +19,64 @@ 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 } func main() { config.LoadConfig() - var connStr string + override := config.NewOverride() var sessionId string var database string var engineDebug bool var err error + var first bool + var resourceDir string flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") - flag.StringVar(&connStr, "c", ".state", "connection string") + flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") + flag.StringVar(override.ResourceConn, "resource", "?", "resource data directory") + flag.StringVar(&resourceDir, "resource-dir", "", "resource data directory. If set, overrides --resource to create a non-binary fsdb for the given path.") + flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string") + flag.StringVar(override.StateConn, "state", "?", "state store connection string") flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.Parse() - if connStr != "" { - connStr = config.DbConn() + if resourceDir != "" { + *override.ResourceConn = resourceDir + override.ResourceConnMode = storage.DBMODE_TEXT } - connData, err := storage.ToConnData(connStr) + config.Apply(override) + conns, err := config.GetConns() if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) + fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) os.Exit(1) } - logg.Infof("start command", "conn", connData) + logg.Infof("start command", "conn", conns) ctx := context.Background() ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "Database", database) - resourceDir := scriptDir - menuStorageService := storage.NewMenuStorageService(connData, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) store, err := menuStorageService.GetUserdataDb(ctx) if err != nil { 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,15 +87,19 @@ 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) } - err = store.Close() + err = store.Close(ctx) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) 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..4fb3c50 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module git.grassecon.net/grassrootseconomics/sarafu-vise go 1.23.4 require ( - git.defalsify.org/vise.git v0.2.3-0.20250115000535-e2d329b3f739 - 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 - git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d + git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 + git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d + git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 + git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 + git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 github.com/alecthomas/assert/v2 v2.2.2 github.com/gofrs/uuid v4.4.0+incompatible github.com/grassrootseconomics/ussd-data-service v1.2.0-beta diff --git a/go.sum b/go.sum index c450543..f3aa2bb 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ -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.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= -git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250115072214-bca7c5de969f/go.mod h1:tbA4whUGMUIDgQVdIW0sxWPuuXOvZRSny5zeku5hX4k= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63 h1:bX7klKZpX+ZZu1LKbtOXDAhV/KK0YwExehiIi0jusAM= -git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250115003256-c0534ede1b63/go.mod h1:Syw9TZyigPAM7t9FvicOm36iUnidt45f0SxzT2JniQ8= -git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d h1:q/NO1rEgK3pia32D/tCq5hXfEuJp84COZRwceFvy/MM= -git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250113103030-f0b2056fd87d/go.mod h1:AH15xABcvaJr1TCGlih3oGSuwWC0E5IdbHQwuu+E1KI= +git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9 h1:sPcqXQcywxA8W3W+9qQncLPmsrgqTIlec7vmD4/7vyA= +git.defalsify.org/vise.git v0.2.3-0.20250120121301-10739fb4a8c9/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck= +git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d h1:5mzLas+jxTUtusOKx4XvU+n2QvrV/mH17MnJRy46siQ= +git.grassecon.net/grassrootseconomics/common v0.0.0-20250121134736-ba8cbbccea7d/go.mod h1:wgQJZGIS6QuNLHqDhcsvehsbn5PvgV7aziRebMnJi60= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805 h1:deGnqf4YCsbxhXgjFEjYjTUCvciLEmI26T9IysRsQXY= +git.grassecon.net/grassrootseconomics/sarafu-api v0.0.0-20250121135150-e0b539809805/go.mod h1:9bc3d//Qqm11hz7GYRdQc1Uan+0GJIOpvRBbv8cHMu8= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2 h1:ON77G5K0JNuwPb5JT/hRfF6G6+xstlBQgEIEzWydnhg= +git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250122123424-6749c632b0a2/go.mod h1:pjKp9L/ZsWW3kMB0UoIl1yv9TBIuU33mn9Aghxp7vGk= +git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84 h1:VoBmqsjlRdz+IPbtKsAkc1IrMepjR+QlesZT31Jokrk= +git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250121135340-ca97e23e8c84/go.mod h1:DpibtYpnT3nG4Kn556hRAkdu4+CtiI/6MbnQHal51mQ= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g= diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index b40dd07..d4aed55 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -275,7 +275,7 @@ func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input } pinAttemptsValue, _ := strconv.ParseUint(string(currentWrongPinAttempts), 0, 64) - + if pinAttemptsValue == 0 { res.FlagReset = append(res.FlagReset, flag_account_blocked) return res, nil diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index e1f45ef..0d3b9ef 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -54,7 +54,7 @@ func InitializeTestStore(t *testing.T) (context.Context, *store.UserDataStore) { store := &store.UserDataStore{Db: db} t.Cleanup(func() { - db.Close() // Ensure the DB is closed after each test + db.Close(ctx) // Ensure the DB is closed after each test }) return ctx, store diff --git a/handlers/event/custodial.go b/handlers/event/custodial.go index bcab999..b01b93a 100644 --- a/handlers/event/custodial.go +++ b/handlers/event/custodial.go @@ -35,13 +35,6 @@ func (eu *EventsUpdater) HandleCustodialRegistration(ctx context.Context, ev *ap if err != nil { return err } -// err = pe.Load(identity.SessionId) -// if err != nil { -// return err -// } -// st := pe.GetState() -// st.SetFlag(accountCreatedFlag) -// return pe.Save(identity.SessionId) logg.DebugCtxf(ctx, "received custodial registration event", "identity", identity) return nil } diff --git a/handlers/event/event.go b/handlers/event/event.go index bacda01..e654820 100644 --- a/handlers/event/event.go +++ b/handlers/event/event.go @@ -4,12 +4,12 @@ import ( "context" "fmt" - "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/logging" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/store" - "git.grassecon.net/grassrootseconomics/sarafu-api/remote" + "git.defalsify.org/vise.git/persist" apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event" + "git.grassecon.net/grassrootseconomics/sarafu-api/remote" + "git.grassecon.net/grassrootseconomics/sarafu-vise/store" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -17,9 +17,9 @@ var ( ) type EventsUpdater struct { - api remote.AccountService + api remote.AccountService formatFunc func(string, int, any) string - store storage.StorageService + store storage.StorageService } func NewEventsUpdater(api remote.AccountService, store storage.StorageService) *EventsUpdater { diff --git a/handlers/event/token.go b/handlers/event/token.go index ef85800..713dab7 100644 --- a/handlers/event/token.go +++ b/handlers/event/token.go @@ -6,13 +6,13 @@ import ( "strings" "git.defalsify.org/vise.git/db" - "git.grassecon.net/grassrootseconomics/sarafu-vise/store" - storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" "git.grassecon.net/grassrootseconomics/common/identity" apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event" + "git.grassecon.net/grassrootseconomics/sarafu-vise/store" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" ) -// execute all +// execute all func (eu *EventsUpdater) updateToken(ctx context.Context, identity identity.Identity, userStore *store.UserDataStore, tokenAddress string) error { err := eu.updateTokenList(ctx, identity, userStore) if err != nil { @@ -47,7 +47,6 @@ func (eu *EventsUpdater) updateToken(ctx context.Context, identity identity.Iden return nil } - // set default token to given symbol. func (eu *EventsUpdater) updateDefaultToken(ctx context.Context, identity identity.Identity, userStore *store.UserDataStore, activeSym string) error { pfxDb := toPrefixDb(userStore, identity.SessionId) @@ -59,7 +58,6 @@ func (eu *EventsUpdater) updateDefaultToken(ctx context.Context, identity identi return store.UpdateVoucherData(ctx, userStore, identity.SessionId, tokenData) } - // handle token transfer. // // if from and to are NOT the same, handle code will be executed once for each side of the transfer. @@ -189,7 +187,7 @@ func (eu *EventsUpdater) updateTokenTransferList(ctx context.Context, identity i return err } - for i, tx := range(txs) { + for i, tx := range txs { r = append(r, eu.formatFunc(apievent.EventTokenTransferTag, i, tx)) } diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 1ebfd11..ac286c1 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -5,8 +5,8 @@ import ( "fmt" "git.defalsify.org/vise.git/logging" - "git.grassecon.net/grassrootseconomics/visedriver/storage" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/application" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -14,18 +14,17 @@ var ( ) type Cmd struct { - sessionId string - conn storage.ConnData + sessionId string + conn storage.ConnData flagParser *application.FlagManager - cmd int - enable bool - exec func(ctx context.Context, ss storage.StorageService) error + cmd int + enable bool + exec func(ctx context.Context, ss storage.StorageService) error } -func NewCmd(conn storage.ConnData, sessionId string, flagParser *application.FlagManager) *Cmd { +func NewCmd(sessionId string, flagParser *application.FlagManager) *Cmd { return &Cmd{ - conn: conn, - sessionId: sessionId, + sessionId: sessionId, flagParser: flagParser, } } @@ -95,5 +94,3 @@ func (c *Cmd) Parse(args []string) error { return fmt.Errorf("unknown subcommand: %s", cmd) } - - diff --git a/menutraversal_test/menu_traversal_test.go b/menutraversal_test/menu_traversal_test.go index 3b546ae..7d9e4f0 100644 --- a/menutraversal_test/menu_traversal_test.go +++ b/menutraversal_test/menu_traversal_test.go @@ -9,12 +9,14 @@ import ( "regexp" "testing" - "github.com/gofrs/uuid" - "git.grassecon.net/grassrootseconomics/visedriver/testutil/driver" + "git.defalsify.org/vise.git/logging" "git.grassecon.net/grassrootseconomics/sarafu-vise/testutil" + "git.grassecon.net/grassrootseconomics/visedriver/testutil/driver" + "github.com/gofrs/uuid" ) var ( + logg = logging.NewVanilla().WithDomain("menutraversaltest") testData = driver.ReadData() sessionID string src = rand.NewSource(42) @@ -22,9 +24,6 @@ var ( ) var groupTestFile = flag.String("test-file", "group_test.json", "The test file to use for running the group tests") -var database = flag.String("db", "gdbm", "Specify the database (gdbm or postgres)") -var connStr = flag.String("conn", ".test_state", "connection string") -var dbSchema = flag.String("schema", "test", "Specify the database schema (default test)") func GenerateSessionId() string { uu := uuid.NewGenWithOptions(uuid.WithRandomReader(g)) @@ -80,12 +79,7 @@ func extractSendAmount(response []byte) string { } func TestMain(m *testing.M) { - // Parse the flags - flag.Parse() sessionID = GenerateSessionId() - // set the db - testutil.SetDatabase(*database, *connStr, *dbSchema) - // Cleanup the db after tests defer testutil.CleanDatabase() @@ -100,7 +94,8 @@ func TestAccountCreationSuccessful(t *testing.T) { for _, session := range sessions { groups := driver.FilterGroupsByName(session.Groups, "account_creation_successful") for _, group := range groups { - for _, step := range group.Steps { + for i, step := range group.Steps { + logg.TraceCtxf(ctx, "executing step", "i", i, "step", step) cont, err := en.Exec(ctx, []byte(step.Input)) if err != nil { t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) @@ -142,7 +137,8 @@ func TestAccountRegistrationRejectTerms(t *testing.T) { for _, session := range sessions { groups := driver.FilterGroupsByName(session.Groups, "account_creation_reject_terms") for _, group := range groups { - for _, step := range group.Steps { + for i, step := range group.Steps { + logg.TraceCtxf(ctx, "executing step", "i", i, "step", step) cont, err := en.Exec(ctx, []byte(step.Input)) if err != nil { t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) @@ -177,7 +173,8 @@ func TestMainMenuHelp(t *testing.T) { for _, session := range sessions { groups := driver.FilterGroupsByName(session.Groups, "main_menu_help") for _, group := range groups { - for _, step := range group.Steps { + for i, step := range group.Steps { + logg.TraceCtxf(ctx, "executing step", "i", i, "step", step) cont, err := en.Exec(ctx, []byte(step.Input)) if err != nil { t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) diff --git a/profile/profile.go b/profile/profile.go index 1804d97..f6a3e5d 100644 --- a/profile/profile.go +++ b/profile/profile.go @@ -12,7 +12,7 @@ func (p *Profile) InsertOrShift(index int, value string) { for len(p.ProfileItems) < index { p.ProfileItems = append(p.ProfileItems, "0") } - p.ProfileItems = append(p.ProfileItems, "0") + p.ProfileItems = append(p.ProfileItems, "0") p.ProfileItems[index] = value } } diff --git a/services/local.go b/services/local.go index e79c8fb..0101142 100644 --- a/services/local.go +++ b/services/local.go @@ -1,16 +1,17 @@ +//go:build !online // +build !online package services import ( - "fmt" "context" + "fmt" - "git.grassecon.net/grassrootseconomics/visedriver/storage" devremote "git.grassecon.net/grassrootseconomics/sarafu-api/dev" - "git.grassecon.net/grassrootseconomics/sarafu-api/remote" apievent "git.grassecon.net/grassrootseconomics/sarafu-api/event" + "git.grassecon.net/grassrootseconomics/sarafu-api/remote" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers/event" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) type localEmitter struct { @@ -37,7 +38,7 @@ func (d *localEmitter) emit(ctx context.Context, msg apievent.Msg) error { return err } -func New(ctx context.Context, storageService storage.StorageService, conn storage.ConnData) remote.AccountService { +func New(ctx context.Context, storageService storage.StorageService) remote.AccountService { svc := devremote.NewDevAccountService(ctx, storageService) svc = svc.WithAutoVoucher(ctx, "FOO", 42) eu := event.NewEventsUpdater(svc, storageService) diff --git a/services/registration/Makefile b/services/registration/Makefile index 80bbba2..66b64a1 100644 --- a/services/registration/Makefile +++ b/services/registration/Makefile @@ -4,8 +4,8 @@ TXTS = $(wildcard ./*.txt.orig) VISE_PATH := ../../go-vise # Rule to build .bin files from .vis files -%.vis: - go run $(VISE_PATH)/dev/asm/main.go -f pp.csv $(basename $@).vis > $(basename $@).bin +%.vis: buildasm + ./vise-asm -f pp.csv $(basename $@).vis > $(basename $@).bin @echo "Built $(basename $@).bin from $(basename $@).vis" # Rule to copy .orig files to .txt @@ -19,5 +19,10 @@ all: $(INPUTS) $(TXTS) clean: rm -vf *.bin + rm -vf ./vise-asm + +buildasm: + go build -v -o ./vise-asm $(VISE_PATH)/dev/asm/main.go + .PHONY: clean diff --git a/services/registration/_catch.bin b/services/registration/_catch.bin deleted file mode 100644 index 549c577..0000000 Binary files a/services/registration/_catch.bin and /dev/null differ diff --git a/services/registration/account_creation.bin b/services/registration/account_creation.bin deleted file mode 100644 index 1bf6995..0000000 Binary files a/services/registration/account_creation.bin and /dev/null differ diff --git a/services/registration/account_creation_failed.bin b/services/registration/account_creation_failed.bin deleted file mode 100644 index 2505996..0000000 Binary files a/services/registration/account_creation_failed.bin and /dev/null differ diff --git a/services/registration/account_pending.bin b/services/registration/account_pending.bin deleted file mode 100644 index 90b810c..0000000 Binary files a/services/registration/account_pending.bin and /dev/null differ diff --git a/services/registration/address.bin b/services/registration/address.bin deleted file mode 100644 index 60cc03b..0000000 Binary files a/services/registration/address.bin and /dev/null differ diff --git a/services/registration/amount.bin b/services/registration/amount.bin deleted file mode 100644 index 35757a4..0000000 Binary files a/services/registration/amount.bin and /dev/null differ diff --git a/services/registration/api_failure.bin b/services/registration/api_failure.bin deleted file mode 100644 index ffc8224..0000000 Binary files a/services/registration/api_failure.bin and /dev/null differ diff --git a/services/registration/balances.bin b/services/registration/balances.bin deleted file mode 100644 index 352a0a4..0000000 Binary files a/services/registration/balances.bin and /dev/null differ diff --git a/services/registration/blocked_account.bin b/services/registration/blocked_account.bin deleted file mode 100644 index c8642b4..0000000 Binary files a/services/registration/blocked_account.bin and /dev/null differ diff --git a/services/registration/change_language.bin b/services/registration/change_language.bin deleted file mode 100644 index c5ec01a..0000000 Binary files a/services/registration/change_language.bin and /dev/null differ diff --git a/services/registration/check_statement.bin b/services/registration/check_statement.bin deleted file mode 100644 index f038195..0000000 Binary files a/services/registration/check_statement.bin and /dev/null differ diff --git a/services/registration/community_balance.bin b/services/registration/community_balance.bin deleted file mode 100644 index 2d7034c..0000000 Binary files a/services/registration/community_balance.bin and /dev/null differ diff --git a/services/registration/confirm_create_pin.bin b/services/registration/confirm_create_pin.bin deleted file mode 100644 index ad89ea6..0000000 Binary files a/services/registration/confirm_create_pin.bin and /dev/null differ diff --git a/services/registration/confirm_others_new_pin.bin b/services/registration/confirm_others_new_pin.bin deleted file mode 100644 index b60a5ec..0000000 Binary files a/services/registration/confirm_others_new_pin.bin and /dev/null differ diff --git a/services/registration/confirm_pin_change.bin b/services/registration/confirm_pin_change.bin deleted file mode 100644 index 93400b1..0000000 Binary files a/services/registration/confirm_pin_change.bin and /dev/null differ diff --git a/services/registration/create_pin.bin b/services/registration/create_pin.bin deleted file mode 100644 index 0065cc5..0000000 Binary files a/services/registration/create_pin.bin and /dev/null differ diff --git a/services/registration/create_pin_mismatch.bin b/services/registration/create_pin_mismatch.bin deleted file mode 100644 index a80717a..0000000 Binary files a/services/registration/create_pin_mismatch.bin and /dev/null differ diff --git a/services/registration/display_profile_info.bin b/services/registration/display_profile_info.bin deleted file mode 100644 index e154dca..0000000 Binary files a/services/registration/display_profile_info.bin and /dev/null differ diff --git a/services/registration/edit_family_name.bin b/services/registration/edit_family_name.bin deleted file mode 100644 index d8b9a41..0000000 Binary files a/services/registration/edit_family_name.bin and /dev/null differ diff --git a/services/registration/edit_first_name.bin b/services/registration/edit_first_name.bin deleted file mode 100644 index ef49f0f..0000000 Binary files a/services/registration/edit_first_name.bin and /dev/null differ diff --git a/services/registration/edit_location.bin b/services/registration/edit_location.bin deleted file mode 100644 index 5964b21..0000000 Binary files a/services/registration/edit_location.bin and /dev/null differ diff --git a/services/registration/edit_offerings.bin b/services/registration/edit_offerings.bin deleted file mode 100644 index b26c7e9..0000000 Binary files a/services/registration/edit_offerings.bin and /dev/null differ diff --git a/services/registration/edit_profile.bin b/services/registration/edit_profile.bin deleted file mode 100644 index 9a16c5e..0000000 Binary files a/services/registration/edit_profile.bin and /dev/null differ diff --git a/services/registration/edit_yob.bin b/services/registration/edit_yob.bin deleted file mode 100644 index 9a4fe71..0000000 Binary files a/services/registration/edit_yob.bin and /dev/null differ diff --git a/services/registration/enter_other_number.bin b/services/registration/enter_other_number.bin deleted file mode 100644 index 85ecbaa..0000000 Binary files a/services/registration/enter_other_number.bin and /dev/null differ diff --git a/services/registration/enter_others_new_pin.bin b/services/registration/enter_others_new_pin.bin deleted file mode 100644 index a9e0690..0000000 Binary files a/services/registration/enter_others_new_pin.bin and /dev/null differ diff --git a/services/registration/enter_pin.bin b/services/registration/enter_pin.bin deleted file mode 100644 index 3919ba8..0000000 Binary files a/services/registration/enter_pin.bin and /dev/null differ diff --git a/services/registration/help.bin b/services/registration/help.bin deleted file mode 100644 index 199c5db..0000000 Binary files a/services/registration/help.bin and /dev/null differ diff --git a/services/registration/incorrect_date_format.bin b/services/registration/incorrect_date_format.bin deleted file mode 100644 index 8188b43..0000000 Binary files a/services/registration/incorrect_date_format.bin and /dev/null differ diff --git a/services/registration/incorrect_pin.bin b/services/registration/incorrect_pin.bin deleted file mode 100644 index 8817c23..0000000 Binary files a/services/registration/incorrect_pin.bin and /dev/null differ diff --git a/services/registration/invalid_amount.bin b/services/registration/invalid_amount.bin deleted file mode 100644 index 52bd9da..0000000 Binary files a/services/registration/invalid_amount.bin and /dev/null differ diff --git a/services/registration/invalid_others_pin.bin b/services/registration/invalid_others_pin.bin deleted file mode 100644 index 5f3163d..0000000 Binary files a/services/registration/invalid_others_pin.bin and /dev/null differ diff --git a/services/registration/invalid_pin.bin b/services/registration/invalid_pin.bin deleted file mode 100644 index e154dca..0000000 Binary files a/services/registration/invalid_pin.bin and /dev/null differ diff --git a/services/registration/invalid_recipient.bin b/services/registration/invalid_recipient.bin deleted file mode 100644 index dcf9d4e..0000000 Binary files a/services/registration/invalid_recipient.bin and /dev/null differ diff --git a/services/registration/invite_recipient.bin b/services/registration/invite_recipient.bin deleted file mode 100644 index 962ccf3..0000000 Binary files a/services/registration/invite_recipient.bin and /dev/null differ diff --git a/services/registration/invite_result.bin b/services/registration/invite_result.bin deleted file mode 100644 index 5e81094..0000000 Binary files a/services/registration/invite_result.bin and /dev/null differ diff --git a/services/registration/language_changed.bin b/services/registration/language_changed.bin deleted file mode 100644 index fced72b..0000000 Binary files a/services/registration/language_changed.bin and /dev/null differ diff --git a/services/registration/list_offering.bin b/services/registration/list_offering.bin deleted file mode 100644 index e69de29..0000000 diff --git a/services/registration/main.bin b/services/registration/main.bin deleted file mode 100644 index 1c10f2a..0000000 Binary files a/services/registration/main.bin and /dev/null differ diff --git a/services/registration/my_account.bin b/services/registration/my_account.bin deleted file mode 100644 index 7df7853..0000000 Binary files a/services/registration/my_account.bin and /dev/null differ diff --git a/services/registration/my_balance.bin b/services/registration/my_balance.bin deleted file mode 100644 index 3809958..0000000 Binary files a/services/registration/my_balance.bin and /dev/null differ diff --git a/services/registration/my_vouchers.bin b/services/registration/my_vouchers.bin deleted file mode 100644 index 7d139e5..0000000 Binary files a/services/registration/my_vouchers.bin and /dev/null differ diff --git a/services/registration/new_pin.bin b/services/registration/new_pin.bin deleted file mode 100644 index 7e7442a..0000000 Binary files a/services/registration/new_pin.bin and /dev/null differ diff --git a/services/registration/no_admin_privilege.bin b/services/registration/no_admin_privilege.bin deleted file mode 100644 index ec58654..0000000 Binary files a/services/registration/no_admin_privilege.bin and /dev/null differ diff --git a/services/registration/no_transfers.bin b/services/registration/no_transfers.bin deleted file mode 100644 index fced72b..0000000 Binary files a/services/registration/no_transfers.bin and /dev/null differ diff --git a/services/registration/no_voucher.bin b/services/registration/no_voucher.bin deleted file mode 100644 index fced72b..0000000 Binary files a/services/registration/no_voucher.bin and /dev/null differ diff --git a/services/registration/old_pin.bin b/services/registration/old_pin.bin deleted file mode 100644 index 085d9eb..0000000 Binary files a/services/registration/old_pin.bin and /dev/null differ diff --git a/services/registration/others_pin_mismatch.bin b/services/registration/others_pin_mismatch.bin deleted file mode 100644 index ffc8224..0000000 Binary files a/services/registration/others_pin_mismatch.bin and /dev/null differ diff --git a/services/registration/pin_entry.bin b/services/registration/pin_entry.bin deleted file mode 100644 index 685519b..0000000 Binary files a/services/registration/pin_entry.bin and /dev/null differ diff --git a/services/registration/pin_management.bin b/services/registration/pin_management.bin deleted file mode 100644 index 5cffbb9..0000000 Binary files a/services/registration/pin_management.bin and /dev/null differ diff --git a/services/registration/pin_reset_mismatch.bin b/services/registration/pin_reset_mismatch.bin deleted file mode 100644 index 6fd2407..0000000 Binary files a/services/registration/pin_reset_mismatch.bin and /dev/null differ diff --git a/services/registration/pin_reset_result.bin b/services/registration/pin_reset_result.bin deleted file mode 100644 index 07c70a4..0000000 Binary files a/services/registration/pin_reset_result.bin and /dev/null differ diff --git a/services/registration/pin_reset_success.bin b/services/registration/pin_reset_success.bin deleted file mode 100644 index c5e8973..0000000 Binary files a/services/registration/pin_reset_success.bin and /dev/null differ diff --git a/services/registration/profile_update_success.bin b/services/registration/profile_update_success.bin deleted file mode 100644 index f152be1..0000000 Binary files a/services/registration/profile_update_success.bin and /dev/null differ diff --git a/services/registration/quit.bin b/services/registration/quit.bin deleted file mode 100644 index 6368a90..0000000 Binary files a/services/registration/quit.bin and /dev/null differ diff --git a/services/registration/root.bin b/services/registration/root.bin deleted file mode 100644 index e6a440b..0000000 Binary files a/services/registration/root.bin and /dev/null differ diff --git a/services/registration/select_gender.bin b/services/registration/select_gender.bin deleted file mode 100644 index fa9627c..0000000 Binary files a/services/registration/select_gender.bin and /dev/null differ diff --git a/services/registration/select_language.bin b/services/registration/select_language.bin deleted file mode 100644 index 7071dd0..0000000 Binary files a/services/registration/select_language.bin and /dev/null differ diff --git a/services/registration/select_voucher.bin b/services/registration/select_voucher.bin deleted file mode 100644 index 872671a..0000000 Binary files a/services/registration/select_voucher.bin and /dev/null differ diff --git a/services/registration/send.bin b/services/registration/send.bin deleted file mode 100644 index 0c1c15b..0000000 Binary files a/services/registration/send.bin and /dev/null differ diff --git a/services/registration/set_default.bin b/services/registration/set_default.bin deleted file mode 100644 index 2317371..0000000 Binary files a/services/registration/set_default.bin and /dev/null differ diff --git a/services/registration/set_eng.bin b/services/registration/set_eng.bin deleted file mode 100644 index 2317371..0000000 Binary files a/services/registration/set_eng.bin and /dev/null differ diff --git a/services/registration/set_female.bin b/services/registration/set_female.bin deleted file mode 100644 index 0bfc8bf..0000000 Binary files a/services/registration/set_female.bin and /dev/null differ diff --git a/services/registration/set_male.bin b/services/registration/set_male.bin deleted file mode 100644 index 34e11b6..0000000 Binary files a/services/registration/set_male.bin and /dev/null differ diff --git a/services/registration/set_swa.bin b/services/registration/set_swa.bin deleted file mode 100644 index 2317371..0000000 Binary files a/services/registration/set_swa.bin and /dev/null differ diff --git a/services/registration/set_unspecified.bin b/services/registration/set_unspecified.bin deleted file mode 100644 index e9af0c4..0000000 Binary files a/services/registration/set_unspecified.bin and /dev/null differ diff --git a/services/registration/terms.bin b/services/registration/terms.bin deleted file mode 100644 index 90a3872..0000000 Binary files a/services/registration/terms.bin and /dev/null differ diff --git a/services/registration/transaction_initiated.bin b/services/registration/transaction_initiated.bin deleted file mode 100644 index 3214df1..0000000 Binary files a/services/registration/transaction_initiated.bin and /dev/null differ diff --git a/services/registration/transaction_pin.bin b/services/registration/transaction_pin.bin deleted file mode 100644 index 4980bb2..0000000 Binary files a/services/registration/transaction_pin.bin and /dev/null differ diff --git a/services/registration/transactions.bin b/services/registration/transactions.bin deleted file mode 100644 index be5a505..0000000 Binary files a/services/registration/transactions.bin and /dev/null differ diff --git a/services/registration/unregistered_number.bin b/services/registration/unregistered_number.bin deleted file mode 100644 index cf18ba1..0000000 Binary files a/services/registration/unregistered_number.bin and /dev/null differ diff --git a/services/registration/update_familyname.bin b/services/registration/update_familyname.bin deleted file mode 100644 index 7183798..0000000 Binary files a/services/registration/update_familyname.bin and /dev/null differ diff --git a/services/registration/update_firstname.bin b/services/registration/update_firstname.bin deleted file mode 100644 index 379245a..0000000 Binary files a/services/registration/update_firstname.bin and /dev/null differ diff --git a/services/registration/update_gender.bin b/services/registration/update_gender.bin deleted file mode 100644 index efd6ed0..0000000 Binary files a/services/registration/update_gender.bin and /dev/null differ diff --git a/services/registration/update_location.bin b/services/registration/update_location.bin deleted file mode 100644 index c8438dc..0000000 Binary files a/services/registration/update_location.bin and /dev/null differ diff --git a/services/registration/update_offerings.bin b/services/registration/update_offerings.bin deleted file mode 100644 index 082e768..0000000 Binary files a/services/registration/update_offerings.bin and /dev/null differ diff --git a/services/registration/update_profile_items.bin b/services/registration/update_profile_items.bin deleted file mode 100644 index 11af6ee..0000000 Binary files a/services/registration/update_profile_items.bin and /dev/null differ diff --git a/services/registration/update_success.bin b/services/registration/update_success.bin deleted file mode 100644 index fced72b..0000000 Binary files a/services/registration/update_success.bin and /dev/null differ diff --git a/services/registration/update_yob.bin b/services/registration/update_yob.bin deleted file mode 100644 index 9c0a5f8..0000000 Binary files a/services/registration/update_yob.bin and /dev/null differ diff --git a/services/registration/view_profile.bin b/services/registration/view_profile.bin deleted file mode 100644 index c16454f..0000000 Binary files a/services/registration/view_profile.bin and /dev/null differ diff --git a/services/registration/view_statement.bin b/services/registration/view_statement.bin deleted file mode 100644 index b0411b1..0000000 Binary files a/services/registration/view_statement.bin and /dev/null differ diff --git a/services/registration/view_voucher.bin b/services/registration/view_voucher.bin deleted file mode 100644 index 56034b2..0000000 Binary files a/services/registration/view_voucher.bin and /dev/null differ diff --git a/services/registration/voucher_details.bin b/services/registration/voucher_details.bin deleted file mode 100644 index 47ea883..0000000 Binary files a/services/registration/voucher_details.bin and /dev/null differ diff --git a/services/registration/voucher_set.bin b/services/registration/voucher_set.bin deleted file mode 100644 index 82016cc..0000000 Binary files a/services/registration/voucher_set.bin and /dev/null differ diff --git a/services/remote.go b/services/remote.go index 2d31217..517d67d 100644 --- a/services/remote.go +++ b/services/remote.go @@ -1,3 +1,4 @@ +//go:build online // +build online package services @@ -5,11 +6,11 @@ package services import ( "context" - "git.grassecon.net/grassrootseconomics/visedriver/storage" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" httpremote "git.grassecon.net/grassrootseconomics/sarafu-api/remote/http" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) -func New(ctx context.Context, storageService storage.StorageService, conn storage.ConnData) remote.AccountService { +func New(ctx context.Context, storageService storage.StorageService) remote.AccountService { return &httpremote.HTTPAccountService{} } diff --git a/ssh/keystore.go b/ssh/keystore.go index 85c703f..37ebdef 100644 --- a/ssh/keystore.go +++ b/ssh/keystore.go @@ -29,7 +29,7 @@ func NewSshKeyStore(ctx context.Context, dbDir string) (*SshKeyStore, error) { return keyStore, nil } -func(s *SshKeyStore) AddFromFile(ctx context.Context, fp string, sessionId string) error { +func (s *SshKeyStore) AddFromFile(ctx context.Context, fp string, sessionId string) error { _, err := os.Stat(fp) if err != nil { return fmt.Errorf("cannot open ssh server public key file: %v\n", err) @@ -51,7 +51,7 @@ func(s *SshKeyStore) AddFromFile(ctx context.Context, fp string, sessionId strin return s.store.Put(ctx, k, []byte(sessionId)) } -func(s *SshKeyStore) Get(ctx context.Context, pubKey ssh.PublicKey) (string, error) { +func (s *SshKeyStore) Get(ctx context.Context, pubKey ssh.PublicKey) (string, error) { s.store.SetLanguage(nil) s.store.SetSession("") s.store.SetPrefix(storage.DATATYPE_EXTEND) @@ -63,6 +63,6 @@ func(s *SshKeyStore) Get(ctx context.Context, pubKey ssh.PublicKey) (string, err return string(v), nil } -func(s *SshKeyStore) Close() error { - return s.store.Close() +func (s *SshKeyStore) Close(ctx context.Context) error { + return s.store.Close(ctx) } diff --git a/ssh/ssh.go b/ssh/ssh.go index 18e930d..81d7835 100644 --- a/ssh/ssh.go +++ b/ssh/ssh.go @@ -2,8 +2,8 @@ package ssh import ( "context" - "encoding/hex" "encoding/base64" + "encoding/hex" "errors" "fmt" "net" @@ -16,9 +16,9 @@ import ( "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/state" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-vise/services" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" + "git.grassecon.net/grassrootseconomics/sarafu-vise/services" + "git.grassecon.net/grassrootseconomics/visedriver/storage" ) var ( @@ -26,32 +26,32 @@ var ( ) type auther struct { - Ctx context.Context + Ctx context.Context keyStore *SshKeyStore - auth map[string]string + auth map[string]string } func NewAuther(ctx context.Context, keyStore *SshKeyStore) *auther { return &auther{ - Ctx: ctx, + Ctx: ctx, keyStore: keyStore, - auth: make(map[string]string), + auth: make(map[string]string), } } -func(a *auther) Check(conn ssh.ConnMetadata, pubKey ssh.PublicKey) (*ssh.Permissions, error) { +func (a *auther) Check(conn ssh.ConnMetadata, pubKey ssh.PublicKey) (*ssh.Permissions, error) { logg.TraceCtxf(a.Ctx, "looking for publickey", "pubkey", fmt.Sprintf("%x", pubKey)) va, err := a.keyStore.Get(a.Ctx, pubKey) if err != nil { return nil, err } ka := hex.EncodeToString(conn.SessionID()) - a.auth[ka] = va + a.auth[ka] = va fmt.Fprintf(os.Stderr, "connect: %s -> %s\n", ka, va) return nil, nil } -func(a *auther) FromConn(c *ssh.ServerConn) (string, error) { +func (a *auther) FromConn(c *ssh.ServerConn) (string, error) { if c == nil { return "", errors.New("nil server conn") } @@ -61,8 +61,7 @@ func(a *auther) FromConn(c *ssh.ServerConn) (string, error) { return a.Get(c.Conn.SessionID()) } - -func(a *auther) Get(k []byte) (string, error) { +func (a *auther) Get(k []byte) (string, error) { ka := hex.EncodeToString(k) v, ok := a.auth[ka] if !ok { @@ -72,20 +71,19 @@ func(a *auther) Get(k []byte) (string, error) { } type SshRunner struct { - Ctx context.Context - Cfg engine.Config - FlagFile string - Conn storage.ConnData - ResourceDir string - Debug bool + Ctx context.Context + Cfg engine.Config + FlagFile string + Conn storage.Conns + Debug bool SrvKeyFile string - Host string - Port uint - wg sync.WaitGroup - lst net.Listener + Host string + Port uint + wg sync.WaitGroup + lst net.Listener } -func(s *SshRunner) serve(ctx context.Context, sessionId string, ch ssh.NewChannel, en engine.Engine) error { +func (s *SshRunner) serve(ctx context.Context, sessionId string, ch ssh.NewChannel, en engine.Engine) error { if ch == nil { return errors.New("nil channel") } @@ -102,7 +100,7 @@ func(s *SshRunner) serve(ctx context.Context, sessionId string, ch ssh.NewChanne go func(reqIn <-chan *ssh.Request) { defer s.wg.Done() for req := range reqIn { - req.Reply(req.Type == "shell", nil) + req.Reply(req.Type == "shell", nil) } _ = requests }(requests) @@ -142,13 +140,13 @@ func(s *SshRunner) serve(ctx context.Context, sessionId string, ch ssh.NewChanne return nil } -func(s *SshRunner) Stop() error { +func (s *SshRunner) Stop() error { return s.lst.Close() } -func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { +func (s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { ctx := s.Ctx - menuStorageService := storage.NewMenuStorageService(s.Conn, s.ResourceDir) + menuStorageService := storage.NewMenuStorageService(s.Conn) rs, err := menuStorageService.GetResource(ctx) if err != nil { @@ -180,7 +178,7 @@ func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { } // TODO: clear up why pointer here and by-value other cmds - accountService := services.New(ctx, menuStorageService, s.Conn) + accountService := services.New(ctx, menuStorageService) hl, err := lhs.GetHandler(accountService) if err != nil { @@ -194,7 +192,7 @@ func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { } // TODO: this is getting very hacky! closer := func() { - err := menuStorageService.Close() + err := menuStorageService.Close(ctx) if err != nil { logg.ErrorCtxf(ctx, "menu storage service cleanup fail", "err", err) } @@ -203,7 +201,7 @@ func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { } // adapted example from crypto/ssh package, NewServerConn doc -func(s *SshRunner) Run(ctx context.Context, keyStore *SshKeyStore) { +func (s *SshRunner) Run(ctx context.Context, keyStore *SshKeyStore) { s.Ctx = ctx running := true @@ -256,7 +254,7 @@ func(s *SshRunner) Run(ctx context.Context, keyStore *SshKeyStore) { ssh.DiscardRequests(rC) s.wg.Done() }() - + sessionId, err := auth.FromConn(srvConn) if err != nil { logg.ErrorCtxf(ctx, "Cannot find authentication") @@ -268,7 +266,7 @@ func(s *SshRunner) Run(ctx context.Context, keyStore *SshKeyStore) { return } defer func() { - err := en.Finish() + err := en.Finish(ctx) if err != nil { logg.ErrorCtxf(ctx, "engine won't stop", "err", err) } diff --git a/store/tokens_test.go b/store/tokens_test.go index ca7ca47..b8c0082 100644 --- a/store/tokens_test.go +++ b/store/tokens_test.go @@ -3,8 +3,8 @@ package store import ( "testing" - "github.com/alecthomas/assert/v2" storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" + "github.com/alecthomas/assert/v2" ) func TestParseAndScaleAmount(t *testing.T) { diff --git a/store/user_store.go b/store/user_store.go index 70e2539..eea6d7e 100644 --- a/store/user_store.go +++ b/store/user_store.go @@ -4,10 +4,10 @@ import ( "context" visedb "git.defalsify.org/vise.git/db" - storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" - "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" "git.grassecon.net/grassrootseconomics/common/hex" "git.grassecon.net/grassrootseconomics/common/identity" + "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" + storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" ) // TODO: Rename interface, "datastore" is redundant naming and too general diff --git a/store/vouchers_test.go b/store/vouchers_test.go index 5e3a99b..a98ffc3 100644 --- a/store/vouchers_test.go +++ b/store/vouchers_test.go @@ -27,7 +27,7 @@ func InitializeTestDb(t *testing.T) (context.Context, *UserDataStore) { store := &UserDataStore{Db: db} t.Cleanup(func() { - db.Close() // Ensure the DB is closed after each test + db.Close(ctx) // Ensure the DB is closed after each test }) return ctx, store diff --git a/testutil/engine.go b/testutil/engine.go index 6c37c87..a179b5d 100644 --- a/testutil/engine.go +++ b/testutil/engine.go @@ -4,102 +4,75 @@ import ( "context" "fmt" "log" - "net/url" "os" "path" "path/filepath" "time" - testdataloader "github.com/peteole/testdata-loader" - "github.com/jackc/pgx/v5/pgxpool" "git.defalsify.org/vise.git/engine" - "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" - "git.grassecon.net/grassrootseconomics/visedriver/env" - "git.grassecon.net/grassrootseconomics/visedriver/config" - "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" - "git.grassecon.net/grassrootseconomics/visedriver/storage" - "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/testservice" "git.grassecon.net/grassrootseconomics/sarafu-api/remote" httpremote "git.grassecon.net/grassrootseconomics/sarafu-api/remote/http" + "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/testservice" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" + "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" "git.grassecon.net/grassrootseconomics/sarafu-vise/testutil/testtag" + "git.grassecon.net/grassrootseconomics/visedriver/storage" + "github.com/jackc/pgx/v5/pgxpool" ) -var ( - logg = logging.NewVanilla() - baseDir = testdataloader.GetBasePath() - scriptDir = path.Join(baseDir, "services", "registration") - setDbType string - setConnStr string - setDbSchema string -) - -func init() { - env.LoadEnvVariablesPath(baseDir) - config.LoadConfig() -} - -// SetDatabase updates the database used by TestEngine -func SetDatabase(database, connStr, dbSchema string) { - setDbType = database - setConnStr = connStr - setDbSchema = dbSchema -} - // CleanDatabase removes all test data from the database func CleanDatabase() { - if setDbType == "postgres" { - ctx := context.Background() - // Update the connection string with the new search path - updatedConnStr, err := updateSearchPath(setConnStr, setDbSchema) - if err != nil { - log.Fatalf("Failed to update search path: %v", err) - } + for _, v := range []int8{ + storage.STORETYPE_STATE, + storage.STORETYPE_USER, + } { + conn := conns[v] + logg.Infof("cleaning test database", "typ", v, "db", conn) + if conn.DbType() == storage.DBTYPE_POSTGRES { + ctx := context.Background() + // Update the connection string with the new search path + updatedConnStr := conn.Raw() - dbConn, err := pgxpool.New(ctx, updatedConnStr) - if err != nil { - log.Fatalf("Failed to connect to database for cleanup: %v", err) - } - defer dbConn.Close() + dbConn, err := pgxpool.New(ctx, updatedConnStr) + if err != nil { + log.Fatalf("Failed to connect to database for cleanup: %v", err) + } + defer dbConn.Close() - query := fmt.Sprintf("DELETE FROM %s.kv_vise;", setDbSchema) - _, execErr := dbConn.Exec(ctx, query) - if execErr != nil { - log.Printf("Failed to cleanup table %s.kv_vise: %v", setDbSchema, execErr) + setDbSchema := conn.Domain() + + query := fmt.Sprintf("DELETE FROM %s.kv_vise;", setDbSchema) + _, execErr := dbConn.Exec(ctx, query) + if execErr != nil { + log.Printf("Failed to cleanup table %s.kv_vise: %v", setDbSchema, execErr) + } else { + log.Printf("Successfully cleaned up table %s.kv_vise", setDbSchema) + } + } else if conn.DbType() == storage.DBTYPE_FS || conn.DbType() == storage.DBTYPE_GDBM { + connStr, _ := filepath.Abs(conn.Path()) + if err := os.RemoveAll(connStr); err != nil { + log.Fatalf("Failed to delete state store %v: %v", conn, err) + } } else { - log.Printf("Successfully cleaned up table %s.kv_vise", setDbSchema) - } - } else { - setConnStr, _ := filepath.Abs(setConnStr) - if err := os.RemoveAll(setConnStr); err != nil { - log.Fatalf("Failed to delete state store %s: %v", setConnStr, err) + logg.Errorf("store cleanup not handled") } } } -// updateSearchPath updates the search_path (schema) to be used in the connection -func updateSearchPath(connStr string, newSearchPath string) (string, error) { - u, err := url.Parse(connStr) - if err != nil { - return "", fmt.Errorf("invalid connection string: %w", err) - } - - // Parse the query parameters - q := u.Query() - - // Update or add the search_path parameter - q.Set("search_path", newSearchPath) - - // Rebuild the connection string with updated parameters - u.RawQuery = q.Encode() - - return u.String(), nil -} - func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { - var err error + config.LoadConfig() + err := config.Apply(override) + if err != nil { + panic(fmt.Errorf("args override fail: %v\n", err)) + } + conns, err = config.GetConns() + if err != nil { + panic(fmt.Errorf("get conns fail: %v\n", err)) + } ctx := context.Background() ctx = context.WithValue(ctx, "SessionId", sessionId) + logg.InfoCtxf(ctx, "loaded engine setup", "conns", conns) pfp := path.Join(scriptDir, "pp.csv") var eventChannel = make(chan bool) @@ -111,29 +84,8 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { FlagCount: uint32(128), } - if setDbType == "postgres" { - setConnStr = config.DbConn - setConnStr, err = updateSearchPath(setConnStr, setDbSchema) - if err != nil { - fmt.Println("Error:", err) - os.Exit(1) - } - } else { - setConnStr, err = filepath.Abs(setConnStr) - if err != nil { - fmt.Fprintf(os.Stderr, "connstr err: %v", err) - os.Exit(1) - } - } - - conn, err := storage.ToConnData(setConnStr) - if err != nil { - fmt.Fprintf(os.Stderr, "connstr parse err: %v", err) - os.Exit(1) - } - - resourceDir := scriptDir - menuStorageService := storage.NewMenuStorageService(conn, resourceDir) + menuStorageService := storage.NewMenuStorageService(conns) + menuStorageService = menuStorageService.WithDb(resourceDb, storage.STORETYPE_RESOURCE) rs, err := menuStorageService.GetResource(ctx) if err != nil { @@ -162,7 +114,6 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs) lhs.SetDataStore(&userDataStore) lhs.SetPersister(pe) - if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(1) @@ -195,12 +146,12 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { en := lhs.GetEngine() en = en.WithFirst(hl.Init) cleanFn := func() { - err := en.Finish() + err := en.Finish(ctx) if err != nil { logg.Errorf(err.Error()) } - err = menuStorageService.Close() + err = menuStorageService.Close(ctx) if err != nil { logg.Errorf(err.Error()) } diff --git a/testutil/fsdb.go b/testutil/fsdb.go new file mode 100644 index 0000000..7482bd0 --- /dev/null +++ b/testutil/fsdb.go @@ -0,0 +1,25 @@ +//go:build testfsdb +// +build testfsdb + +package testutil + +import ( + "os" +) + +const ( + testDbCookie = true +) + +func init() { + stateDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-fs-state-") + if err != nil { + panic(err) + } + override.StateConn = &stateDir + userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-fs-user-") + if err != nil { + panic(err) + } + override.UserConn = &userDir +} diff --git a/testutil/gdbmdb.go b/testutil/gdbmdb.go new file mode 100644 index 0000000..09e7dd5 --- /dev/null +++ b/testutil/gdbmdb.go @@ -0,0 +1,34 @@ +//go:build testgdbmdb +// +build testgdbmdb + +package testutil + +import ( + "net/url" + "os" +) + +const ( + testDbCookie = true +) + +func init() { + stateDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-gdbm-state-") + if err != nil { + panic(err) + } + stateDir, err = url.JoinPath("gdbm:///", stateDir) + if err != nil { + panic(err) + } + override.StateConn = &stateDir + userDir, err := os.MkdirTemp("", "sarafu-vise-menutraversal-gdbm-user-") + if err != nil { + panic(err) + } + userDir, err = url.JoinPath("gdbm:///", userDir) + if err != nil { + panic(err) + } + override.UserConn = &userDir +} diff --git a/testutil/setup.go b/testutil/setup.go new file mode 100644 index 0000000..58273b7 --- /dev/null +++ b/testutil/setup.go @@ -0,0 +1,32 @@ +package testutil + +import ( + "context" + "path" + + "git.defalsify.org/vise.git/db" + fsdb "git.defalsify.org/vise.git/db/fs" + "git.defalsify.org/vise.git/logging" + "git.grassecon.net/grassrootseconomics/sarafu-vise/config" + "git.grassecon.net/grassrootseconomics/visedriver/storage" + testdataloader "github.com/peteole/testdata-loader" +) + +var ( + logg = logging.NewVanilla().WithDomain("sarafu-vise.testutil").WithContextKey("SessionId") + conns storage.Conns + resourceDb db.Db + baseDir = testdataloader.GetBasePath() + scriptDir = path.Join(baseDir, "services", "registration") + override = config.NewOverride() +) + +func init() { + ctx := context.Background() + config.EnvPath = baseDir + resourceDb = fsdb.NewFsDb() + err := resourceDb.Connect(ctx, scriptDir) + if err != nil { + panic(err) + } +} diff --git a/testutil/testtag/offlinetest.go b/testutil/testtag/offlinetest.go index ed23fc7..e0e44a6 100644 --- a/testutil/testtag/offlinetest.go +++ b/testutil/testtag/offlinetest.go @@ -1,3 +1,4 @@ +//go:build !online // +build !online package testtag diff --git a/testutil/testtag/onlinetest.go b/testutil/testtag/onlinetest.go index 4874810..23e803a 100644 --- a/testutil/testtag/onlinetest.go +++ b/testutil/testtag/onlinetest.go @@ -1,3 +1,4 @@ +//go:build online // +build online package testtag