aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-04 11:18:08 +0100
committerGitHub <noreply@github.com>2020-06-04 11:18:08 +0100
commite7d1ac84c32a10f8deb7bcfc94531386312179c7 (patch)
treecfb8176ebcd9cd1087aa1c34f6f362dd2851dcdc /internal
parentd4f9a4bb97c0c66963d7fd9c1395614a2198112e (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.go9
-rw-r--r--internal/sqlutil/uri.go24
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
+}