// mmc -- Mattermost client
-// Copyright (C) 2023 Sergey Matveev <stargrave@stargrave.org>
+// Copyright (C) 2023-2024 Sergey Matveev <stargrave@stargrave.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
"io"
"io/fs"
"log"
+ "net/url"
"os"
"os/exec"
"os/signal"
"github.com/davecgh/go-spew/spew"
"github.com/mattermost/mattermost-server/v6/model"
+ "go.cypherpunks.ru/netrc"
"go.stargrave.org/mmc"
)
func rewriteIfChanged(fn string, data string) {
if their, err := os.ReadFile(fn); err != nil ||
- bytes.Compare([]byte(data), their) != 0 {
+ !bytes.Equal([]byte(data), their) {
if err = os.WriteFile(fn, []byte(data), 0o666); err != nil {
log.Fatalln(err)
}
}
defer DebugFd.Close()
- login, password := mmc.FindInNetrc(*entrypoint)
+ entrypointURL, err := url.Parse(*entrypoint)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ login, password := netrc.Find(entrypointURL.Hostname())
if login == "" || password == "" {
- log.Fatalln("no credentials found for:", *entrypoint)
+ log.Fatalln("no credentials found for:", entrypointURL.Hostname())
}
- c := model.NewAPIv4Client("https://" + *entrypoint)
+ c := model.NewAPIv4Client(*entrypoint)
c.Login(login, password)
me, resp, err := c.GetMe("")
if err != nil {
}()
needsShutdown := make(chan os.Signal)
- wc, err := model.NewWebSocketClient4("wss://"+*entrypoint, c.AuthToken)
+ switch entrypointURL.Scheme {
+ case "http":
+ entrypointURL.Scheme = "ws"
+ case "https":
+ entrypointURL.Scheme = "wss"
+ default:
+ log.Println("unhandled scheme:", entrypointURL.Scheme)
+ }
+ wc, err := model.NewWebSocketClient4(entrypointURL.String(), c.AuthToken)
if err != nil {
log.Fatalln(err)
}
userId = strings.TrimSuffix(userId, "__"+me.Id)
user := Users[userId]
if user == nil {
- log.Println("unknown user:", post)
+ log.Println("unknown user:", userId)
continue
}
recipient = path.Join("users", user.Username)