Use $XDG_DATA_HOME as working directory root by default.

This commit is contained in:
Roman Dmitrienko 2024-03-22 21:45:10 +01:00
parent daca4e6262
commit b7ed09d86b
6 changed files with 36 additions and 16 deletions

View file

@ -1,4 +1,4 @@
#DATABASE_URI=file:.data/nwc.db
#DATABASE_URI=nwc.db
#NOSTR_PRIVKEY=
#COOKIE_SECRET=secretsecret
#RELAY=wss://relay.getalby.com/v1
@ -9,4 +9,4 @@
#LN_BACKEND_TYPE=LND
#LND_CERT_FILE=/home/YOUR_USERNAME/.polar/networks/1/volumes/lnd/alice/tls.cert
#LND_ADDRESS=127.0.0.1:10001
#LND_MACAROON_FILE=/home/YOUR_USERNAME/.polar/networks/1/volumes/lnd/alice/data/chain/bitcoin/regtest/admin.macaroon
#LND_MACAROON_FILE=/home/YOUR_USERNAME/.polar/networks/1/volumes/lnd/alice/data/chain/bitcoin/regtest/admin.macaroon

View file

@ -103,9 +103,9 @@ Breez SDK requires gcc to build the Breez bindings. Run `choco install mingw` an
- `CLIENT_NOSTR_PUBKEY`: if set, this service will only listen to events authored by this public key. You can set this to your own nostr public key.
- `RELAY`: default: "wss://relay.getalby.com/v1"
- `COOKIE_SECRET`: a randomly generated secret string. (only needed in http mode)
- `DATABASE_URI`: a sqlite filename. Default: .data/nwc.db
- `DATABASE_URI`: a sqlite filename. Default: $XDG_DATA_HOME/nostr-wallet-connect/nwc.db
- `PORT`: the port on which the app should listen on (default: 8080)
- `WORK_DIR`: directory to store NWC data files. Default: .data
- `WORK_DIR`: directory to store NWC data files. Default: $XDG_DATA_HOME/nostr-wallet-connect
- `LOG_LEVEL`: log level for the application. Higher is more verbose. Default: 4 (info)
### LND Backend parameters

1
go.mod
View file

@ -5,6 +5,7 @@ go 1.21
toolchain go1.21.1
require (
github.com/adrg/xdg v0.4.0
github.com/breez/breez-sdk-go v0.3.4
github.com/davrux/echo-logrus/v4 v4.0.3
github.com/getAlby/glalby-go v0.0.0-20240319195439-4ec5332e5493

3
go.sum
View file

@ -45,6 +45,8 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg=
@ -1100,6 +1102,7 @@ golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

View file

@ -13,9 +13,9 @@ type AppConfig struct {
LNDAddress string `envconfig:"LND_ADDRESS"`
LNDCertFile string `envconfig:"LND_CERT_FILE"`
LNDMacaroonFile string `envconfig:"LND_MACAROON_FILE"`
Workdir string `envconfig:"WORK_DIR" default:".data"`
Workdir string `envconfig:"WORK_DIR"`
Port string `envconfig:"PORT" default:"8080"`
DatabaseUri string `envconfig:"DATABASE_URI" default:".data/nwc.db"`
DatabaseUri string `envconfig:"DATABASE_URI" default:"nwc.db"`
CookieSecret string `envconfig:"COOKIE_SECRET"`
LogLevel string `envconfig:"LOG_LEVEL"`
LDKNetwork string `envconfig:"LDK_NETWORK" default:"bitcoin"`

View file

@ -2,31 +2,34 @@ package main
import (
"context"
"encoding/json"
"fmt"
"slices"
"strconv"
"sync"
"time"
"database/sql"
"encoding/json"
"errors"
"fmt"
"os"
"os/signal"
"path"
"path/filepath"
"slices"
"strconv"
"strings"
"sync"
"time"
"github.com/adrg/xdg"
"github.com/nbd-wtf/go-nostr"
"github.com/nbd-wtf/go-nostr/nip04"
"github.com/sirupsen/logrus"
"github.com/getAlby/nostr-wallet-connect/migrations"
"github.com/getAlby/nostr-wallet-connect/models/config"
"github.com/getAlby/nostr-wallet-connect/models/lnclient"
"github.com/glebarez/sqlite"
"github.com/joho/godotenv"
"github.com/kelseyhightower/envconfig"
"github.com/orandin/lumberjackrus"
"gorm.io/gorm"
"github.com/getAlby/nostr-wallet-connect/migrations"
"github.com/getAlby/nostr-wallet-connect/models/config"
"github.com/getAlby/nostr-wallet-connect/models/lnclient"
)
type Service struct {
@ -49,6 +52,10 @@ func NewService(ctx context.Context) (*Service, error) {
return nil, err
}
if appConfig.Workdir == "" {
appConfig.Workdir = filepath.Join(xdg.DataHome, "/nostr-wallet-connect")
}
logger := logrus.New()
logger.SetFormatter(&logrus.JSONFormatter{})
logger.SetOutput(os.Stdout)
@ -80,6 +87,15 @@ func NewService(ctx context.Context) (*Service, error) {
}
logger.AddHook(fileLoggerHook)
// If DATABASE_URI is a URI or a path, leave it unchanged.
// If it only contains a filename, prepend the workdir.
if !strings.HasPrefix(appConfig.DatabaseUri, "file:") {
databasePath, _ := filepath.Split(appConfig.DatabaseUri)
if databasePath == "" {
appConfig.DatabaseUri = filepath.Join(appConfig.Workdir, appConfig.DatabaseUri)
}
}
var db *gorm.DB
var sqlDb *sql.DB
db, err = gorm.Open(sqlite.Open(appConfig.DatabaseUri), &gorm.Config{})