diff options
author | Kegsay <kegan@matrix.org> | 2020-06-04 11:18:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-04 11:18:08 +0100 |
commit | e7d1ac84c32a10f8deb7bcfc94531386312179c7 (patch) | |
tree | cfb8176ebcd9cd1087aa1c34f6f362dd2851dcdc /internal | |
parent | d4f9a4bb97c0c66963d7fd9c1395614a2198112e (diff) |
Add ParseFileURI and use it when dealing with file URIs (#1088)
* Add ParseFileURI and use it when dealing with file URIs
Fixes #1059
* Missing file
* Linting
Diffstat (limited to 'internal')
-rw-r--r-- | internal/basecomponent/base.go | 9 | ||||
-rw-r--r-- | internal/sqlutil/uri.go | 24 |
2 files changed, 27 insertions, 6 deletions
diff --git a/internal/basecomponent/base.go b/internal/basecomponent/base.go index beaf0e86..42d236f8 100644 --- a/internal/basecomponent/base.go +++ b/internal/basecomponent/base.go @@ -277,12 +277,9 @@ func setupNaffka(cfg *config.Dendrite) (sarama.Consumer, sarama.SyncProducer) { uri, err := url.Parse(string(cfg.Database.Naffka)) if err != nil || uri.Scheme == "file" { var cs string - if uri.Opaque != "" { // file:filename.db - cs = uri.Opaque - } else if uri.Path != "" { // file:///path/to/filename.db - cs = uri.Path - } else { - logrus.Panic("file uri has no filename") + cs, err = sqlutil.ParseFileURI(string(cfg.Database.Naffka)) + if err != nil { + logrus.WithError(err).Panic("Failed to parse naffka database file URI") } db, err = sqlutil.Open(internal.SQLiteDriverName(), cs, nil) if err != nil { diff --git a/internal/sqlutil/uri.go b/internal/sqlutil/uri.go new file mode 100644 index 00000000..f72e0242 --- /dev/null +++ b/internal/sqlutil/uri.go @@ -0,0 +1,24 @@ +package sqlutil + +import ( + "fmt" + "net/url" +) + +// ParseFileURI returns the filepath in the given file: URI. Specifically, this will handle +// both relative (file:foo.db) and absolute (file:///path/to/foo) paths. +func ParseFileURI(dataSourceName string) (string, error) { + uri, err := url.Parse(dataSourceName) + if err != nil { + return "", err + } + var cs string + if uri.Opaque != "" { // file:filename.db + cs = uri.Opaque + } else if uri.Path != "" { // file:///path/to/filename.db + cs = uri.Path + } else { + return "", fmt.Errorf("invalid file uri: %s", dataSourceName) + } + return cs, nil +} |