taldir

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

commit 66a23e1c0f3684703dbecadfa606146e0c6b535f
parent 1ff91d12b5e40f78ed5742f032e978e2522f4572
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Sun, 22 Mar 2026 14:46:45 +0100

refactor for prepared statements

Diffstat:
Mcmd/taldir-server/main.go | 4+---
Mcmd/taldir-server/main_test.go | 9+--------
Mpkg/taldir/config.go | 4+---
Mpkg/taldir/db.go | 385+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mpkg/taldir/taldir.go | 47+++++++++++++++++++++++------------------------
5 files changed, 283 insertions(+), 166 deletions(-)

diff --git a/cmd/taldir-server/main.go b/cmd/taldir-server/main.go @@ -35,8 +35,6 @@ import ( "path" "path/filepath" - "database/sql" - _ "github.com/lib/pq" "github.com/schanzen/taler-go/pkg/merchant" "github.com/schanzen/taler-go/pkg/util" @@ -104,7 +102,7 @@ func main() { } psqlconn := cfg.GetString("directory-pq", "connection_string", "postgres:///taler-directory") - db, err := sql.Open("postgres", psqlconn) + db, err := taldir.OpenDatabase(psqlconn) if err != nil { log.Panic(err) } diff --git a/cmd/taldir-server/main_test.go b/cmd/taldir-server/main_test.go @@ -20,7 +20,6 @@ package main_test import ( "bytes" - "database/sql" "fmt" "io" "log" @@ -102,18 +101,12 @@ func TestMain(m *testing.M) { log.Fatalf("Failed to read config: %v", err) } psqlconn := cfg.GetString("directory-pq", "connection_string", "postgres:///taler-directory") - segments := strings.Split(strings.Split(psqlconn, "?")[0], "/") - dbName := segments[len(segments)-1] - db, err := sql.Open("postgres", psqlconn) + db, err := taldir.OpenDatabase(psqlconn) if err != nil { log.Panic(err) } defer db.Close() - err = talerutil.DBInit(db, "../..", dbName, "taler-directory") - if err != nil { - log.Fatalf("Failed to apply versioning or patches: %v", err) - } merchServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/config" { w.WriteHeader(http.StatusOK) diff --git a/pkg/taldir/config.go b/pkg/taldir/config.go @@ -19,8 +19,6 @@ package taldir import ( - "database/sql" - "github.com/schanzen/taler-go/pkg/merchant" "github.com/schanzen/taler-go/pkg/util" ) @@ -36,7 +34,7 @@ type TaldirConfig struct { Datahome string // The database connection to use - Db *sql.DB + Db *TaldirDatabase // The merchant connection to use Merchant merchant.Merchant diff --git a/pkg/taldir/db.go b/pkg/taldir/db.go @@ -23,7 +23,11 @@ import ( "database/sql" "errors" "fmt" + "log" + "strings" "time" + + talerutil "github.com/schanzen/taler-go/pkg/util" ) // Validation is the object created when a registration for an entry is initiated. @@ -80,9 +84,102 @@ type Entry struct { Duration int64 `json:"-"` } -// Update validation in database -func UpdateValidationInDatabase(db *sql.DB, v *Validation) error { - query := `UPDATE taler_directory.validations +// TaldirDatabase is the main taldir database connection handle +type TaldirDatabase struct { + // SQL connection + db *sql.DB + + // Get entry statement + getEntryByHAliasStmt *sql.Stmt + + // Insert entry statement + insertEntryStmt *sql.Stmt + + // Update entry statement + updateEntryStmt *sql.Stmt + + // Delete entry statement + deleteEntryStmt *sql.Stmt + + // Get validation from database + getValidationStmt *sql.Stmt + + // Get all validations from database + getAllValidationsByHAliasStmt *sql.Stmt + + // Get first validation for a specific HAlias + getFirstValidationByHAliasStmt *sql.Stmt + + // Insert validation + insertValidationStmt *sql.Stmt + + // Update validation statement + updateValidationStmt *sql.Stmt + + // Delete validation + deleteValidationsByHAliasStmt *sql.Stmt + + // Delete stale validations + deleteStaleValidationsStmt *sql.Stmt +} + +func (db *TaldirDatabase) Close() { + for _, s := range []*sql.Stmt{ + db.getEntryByHAliasStmt, + db.insertEntryStmt, + db.updateEntryStmt, + db.deleteEntryStmt, + db.getValidationStmt, + db.getAllValidationsByHAliasStmt, + db.getFirstValidationByHAliasStmt, + db.insertValidationStmt, + db.updateValidationStmt, + db.deleteValidationsByHAliasStmt, + db.deleteStaleValidationsStmt, + } { + if s != nil { + s.Close() + } + } + db.db.Close() +} + +func OpenDatabase(psqlconn string) (*TaldirDatabase, error) { + db, err := sql.Open("postgres", psqlconn) + if err != nil { + return nil, err + } + segments := strings.Split(strings.Split(psqlconn, "?")[0], "/") + dbName := segments[len(segments)-1] + + err = talerutil.DBInit(db, "../..", dbName, "taler-directory") + if err != nil { + log.Fatalf("Failed to apply versioning or patches: %v", err) + } + insertEntryStmt, err := db.Prepare(`INSERT INTO taler_directory.entries + VALUES (DEFAULT, $1, $2, $3, $4);`) + if err != nil { + log.Panic(err) + return nil, err + } + updateEntryStmt, err := db.Prepare(`UPDATE taler_directory.entries + SET + "created_at" = $2, + "target_uri" = $3, + "duration" = $4 + WHERE "hs_alias" = $1;`) + if err != nil { + return nil, err + } + deleteEntryStmt, err := db.Prepare(`DELETE + FROM taler_directory.entries + WHERE + "hs_alias" = $1 + ;`) + if err != nil { + return nil, err + } + updateValidationStmt, err := db.Prepare(`UPDATE taler_directory.validations SET "created_at" = $2, "duration" = $3, @@ -94,30 +191,16 @@ func UpdateValidationInDatabase(db *sql.DB, v *Validation) error { "last_solution_timeframe_start" = $9, "order_id" = $10, "validator_name" = $11 - WHERE "h_alias" = $1;` - rows, err := db.Query(query, v.HAlias, v.CreatedAt, v.Duration, v.TargetURI, v.Challenge, v.ChallengeSent, v.RequiresPayment, v.SolutionAttemptCount, v.LastSolutionTimeframeStart, v.OrderID, v.ValidatorName) + WHERE "h_alias" = $1;`) if err != nil { - return err + return nil, err } - defer rows.Close() - return nil -} - -// Insert new validation into database -func InsertValidationIntoDatabase(db *sql.DB, v *Validation) error { - query := `INSERT INTO taler_directory.validations - VALUES (DEFAULT, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);` - rows, err := db.Query(query, v.CreatedAt, v.HAlias, v.Duration, v.TargetURI, v.Challenge, v.ChallengeSent, v.RequiresPayment, v.SolutionAttemptCount, v.LastSolutionTimeframeStart, v.OrderID, v.ValidatorName) + insertValidationStmt, err := db.Prepare(`INSERT INTO taler_directory.validations + VALUES (DEFAULT, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);`) if err != nil { - return err + return nil, err } - defer rows.Close() - return nil -} - -// Get Validation from database -func GetValidationFromDatabase(db *sql.DB, v *Validation, hAlias string, targetURI string, duration time.Duration) error { - query := `SELECT + getValidationStmt, err := db.Prepare(`SELECT "created_at", "h_alias", "duration", @@ -134,9 +217,116 @@ func GetValidationFromDatabase(db *sql.DB, v *Validation, hAlias string, targetU "h_alias"=$1 AND "target_uri"=$2 AND "duration"=$3 - ;` + ;`) + if err != nil { + return nil, err + } + getAllValidationsByHAliasStmt, err := db.Prepare(`SELECT + "created_at", + "h_alias", + "duration", + "target_uri", + "challenge", + "challenge_sent", + "requires_payment", + "solution_attempt_count", + "last_solution_timeframe_start", + "order_id", + "validator_name" + FROM taler_directory.validations + WHERE + "h_alias" = $1 + ;`) + if err != nil { + return nil, err + } + getFirstValidationByHAliasStmt, err := db.Prepare(`SELECT + "created_at", + "h_alias", + "duration", + "target_uri", + "challenge", + "challenge_sent", + "requires_payment", + "solution_attempt_count", + "last_solution_timeframe_start", + "order_id", + "validator_name" + FROM taler_directory.validations + WHERE + "h_alias"=$1 + ;`) + if err != nil { + return nil, err + } + getEntryByHAliasStmt, err := db.Prepare(`SELECT + "hs_alias", + "created_at", + "target_uri", + "duration" + FROM taler_directory.entries + WHERE + "hs_alias"=$1 + ;`) + if err != nil { + return nil, err + } + deleteStaleValidationsStmt, err := db.Prepare(`DELETE + FROM taler_directory.validations + WHERE + "created_at" < $1 + ;`) + if err != nil { + return nil, err + } + deleteValidationsByHAliasStmt, err := db.Prepare(`DELETE + FROM taler_directory.validations + WHERE + "h_alias" = $1 + ;`) + if err != nil { + return nil, err + } + return &TaldirDatabase{ + db: db, + getEntryByHAliasStmt: getEntryByHAliasStmt, + insertEntryStmt: insertEntryStmt, + updateEntryStmt: updateEntryStmt, + deleteEntryStmt: deleteEntryStmt, + getValidationStmt: getValidationStmt, + getAllValidationsByHAliasStmt: getAllValidationsByHAliasStmt, + getFirstValidationByHAliasStmt: getFirstValidationByHAliasStmt, + insertValidationStmt: insertValidationStmt, + updateValidationStmt: updateValidationStmt, + deleteStaleValidationsStmt: deleteStaleValidationsStmt, + deleteValidationsByHAliasStmt: deleteValidationsByHAliasStmt, + }, nil +} + +// UpdateValidationInDatabase updates a validation in database +func (db *TaldirDatabase) UpdateValidationInDatabase(v *Validation) error { + rows, err := db.updateValidationStmt.Query(v.HAlias, v.CreatedAt, v.Duration, v.TargetURI, v.Challenge, v.ChallengeSent, v.RequiresPayment, v.SolutionAttemptCount, v.LastSolutionTimeframeStart, v.OrderID, v.ValidatorName) + if err != nil { + return err + } + defer rows.Close() + return nil +} + +// InsertValidationIntoDatabase inserts a new validation into database +func (db *TaldirDatabase) InsertValidationIntoDatabase(v *Validation) error { + rows, err := db.insertValidationStmt.Query(v.CreatedAt, v.HAlias, v.Duration, v.TargetURI, v.Challenge, v.ChallengeSent, v.RequiresPayment, v.SolutionAttemptCount, v.LastSolutionTimeframeStart, v.OrderID, v.ValidatorName) + if err != nil { + return err + } + defer rows.Close() + return nil +} + +// GetValidationFromDatabase gets a Validation from database +func (db *TaldirDatabase) GetValidationFromDatabase(v *Validation, hAlias string, targetURI string, duration time.Duration) error { // Execute Query - rows, err := db.Query(query, hAlias, targetURI, duration.Microseconds()) + rows, err := db.getValidationStmt.Query(hAlias, targetURI, duration.Microseconds()) if err != nil { return err } @@ -161,26 +351,10 @@ func GetValidationFromDatabase(db *sql.DB, v *Validation, hAlias string, targetU ) } -// Get all Validations by hash-salted alias from database -func GetAllValidationsByHAliasFromDatabase(db *sql.DB, hAlias string) ([]Validation, error) { - query := `SELECT - "created_at", - "h_alias", - "duration", - "target_uri", - "challenge", - "challenge_sent", - "requires_payment", - "solution_attempt_count", - "last_solution_timeframe_start", - "order_id", - "validator_name" - FROM taler_directory.validations - WHERE - "h_alias" = $1 - ;` +// GetAllValidationsByHAliasFromDatabase gets all Validations by hash-salted alias from database +func (db *TaldirDatabase) GetAllValidationsByHAliasFromDatabase(hAlias string) ([]Validation, error) { // Execute Query - rows, err := db.Query(query, hAlias) + rows, err := db.getAllValidationsByHAliasStmt.Query(hAlias) if err != nil { return []Validation{}, err } @@ -210,26 +384,10 @@ func GetAllValidationsByHAliasFromDatabase(db *sql.DB, hAlias string) ([]Validat return validations, nil } -// Get Hash-salted alias from database -func GetFirstValidationByHAliasFromDatabase(db *sql.DB, v *Validation, hAlias string) error { - query := `SELECT - "created_at", - "h_alias", - "duration", - "target_uri", - "challenge", - "challenge_sent", - "requires_payment", - "solution_attempt_count", - "last_solution_timeframe_start", - "order_id", - "validator_name" - FROM taler_directory.validations - WHERE - "h_alias"=$1 - ;` +// GetFirstValidationByHAliasFromDatabase gets the first Hash-salted alias from database +func (db *TaldirDatabase) GetFirstValidationByHAliasFromDatabase(v *Validation, hAlias string) error { // Execute Query - rows, err := db.Query(query, hAlias) + rows, err := db.getFirstValidationByHAliasStmt.Query(hAlias) if err != nil { return err } @@ -253,8 +411,8 @@ func GetFirstValidationByHAliasFromDatabase(db *sql.DB, v *Validation, hAlias st ) } -// Get Hash-salted alias from database -func GetAllEntriesFromDatabase(db *sql.DB) ([]Entry, error) { +// GetAllEntriesFromDatabase gets all Hash-salted aliases from database +func (db *TaldirDatabase) GetAllEntriesFromDatabase() ([]Entry, error) { query := `SELECT "hs_alias", "created_at", @@ -265,7 +423,7 @@ func GetAllEntriesFromDatabase(db *sql.DB) ([]Entry, error) { 1 = 1 ;` // Execute Query - rows, err := db.Query(query) + rows, err := db.db.Query(query) if err != nil { return []Entry{}, err } @@ -287,19 +445,10 @@ func GetAllEntriesFromDatabase(db *sql.DB) ([]Entry, error) { return entries, nil } -// Get Hash-salted alias from database -func GetEntryByHsAliasFromDatabase(db *sql.DB, e *Entry, hsAlias string) error { - query := `SELECT - "hs_alias", - "created_at", - "target_uri", - "duration" - FROM taler_directory.entries - WHERE - "hs_alias"=$1 - ;` +// GetEntryByHsAliasFromDatabase gets the Hash-salted alias from database +func (db *TaldirDatabase) GetEntryByHsAliasFromDatabase(e *Entry, hsAlias string) error { // Execute Query - rows, err := db.Query(query, hsAlias) + rows, err := db.getEntryByHAliasStmt.Query(hsAlias) if err != nil { return err } @@ -317,23 +466,18 @@ func GetEntryByHsAliasFromDatabase(db *sql.DB, e *Entry, hsAlias string) error { } // DeleteStaleValidationsFromDatabase purges stale validations -func DeleteStaleValidationsFromDatabase(db *sql.DB, validationExpiration time.Duration) (int64, error) { +func (db *TaldirDatabase) DeleteStaleValidationsFromDatabase(validationExpiration time.Duration) (int64, error) { var ctx context.Context ctx, stop := context.WithCancel(context.Background()) defer stop() - conn, err := db.Conn(ctx) + conn, err := db.db.Conn(ctx) if err != nil { return 0, err } defer conn.Close() - query := `DELETE - FROM taler_directory.validations - WHERE - "created_at" < $1 - ;` // Execute Query cutoffTime := time.Now().Add(-validationExpiration) - result, err := conn.ExecContext(ctx, query, cutoffTime.UnixMicro()) + result, err := db.deleteStaleValidationsStmt.ExecContext(ctx, cutoffTime.UnixMicro()) if err != nil { return 0, err } @@ -344,32 +488,27 @@ func DeleteStaleValidationsFromDatabase(db *sql.DB, validationExpiration time.Du return rows, nil } -func ClearDatabase(db *sql.DB) error { - _, err := DeleteAllEntriesFromDatabase(db) +func (db *TaldirDatabase) ClearDatabase() error { + _, err := db.DeleteAllEntriesFromDatabase() if err != nil { return err } - _, err = DeleteAllValidationsFromDatabase(db) + _, err = db.DeleteAllValidationsFromDatabase() return err } // DeleteValidationsByHAliasFromDatabase purges Validations -func DeleteValidationsByHAliasFromDatabase(db *sql.DB, hAlias string) (int64, error) { +func (db *TaldirDatabase) DeleteValidationsByHAliasFromDatabase(hAlias string) (int64, error) { var ctx context.Context ctx, stop := context.WithCancel(context.Background()) defer stop() - conn, err := db.Conn(ctx) + conn, err := db.db.Conn(ctx) if err != nil { return 0, err } defer conn.Close() - query := `DELETE - FROM taler_directory.validations - WHERE - "h_alias" = $1 - ;` // Execute Query - result, err := conn.ExecContext(ctx, query, hAlias) + result, err := db.deleteValidationsByHAliasStmt.ExecContext(ctx, hAlias) if err != nil { return 0, err } @@ -380,12 +519,12 @@ func DeleteValidationsByHAliasFromDatabase(db *sql.DB, hAlias string) (int64, er return rows, nil } -// Purge Validations -func DeleteAllValidationsFromDatabase(db *sql.DB) (int64, error) { +// DeleteAllValidationsFromDatabase purges all Validations +func (db *TaldirDatabase) DeleteAllValidationsFromDatabase() (int64, error) { var ctx context.Context ctx, stop := context.WithCancel(context.Background()) defer stop() - conn, err := db.Conn(ctx) + conn, err := db.db.Conn(ctx) if err != nil { return 0, err } @@ -407,17 +546,17 @@ func DeleteAllValidationsFromDatabase(db *sql.DB) (int64, error) { return rows, nil } -// Purge Validations -func DeleteValidationFromDatabase(db *sql.DB, v *Validation) (int64, error) { - return DeleteValidationsByHAliasFromDatabase(db, v.HAlias) +// DeleteValidationFromDatabase purges a Validation +func (db *TaldirDatabase) DeleteValidationFromDatabase(v *Validation) (int64, error) { + return db.DeleteValidationsByHAliasFromDatabase(v.HAlias) } -// Purge Entries -func DeleteAllEntriesFromDatabase(db *sql.DB) (int64, error) { +// DeleteAllEntriesFromDatabase purges Entries +func (db *TaldirDatabase) DeleteAllEntriesFromDatabase() (int64, error) { var ctx context.Context ctx, stop := context.WithCancel(context.Background()) defer stop() - conn, err := db.Conn(ctx) + conn, err := db.db.Conn(ctx) if err != nil { return 0, err } @@ -439,23 +578,18 @@ func DeleteAllEntriesFromDatabase(db *sql.DB) (int64, error) { return rows, nil } -// Delete Entry -func DeleteEntryFromDatabase(db *sql.DB, e *Entry) (int64, error) { +// DeleteEntryFromDatabase deletes an Entry +func (db *TaldirDatabase) DeleteEntryFromDatabase(e *Entry) (int64, error) { var ctx context.Context ctx, stop := context.WithCancel(context.Background()) defer stop() - conn, err := db.Conn(ctx) + conn, err := db.db.Conn(ctx) if err != nil { return 0, err } defer conn.Close() - query := `DELETE - FROM taler_directory.entries - WHERE - "hs_alias" = $1 - ;` // Execute Query - result, err := conn.ExecContext(ctx, query, e.HsAlias) + result, err := db.deleteEntryStmt.ExecContext(ctx, e.HsAlias) if err != nil { return 0, err } @@ -466,15 +600,11 @@ func DeleteEntryFromDatabase(db *sql.DB, e *Entry) (int64, error) { return rows, nil } -// Update Entry in database -func UpdateEntryInDatabase(db *sql.DB, e *Entry) error { - query := `UPDATE taler_directory.entries - SET - "created_at" = $2, - "target_uri" = $3, - "duration" = $4 - WHERE "hs_alias" = $1;` - rows, err := db.Query(query, e.HsAlias, e.CreatedAt, e.TargetURI, e.Duration) +var () + +// UpdateEntryInDatabase updates the Entry in database +func (db *TaldirDatabase) UpdateEntryInDatabase(e *Entry) error { + rows, err := db.updateEntryStmt.Query(e.HsAlias, e.CreatedAt, e.TargetURI, e.Duration) if err != nil { return err } @@ -483,11 +613,10 @@ func UpdateEntryInDatabase(db *sql.DB, e *Entry) error { } // InsertEntryIntoDatabase inserts new Entry into database -func InsertEntryIntoDatabase(db *sql.DB, e *Entry) error { +func (db *TaldirDatabase) InsertEntryIntoDatabase(e *Entry) error { + var err error e.CreatedAt = time.Now().UnixMicro() - query := `INSERT INTO taler_directory.entries - VALUES (DEFAULT, $1, $2, $3, $4);` - rows, err := db.Query(query, e.HsAlias, e.CreatedAt, e.TargetURI, e.Duration) + rows, err := db.insertEntryStmt.Query(e.HsAlias, e.CreatedAt, e.TargetURI, e.Duration) if err != nil { return err } diff --git a/pkg/taldir/taldir.go b/pkg/taldir/taldir.go @@ -40,7 +40,6 @@ import ( "strings" "time" - "database/sql" "github.com/gertd/go-pluralize" "github.com/gorilla/mux" "github.com/kataras/i18n" @@ -60,7 +59,7 @@ type Taldir struct { Router *mux.Router // The main DB handle - DB *sql.DB + DB *TaldirDatabase // Our configuration from the config.json Cfg TaldirConfig @@ -255,7 +254,7 @@ func (t *Taldir) getSingleEntry(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) var entry Entry hsAlias := saltHAlias(vars["h_alias"], t.Salt) - var err = GetEntryByHsAliasFromDatabase(t.DB, &entry, hsAlias) + var err = t.DB.GetEntryByHsAliasFromDatabase(&entry, hsAlias) if err == nil { w.Header().Set("Content-Type", "application/json") resp, _ := json.Marshal(entry) @@ -288,7 +287,7 @@ func (t *Taldir) disseminateStart(e Entry) { // Disseminate all entries func (t *Taldir) disseminateEntries() error { - entries, err := GetAllEntriesFromDatabase(t.DB) + entries, err := t.DB.GetAllEntriesFromDatabase() if nil != err { return err } @@ -340,7 +339,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { w.Write(resp) return } - err = GetFirstValidationByHAliasFromDatabase(t.DB, &validation, vars["h_alias"]) + err = t.DB.GetFirstValidationByHAliasFromDatabase(&validation, vars["h_alias"]) t.Logger.Logf(LogDebug, "Got validation %v", validation) if err != nil { w.WriteHeader(http.StatusNotFound) @@ -357,7 +356,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { validation.LastSolutionTimeframeStart = time.Now().UnixMicro() validation.SolutionAttemptCount = 1 } - UpdateValidationInDatabase(t.DB, &validation) + t.DB.UpdateValidationInDatabase(&validation) t.Logger.Logf(LogDebug, "Generating solution from %s and %s", validation.TargetURI, validation.Challenge) expectedSolution := util.GenerateSolution(validation.TargetURI, validation.Challenge) @@ -366,7 +365,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusForbidden) return } - _, err = DeleteValidationFromDatabase(t.DB, &validation) + _, err = t.DB.DeleteValidationFromDatabase(&validation) if err != nil { t.Logger.Logf(LogError, "Error deleting validation: %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -374,10 +373,10 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { } entry.HsAlias = saltHAlias(validation.HAlias, t.Salt) tmpDuration := (entry.Duration + validation.Duration) * 1000 - err = GetEntryByHsAliasFromDatabase(t.DB, &entry, entry.HsAlias) + err = t.DB.GetEntryByHsAliasFromDatabase(&entry, entry.HsAlias) if err == nil { if validation.TargetURI == "" { - _, err = DeleteEntryFromDatabase(t.DB, &entry) + _, err = t.DB.DeleteEntryFromDatabase(&entry) if err != nil { t.Logger.Logf(LogError, "Error deleting entry: %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -388,7 +387,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { } else { entry.TargetURI = validation.TargetURI entry.Duration = tmpDuration - err = UpdateEntryInDatabase(t.DB, &entry) + err = t.DB.UpdateEntryInDatabase(&entry) t.Logger.Logf(LogDebug, "Updated entry in database to: %v", entry) if err != nil { t.Logger.Logf(LogError, "Error updating entry: %v", err) @@ -403,7 +402,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { t.Logger.Logf(LogWarning, "Validated a deletion request but no entry found for `%s'\n", entry.HsAlias) } else { entry.TargetURI = validation.TargetURI - err = InsertEntryIntoDatabase(t.DB, &entry) + err = t.DB.InsertEntryIntoDatabase(&entry) if err != nil { t.Logger.Logf(LogError, "Error inserting entry: %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -416,7 +415,7 @@ func (t *Taldir) validationRequest(w http.ResponseWriter, r *http.Request) { } func (t *Taldir) isRateLimited(hAlias string) (bool, error) { - validations, err := GetAllValidationsByHAliasFromDatabase(t.DB, hAlias) + validations, err := t.DB.GetAllValidationsByHAliasFromDatabase(hAlias) // NOTE: Check rate limit if err == nil { // Limit re-initiation attempts to ValidationInitiationMax times @@ -481,7 +480,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { validation.HAlias = hAlias validation.ValidatorName = validator.Name() hsAlias := saltHAlias(validation.HAlias, t.Salt) - err = GetEntryByHsAliasFromDatabase(t.DB, &entry, hsAlias) + err = t.DB.GetEntryByHsAliasFromDatabase(&entry, hsAlias) // Round to the nearest multiple of a month reqDuration := time.Duration(req.Duration * 1000) reqDuration = reqDuration.Round(monthDuration) @@ -515,11 +514,11 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { } jsonResp, _ := json.Marshal(rlResponse) w.Write(jsonResp) - DeleteValidationFromDatabase(t.DB, &validation) + t.DB.DeleteValidationFromDatabase(&validation) return } t.Logger.Logf(LogDebug, "Looking for validation with %v %v %v\n", hAlias, req.TargetURI, reqDuration.Microseconds()) - err = GetValidationFromDatabase(t.DB, &validation, hAlias, req.TargetURI, reqDuration) + err = t.DB.GetValidationFromDatabase(&validation, hAlias, req.TargetURI, reqDuration) validationExists := (nil == err) t.Logger.Logf(LogDebug, "Validation exists %v\n", validationExists) // FIXME: Always set new challenge? @@ -530,7 +529,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { validation.Duration = reqDuration.Microseconds() validation.CreatedAt = validation.LastSolutionTimeframeStart t.Logger.Logf(LogDebug, "Storing new validation %v\n", validation) - err = InsertValidationIntoDatabase(t.DB, &validation) + err = t.DB.InsertValidationIntoDatabase(&validation) if nil != err { t.Logger.Logf(LogError, "Error inserting validation! %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -571,7 +570,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { return } if len(payto) != 0 { - err = UpdateValidationInDatabase(t.DB, &validation) + err = t.DB.UpdateValidationInDatabase(&validation) if nil != err { t.Logger.Logf(LogError, "Error inserting validation! %v", err) w.WriteHeader(http.StatusInternalServerError) @@ -583,7 +582,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { } // In this case, this order was paid } - err = UpdateValidationInDatabase(t.DB, &validation) + err = t.DB.UpdateValidationInDatabase(&validation) if err != nil { t.Logger.Logf(LogError, "%s\n", err.Error()) w.WriteHeader(http.StatusInternalServerError) @@ -595,7 +594,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request) { redirectionLink, err := validator.RegistrationStart(topic, link, message, req.Alias, validation.Challenge) if err != nil { t.Logger.Logf(LogError, "%s\n", err.Error()) - DeleteValidationFromDatabase(t.DB, &validation) + t.DB.DeleteValidationFromDatabase(&validation) w.WriteHeader(http.StatusInternalServerError) return } @@ -660,7 +659,7 @@ func (t *Taldir) validationPage(w http.ResponseWriter, r *http.Request) { var png []byte var validation Validation - err := GetFirstValidationByHAliasFromDatabase(t.DB, &validation, vars["h_alias"]) + err := t.DB.GetFirstValidationByHAliasFromDatabase(&validation, vars["h_alias"]) w.Header().Set("Content-Type", "text/html; charset=utf-8") if err != nil { // This validation does not exist. @@ -733,7 +732,7 @@ func (t *Taldir) validationPage(w http.ResponseWriter, r *http.Request) { // ClearDatabase nukes the database (for tests) func (t *Taldir) ClearDatabase() { - err := ClearDatabase(t.DB) + err := t.DB.ClearDatabase() if err != nil { t.Logger.Logf(LogWarning, "Error clearing database: %v", err) } @@ -835,7 +834,7 @@ func (t *Taldir) typeLookupResultPage(w http.ResponseWriter, r *http.Request) { hAliasBin := HashAlias(val.Name(), r.URL.Query().Get("alias")) hAlias := util.Base32CrockfordEncode(hAliasBin[:]) hsAlias := saltHAlias(hAlias, t.Salt) - err := GetEntryByHsAliasFromDatabase(t.DB, &entry, hsAlias) + err := t.DB.GetEntryByHsAliasFromDatabase(&entry, hsAlias) if err != nil { t.Logger.Logf(LogError, "`%s` not found.\n", hAlias) } else { @@ -1042,7 +1041,7 @@ func (t *Taldir) Initialize(cfg TaldirConfig) { t.DB = cfg.Db if cfg.Ini.GetBool("directory", "purge_mappings_on_startup_dangerous", false) { t.Logger.Logf(LogWarning, "DANGER Purging mappings!") - num, err := DeleteAllEntriesFromDatabase(t.DB) + num, err := t.DB.DeleteAllEntriesFromDatabase() if err != nil { t.Logger.Logf(LogDebug, "Error purging entries: `%v'.\n", err) } @@ -1056,7 +1055,7 @@ func (t *Taldir) Initialize(cfg TaldirConfig) { } go func() { for { - num, err := DeleteStaleValidationsFromDatabase(t.DB, validationExp) + num, err := t.DB.DeleteStaleValidationsFromDatabase(validationExp) if err != nil { t.Logger.Logf(LogDebug, "Error purging stale validations: `%v'.\n", err) }