commit b6485165f2a2f91f779156d47ea84b45f396a90b
parent ec0ad0a973d4bb35009c6240fa49f15482d9262f
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Fri, 25 Apr 2025 22:07:05 +0200
refactoring
Diffstat:
3 files changed, 51 insertions(+), 29 deletions(-)
diff --git a/cmd/mailbox-server/main.go b/cmd/mailbox-server/main.go
@@ -27,14 +27,14 @@ import (
"net/http"
"os"
- mailbox "taler.net/taler-mailbox/pkg/rest"
"github.com/schanzen/taler-go/pkg/merchant"
+ mailbox "taler.net/taler-mailbox/pkg/rest"
)
var m mailbox.Mailbox
func handleRequests(m *mailbox.Mailbox) {
- log.Fatal(http.ListenAndServe(m.Cfg.Section("mailbox").Key("bind_to").MustString("localhost:11000"), m.Router))
+ log.Fatal(http.ListenAndServe(m.Cfg.Ini.Section("mailbox").Key("bind_to").MustString("localhost:11000"), m.Router))
}
func main() {
@@ -46,21 +46,25 @@ func main() {
cfgfile = *cfgFlag
}
m := mailbox.Mailbox{}
- cfg, err := ini.Load(cfgfile)
+ iniCfg, err := ini.Load(cfgfile)
if err != nil {
log.Printf("Failed to read config: %v", err)
os.Exit(1)
}
psqlconn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
- m.Cfg.Section("mailbox-pq").Key("host").MustString("localhost"),
- m.Cfg.Section("mailbox-pq").Key("port").MustInt64(5432),
- m.Cfg.Section("mailbox-pq").Key("user").MustString("taler-mailbox"),
- m.Cfg.Section("mailbox-pq").Key("password").MustString("secret"),
- m.Cfg.Section("mailbox-pq").Key("db_name").MustString("taler-mailbox"))
+ iniCfg.Section("mailbox-pq").Key("host").MustString("localhost"),
+ iniCfg.Section("mailbox-pq").Key("port").MustInt64(5432),
+ iniCfg.Section("mailbox-pq").Key("user").MustString("taler-mailbox"),
+ iniCfg.Section("mailbox-pq").Key("password").MustString("secret"),
+ iniCfg.Section("mailbox-pq").Key("db_name").MustString("taler-mailbox"))
db := postgres.Open(psqlconn)
- merchURL := m.Cfg.Section("mailbox").Key("merchant_baseurl_private").MustString("http://merchant.mailbox/instances/myInstance")
- merchToken := m.Cfg.Section("mailbox").Key("merchant_token").MustString("secretAccessToken")
- merch := merchant.NewMerchant(merchURL, merchToken)
- m.Initialize(cfg, db, merch)
+ merchURL := iniCfg.Section("mailbox").Key("merchant_baseurl_private").MustString("http://merchant.mailbox/instances/myInstance")
+ merchToken := iniCfg.Section("mailbox").Key("merchant_token").MustString("secretAccessToken")
+ merch := merchant.NewMerchant(merchURL, merchToken)
+ m.Initialize(mailbox.MailboxConfig{
+ Version: "1.0.0",
+ Db: db,
+ Ini: iniCfg,
+ Merchant: merch})
handleRequests(&m)
}
diff --git a/cmd/mailbox-server/main_test.go b/cmd/mailbox-server/main_test.go
@@ -17,10 +17,10 @@ import (
gnunetutil "git.gnunet.org/gnunet-go.git/pkg/util"
"github.com/schanzen/taler-go/pkg/merchant"
"github.com/schanzen/taler-go/pkg/util"
+ "gopkg.in/ini.v1"
+ "gorm.io/driver/sqlite"
"taler.net/taler-mailbox/internal/gana"
"taler.net/taler-mailbox/pkg/rest"
- "gopkg.in/ini.v1"
- "gorm.io/driver/sqlite"
)
var a mailbox.Mailbox
@@ -73,7 +73,7 @@ func TestMain(m *testing.M) {
fmt.Printf("Failed to read config: %v", err)
os.Exit(1)
}
- db := sqlite.Open("file::memory:?cache=shared")
+ db := sqlite.Open("file::memory:?cache=shared")
merchServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var orderResp merchant.PostOrderRequest
if r.URL.Path == "/config" {
@@ -106,8 +106,12 @@ func TestMain(m *testing.M) {
}
}))
defer merchServer.Close()
- merch := merchant.NewMerchant(merchServer.URL, "supersecret")
- a.Initialize(cfg, db, merch)
+ merch := merchant.NewMerchant(merchServer.URL, "supersecret")
+ a.Initialize(mailbox.MailboxConfig{
+ Version: "testing",
+ Db: db,
+ Merchant: merch,
+ Ini: cfg})
testWalletAlice, testWalletAlicePriv, _ = ed25519.GenerateKey(nil)
h := sha512.New()
h.Write(testWalletAlice)
diff --git a/pkg/rest/mailbox.go b/pkg/rest/mailbox.go
@@ -56,8 +56,8 @@ type Mailbox struct {
// The main DB handle
Db *gorm.DB
- // Our configuration from the config.json
- Cfg *ini.File
+ // Our configuration from the ini
+ Cfg MailboxConfig
// Fixed size of message bodies
MessageBodyBytes int64 `json:"message_body_bytes"`
@@ -135,7 +135,7 @@ type InboxEntry struct {
}
func (m *Mailbox) configResponse(w http.ResponseWriter, r *http.Request) {
- dpStr := m.Cfg.Section("mailbox").Key("delivery_period").MustString("72h")
+ dpStr := m.Cfg.Ini.Section("mailbox").Key("delivery_period").MustString("72h")
dp, err := time.ParseDuration(dpStr)
if err != nil {
log.Fatal(err)
@@ -345,11 +345,11 @@ func (m *Mailbox) deleteMessagesResponse(w http.ResponseWriter, r *http.Request)
}
func (m *Mailbox) termsResponse(w http.ResponseWriter, r *http.Request) {
- tos.ServiceTermsResponse(m.Cfg.Section("mailbox"), w, r)
+ tos.ServiceTermsResponse(m.Cfg.Ini.Section("mailbox"), w, r)
}
func (m *Mailbox) privacyResponse(w http.ResponseWriter, r *http.Request) {
- tos.PrivacyPolicyResponse(m.Cfg.Section("mailbox"), w, r)
+ tos.PrivacyPolicyResponse(m.Cfg.Ini.Section("mailbox"), w, r)
}
func (m *Mailbox) setupHandlers() {
@@ -368,22 +368,36 @@ func (m *Mailbox) setupHandlers() {
m.Router.HandleFunc("/{mailbox}", m.deleteMessagesResponse).Methods("DELETE")
}
+type MailboxConfig struct {
+ // Version
+ Version string
+
+ // Configuration
+ Ini *ini.File
+
+ // DB connection
+ Db gorm.Dialector
+
+ // Merchant connection
+ Merchant merchant.Merchant
+}
+
// Initialize the Mailbox instance with cfgfile
-func (m *Mailbox) Initialize(cfg *ini.File, db gorm.Dialector, merch merchant.Merchant) {
+func (m *Mailbox) Initialize(cfg MailboxConfig) {
m.Cfg = cfg
- if m.Cfg.Section("mailbox").Key("production").MustBool(false) {
+ if cfg.Ini.Section("mailbox").Key("production").MustBool(false) {
fmt.Println("Production mode enabled")
}
- m.BaseUrl = m.Cfg.Section("mailbox").Key("base_url").MustString("https://example.com")
- m.MessageBodyBytes = m.Cfg.Section("mailbox").Key("message_body_bytes").MustInt64(256)
+ m.BaseUrl = cfg.Ini.Section("mailbox").Key("base_url").MustString("https://example.com")
+ m.MessageBodyBytes = cfg.Ini.Section("mailbox").Key("message_body_bytes").MustInt64(256)
// FIXME actual cost
- fee, err := talerutil.ParseAmount(m.Cfg.Section("mailbox").Key("message_fee").MustString("KUDOS:1"))
+ fee, err := talerutil.ParseAmount(cfg.Ini.Section("mailbox").Key("message_fee").MustString("KUDOS:1"))
if err != nil {
fmt.Printf("Failed to parse cost: %v", err)
os.Exit(1)
}
m.MessageFee = fee
- _db, err := gorm.Open(db, &gorm.Config{
+ _db, err := gorm.Open(cfg.Db, &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
@@ -394,6 +408,6 @@ func (m *Mailbox) Initialize(cfg *ini.File, db gorm.Dialector, merch merchant.Me
panic(err)
}
- m.Merchant = merch
+ m.Merchant = cfg.Merchant
m.setupHandlers()
}