cleanup and switch to just sync token

This commit is contained in:
stryan 2023-10-12 20:51:08 -04:00
parent 54d876a989
commit 547977237c
4 changed files with 66 additions and 23 deletions

View File

@ -1,18 +1,21 @@
package matrixbotlib package matrixbotlib
import ( import (
"io"
"os"
"strings" "strings"
"gopkg.in/yaml.v2"
"maunium.net/go/mautrix" "maunium.net/go/mautrix"
"maunium.net/go/mautrix/event" "maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
) )
//NewMatrixClient returns a new logged in Mautrix Client struct // NewMatrixClient returns a new logged in Mautrix Client struct
func NewMatrixClient(config *MatrixClientConfig, store mautrix.Storer) (*mautrix.Client, error) { func NewMatrixClient(config *MatrixClientConfig, store mautrix.Storer) (*mautrix.Client, error) {
var client *mautrix.Client var client *mautrix.Client
var err error var err error
//make sure username is lower case otherwise token login breaks // make sure username is lower case otherwise token login breaks
uname := strings.ToLower(config.Username) uname := strings.ToLower(config.Username)
if config.Token == "" { if config.Token == "" {
client, err = mautrix.NewClient(config.Homeserver, "", "") client, err = mautrix.NewClient(config.Homeserver, "", "")
@ -37,11 +40,37 @@ func NewMatrixClient(config *MatrixClientConfig, store mautrix.Storer) (*mautrix
return client, err return client, err
} }
config.Token = loginRes.AccessToken config.Token = loginRes.AccessToken
WriteMatrixClientConfig(config) err = SyncToken(config)
if err != nil {
return nil, err
}
} }
return client, err return client, err
} }
func SyncToken(config *MatrixClientConfig) error {
file, err := os.OpenFile(config.filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
if err != nil {
return err
}
defer file.Close()
t := make(map[string]interface{})
data, err := io.ReadAll(file)
if err != nil {
return err
}
yaml.Unmarshal([]byte(data), &t)
t["token"] = config.Token
enc := yaml.NewEncoder(file)
err = enc.Encode(t)
if err != nil {
return err
}
return nil
}
// SetupAccountDataStore sets the client to use a AccountData store and filter appropriately // SetupAccountDataStore sets the client to use a AccountData store and filter appropriately
func SetupAccountDataStore(client *mautrix.Client, token string) error { func SetupAccountDataStore(client *mautrix.Client, token string) error {
dataFilter := &mautrix.Filter{ dataFilter := &mautrix.Filter{
@ -56,7 +85,7 @@ func SetupAccountDataStore(client *mautrix.Client, token string) error {
store := mautrix.NewAccountDataStore(token, client) store := mautrix.NewAccountDataStore(token, client)
fID, err := client.CreateFilter(dataFilter) fID, err := client.CreateFilter(dataFilter)
if err != nil { if err != nil {
//don't want to continue if we can't keep state // don't want to continue if we can't keep state
return err return err
} }
uid := client.UserID uid := client.UserID

View File

@ -1,43 +1,54 @@
package matrixbotlib package matrixbotlib
import ( import (
"io/ioutil" "errors"
"os" "os"
"github.com/kelseyhightower/envconfig"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
//MatrixClientConfig represents the config requires to log into the matrix server // MatrixClientConfig represents the config requires to log into the matrix server
type MatrixClientConfig struct { type MatrixClientConfig struct {
Homeserver string `yaml:"homeserver"` Homeserver string `required:"true" yaml:"homeserver"`
Domain string `yaml:"domain"` Domain string `required:"true" yaml:"domain"`
Dimension string `yaml:"dimension"` Dimension string `yaml:"dimension"`
Username string `yaml:"username"` Username string `required:"true" yaml:"username"`
Password string `yaml:"password"` Password string `required:"true" yaml:"password"`
Statefile string `yaml:"statefile,omitempty"` Statefile string `yaml:"statefile,omitempty"`
Token string `yaml:"token"` Token string `yaml:"token"`
filename string filename string
} }
//LoadMatrixClientConfig reads info from a file // LoadMatrixClientConfig reads info from a file
func LoadMatrixClientConfig(filename string) (*MatrixClientConfig, error) { func LoadMatrixClientConfig(filename string) (*MatrixClientConfig, error) {
yamlFile, err := ioutil.ReadFile(filename) cnf := MatrixClientConfig{}
cnf := &MatrixClientConfig{} if filename != "" {
yamlFile, err := os.ReadFile(filename)
if err == nil { if err == nil {
err = yaml.Unmarshal(yamlFile, cnf) err = yaml.Unmarshal(yamlFile, &cnf)
} else { } else {
return cnf, err return &cnf, err
} }
if err != nil { if err != nil {
return cnf, err return &cnf, err
} }
cnf.filename = filename cnf.filename = filename
return cnf, nil } else {
err := envconfig.Process("matrix", &cnf)
if err != nil {
return nil, err
}
}
return &cnf, nil
} }
//WriteMatrixClientConfig saves current running config to a file // WriteMatrixClientConfig saves current running config to a file
func WriteMatrixClientConfig(cnf *MatrixClientConfig) error { func WriteMatrixClientConfig(cnf *MatrixClientConfig) error {
file, err := os.OpenFile(cnf.filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) if cnf.filename == "" {
return errors.New("not loaded from config file")
}
file, err := os.OpenFile(cnf.filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
if err != nil { if err != nil {
return err return err
} }

1
go.mod
View File

@ -8,6 +8,7 @@ require (
) )
require ( require (
github.com/kelseyhightower/envconfig v1.4.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-isatty v0.0.19 // indirect
github.com/rs/zerolog v1.29.1 // indirect github.com/rs/zerolog v1.29.1 // indirect

2
go.sum
View File

@ -1,6 +1,8 @@
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=