use access token when available
continuous-integration/drone/push Build is passing Details
continuous-integration/drone Build is passing Details

This commit is contained in:
stryan 2021-12-08 13:22:56 -05:00
parent e8a0b29c0b
commit 4f12bdc1c9
1 changed files with 34 additions and 12 deletions

46
main.go
View File

@ -14,6 +14,7 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
"maunium.net/go/mautrix" "maunium.net/go/mautrix"
"maunium.net/go/mautrix/event" "maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/id"
) )
var Homeserver string var Homeserver string
@ -21,6 +22,7 @@ var Username string
var Password string var Password string
var DimensionServer string var DimensionServer string
var HomeserverDomain string var HomeserverDomain string
var Token string
var GitCommit string var GitCommit string
var GitTag string var GitTag string
var Statefile string var Statefile string
@ -42,6 +44,7 @@ func main() {
viper.SetDefault("statefile", "simpstate") viper.SetDefault("statefile", "simpstate")
Username = viper.GetString("username") Username = viper.GetString("username")
Password = viper.GetString("password") Password = viper.GetString("password")
Token = viper.GetString("access_token")
DimensionServer = viper.GetString("dimension") DimensionServer = viper.GetString("dimension")
HomeserverDomain = viper.GetString("domain") HomeserverDomain = viper.GetString("domain")
Statefile = viper.GetString("statefile") Statefile = viper.GetString("statefile")
@ -50,21 +53,40 @@ func main() {
StartTime = time.Now() StartTime = time.Now()
var vtubers []*Vtuber var vtubers []*Vtuber
log.Println("Logging into", Homeserver, "as", Username) log.Println("Logging into", Homeserver, "as", Username)
client, err := mautrix.NewClient(Homeserver, "", "") var client *mautrix.Client
if err != nil { if Token == "" {
panic(err) client, err = mautrix.NewClient(Homeserver, "", "")
if err != nil {
panic(err)
}
} else {
log.Println("using token login")
client, err = mautrix.NewClient(Homeserver, id.NewUserID(Username, HomeserverDomain), Token)
if err != nil {
panic(err)
}
} }
client.Store = NewLazyMemStore(Statefile) client.Store = NewLazyMemStore(Statefile)
_, err = client.Login(&mautrix.ReqLogin{ if Token == "" {
Type: "m.login.password", login_res, err := client.Login(&mautrix.ReqLogin{
Identifier: mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: Username}, Type: "m.login.password",
Password: Password, Identifier: mautrix.UserIdentifier{Type: mautrix.IdentifierTypeUser, User: Username},
StoreCredentials: true, Password: Password,
}) StoreCredentials: true,
if err != nil { })
panic(err) if err != nil {
panic(err)
}
Token = login_res.AccessToken
viper.Set("access_token", Token)
log.Println("Login succesful, saving access_token to config file")
err = viper.WriteConfig()
if err != nil {
panic(err)
}
} else {
log.Println("skipping login since token provided")
} }
fmt.Println("Login successful")
syncer := client.Syncer.(*mautrix.DefaultSyncer) syncer := client.Syncer.(*mautrix.DefaultSyncer)
syncer.OnEventType(event.EventMessage, func(source mautrix.EventSource, evt *event.Event) { syncer.OnEventType(event.EventMessage, func(source mautrix.EventSource, evt *event.Event) {
if evt.Sender == client.UserID { if evt.Sender == client.UserID {