diff --git a/.gitignore b/.gitignore index cdf3587bb50088283fbc05c8c363741c902e2be8..57c87e13ef2d33c4f526de9c2b3549362f0f1b41 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /logs media-repo.yaml +homeserver.yaml vendor/pkg vendor/src diff --git a/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go b/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go new file mode 100644 index 0000000000000000000000000000000000000000..1103202f63d06e632dc1654369ea0ef9eb19d04d --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/cmd/import_synapse/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "fmt" + + "github.com/turt2live/matrix-media-repo/config" + "github.com/turt2live/matrix-media-repo/storage" + "github.com/turt2live/matrix-media-repo/synapse" +) + +func main() { + c, err := config.ReadConfig() + if err != nil { + panic(err) + } + + db, err := storage.OpenDatabase(c.Database.Postgres) + if err != nil { + panic(err) + } + + homeserverYamlPath := flag.String("homeserver", "homeserver.yaml", "Path to your homeserver.yaml") + moveFiles := flag.Bool("move", false, "If set, files will be moved instead of copied") + importRemote := flag.Bool("remote", false, "If set, remote media will also be imported") + flag.Parse() + + hsConfig, err := synapse.ReadConfig(*homeserverYamlPath) + if err != nil { + panic(err) + } + + fmt.Println(*moveFiles) + fmt.Println(*importRemote) + fmt.Println(*db) + fmt.Println(hsConfig.GetConnectionString()) +} \ No newline at end of file diff --git a/src/github.com/turt2live/matrix-media-repo/synapse/homeserver_yaml.go b/src/github.com/turt2live/matrix-media-repo/synapse/homeserver_yaml.go new file mode 100644 index 0000000000000000000000000000000000000000..8dfc9fb964b2e1c6dc55bbd68879c465c2decb63 --- /dev/null +++ b/src/github.com/turt2live/matrix-media-repo/synapse/homeserver_yaml.go @@ -0,0 +1,50 @@ +package synapse + +import ( + "errors" + "io/ioutil" + "os" + + "gopkg.in/yaml.v2" +) + +type HomeserverYaml struct { + Database struct { + Name string `yaml:"name"` + Arguments struct { + Username string `yaml:"user"` + Password string `yaml:"password"` + Database string `yaml:"database"` + Hostname string `yaml:"host"` + } `yaml:"args"` + } `yaml:"database"` +} + +func ReadConfig(yamlPath string) (HomeserverYaml, error) { + c := &HomeserverYaml{} + + f, err := os.Open(yamlPath) + if err != nil { + return *c, err + } + + defer f.Close() + + buffer, err := ioutil.ReadAll(f) + err = yaml.Unmarshal(buffer, &c) + if err != nil { + return *c, err + } + + return *c, nil +} + +func (c *HomeserverYaml) GetConnectionString() (string) { + if c.Database.Name != "psycopg2" { + panic(errors.New("homeserver database must be postgres")) + } + + a := c.Database.Arguments + + return "postgres://" + a.Username + ":" + a.Password + "@" + a.Hostname + "/" + a.Database + "?sslmode=disable" +} \ No newline at end of file