commit 66a23e1c0f3684703dbecadfa606146e0c6b535f
parent 1ff91d12b5e40f78ed5742f032e978e2522f4572
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Sun, 22 Mar 2026 14:46:45 +0100
refactor for prepared statements
Diffstat:
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)
}