taldir

Directory service to resolve wallet mailboxes by messenger addresses
Log | Files | Refs | Submodules | README | LICENSE

commit 22696fba3c4ba75efa05c613841fb7b5b9cc9538
parent 50a04ddb520fbd12866e3b10ada4f31b61649eb9
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Sun, 15 Feb 2026 08:56:46 +0100

move DBInit logic out to taler-go

Diffstat:
Mcmd/taldir-dbinit/main.go | 4++--
Mcmd/taldir-server/main_test.go | 3++-
Mgo.mod | 10+++++-----
Mgo.sum | 28+++++++++++++++++++++++-----
Mpkg/taldir/db.go | 79+------------------------------------------------------------------------------
5 files changed, 33 insertions(+), 91 deletions(-)

diff --git a/cmd/taldir-dbinit/main.go b/cmd/taldir-dbinit/main.go @@ -28,7 +28,7 @@ import ( "strings" "rsc.io/getopt" - "taler.net/taldir/pkg/taldir" + talerutil "github.com/schanzen/taler-go/pkg/util" "gopkg.in/ini.v1" ) @@ -112,7 +112,7 @@ func main() { log.Panic(err) } defer db.Close() - err = taldir.DBInit(db, taldirdatahome, dbName) + err = talerutil.DBInit(db, taldirdatahome, dbName, "taler-directory") if err != nil { log.Fatalf("%v\n", err) } diff --git a/cmd/taldir-server/main_test.go b/cmd/taldir-server/main_test.go @@ -36,6 +36,7 @@ import ( _ "taler.net/taldir/cmd/taldir-server" "taler.net/taldir/internal/util" taldir "taler.net/taldir/pkg/taldir" + talerutil "github.com/schanzen/taler-go/pkg/util" ) var t taldir.Taldir @@ -112,7 +113,7 @@ func TestMain(m *testing.M) { log.Panic(err) } defer db.Close() - err = taldir.DBInit(db, "../..", dbName) + err = talerutil.DBInit(db, "../..", dbName, "taler-directory") if err != nil { log.Fatalf("Failed to apply versioning or patches: %v", err) } diff --git a/go.mod b/go.mod @@ -8,20 +8,20 @@ require ( github.com/kataras/i18n v0.0.8 github.com/lib/pq v1.11.2 github.com/mattn/go-sqlite3 v1.14.34 - github.com/schanzen/taler-go v1.1.1 + github.com/schanzen/taler-go v1.2.1 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - gopkg.in/ini.v1 v1.67.0 + gopkg.in/ini.v1 v1.67.1 rsc.io/getopt v0.0.0-20170811000552-20be20937449 ) require ( - github.com/BurntSushi/toml v1.5.0 // indirect + github.com/BurntSushi/toml v1.6.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/text v0.32.0 // indirect + golang.org/x/net v0.50.0 // indirect + golang.org/x/text v0.34.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum @@ -1,6 +1,9 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA= @@ -26,16 +29,28 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/schanzen/taler-go v1.1.1 h1:No/N8Wa9CZjwLDqS47sdSLtWno08I7B43OKOUNpzjgg= -github.com/schanzen/taler-go v1.1.1/go.mod h1:+l2TVAPZkF2d15X/XPLYZI5R6PdW6gc6Wft12jrl7tA= +github.com/schanzen/taler-go v1.2.0 h1:WGUKxiM/EubADwJQs3yn1irz2gxKcess9iBFkBw/m9w= +github.com/schanzen/taler-go v1.2.0/go.mod h1:bMpS4SS4jI5DyCbJqcy2J2O81OM5N57mVH+B+yJP1Xg= +github.com/schanzen/taler-go v1.2.1 h1:K6ANhXb8ThsLs26ToXi7hD3pliqH1jAWI5UImNlr7Io= +github.com/schanzen/taler-go v1.2.1/go.mod h1:bMpS4SS4jI5DyCbJqcy2J2O81OM5N57mVH+B+yJP1Xg= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -43,6 +58,9 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.1 h1:tVBILHy0R6e4wkYOn3XmiITt/hEVH4TFMYvAX2Ytz6k= +gopkg.in/ini.v1 v1.67.1/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= rsc.io/getopt v0.0.0-20170811000552-20be20937449 h1:UukjJOsjQH0DIuyyrcod6CXHS6cdaMMuJmrt+SN1j4A= diff --git a/pkg/taldir/db.go b/pkg/taldir/db.go @@ -23,9 +23,6 @@ import ( "database/sql" "errors" "fmt" - "os" - "os/exec" - "path/filepath" "time" ) @@ -485,7 +482,7 @@ func UpdateEntryInDatabase(db *sql.DB, e *Entry) error { return nil } -// Insert new Entry into database +// InsertEntryIntoDatabase inserts new Entry into database func InsertEntryIntoDatabase(db *sql.DB, e *Entry) error { e.CreatedAt = time.Now().UnixMicro() query := `INSERT INTO taler_directory.entries @@ -498,77 +495,3 @@ func InsertEntryIntoDatabase(db *sql.DB, e *Entry) error { return nil } -func CheckVersioning(db *sql.DB) (bool, error) { - rows, err := db.Query(`SELECT schema_name FROM information_schema.schemata WHERE schema_name='_v';`) - if err != nil { - return false, err - } - defer rows.Close() - if rows.Next() { - fmt.Println("Versioning applied") - return true, nil - } - return false, nil -} - -func CheckPatch(db *sql.DB, patchName string) (bool, error) { - rows, err := db.Query(`SELECT applied_by FROM _v.patches WHERE patch_name=$1 LIMIT 1;`, patchName) - if err != nil { - return false, err - } - defer rows.Close() - if rows.Next() { - return true, nil - } - return false, nil -} - -func RunSQL(db *sql.DB, patchName string, dbName string) error { - path, err := exec.LookPath("psql") - if err != nil { - return err - } - _, err = exec.Command(path, dbName, "-f", patchName, "-q", "--set", "ON_ERROR_STOP=1").Output() - fmt.Printf("Running: %s %s %s %s %s %s %s\n", path, dbName, "-f", patchName, "-q", "--set", "ON_ERROR_STOP=1") - if err != nil { - return err - } - return nil - -} - -func DBInit(db *sql.DB, datahome string, dbName string) error { - applied, err := CheckVersioning(db) - loadSuffix := filepath.Join(datahome, "sql") - if err != nil { - fmt.Printf("%v\n", err) - } - if !applied { - err := RunSQL(db, filepath.Join(loadSuffix, "versioning.sql"), dbName) - if err != nil { - return err - } - } - for i := range 10000 { - patchName := fmt.Sprintf("taler-directory-%04d", i+1) - applied, err := CheckPatch(db, patchName) - if err != nil { - return err - } - if applied { - fmt.Printf("Patch %s already applied\n", patchName) - continue - } - patchFile := fmt.Sprintf("%s.sql", filepath.Join(loadSuffix, patchName)) - if _, err := os.Stat(patchFile); err != nil { - fmt.Printf("Patch %s not found, up-to-date.\n", patchFile) - break - } - fmt.Printf("Applying patch %s\n", patchName) - err = RunSQL(db, patchFile, dbName) - if err != nil { - return err - } - } - return nil -}