diff options
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 +} |