]> Sergey Matveev's repositories - mmc.git/blobdiff - cmd/mmc/main.go
Ability to connect to http:// entrypoints
[mmc.git] / cmd / mmc / main.go
index f27ec75504f6ec9ed05cce84bf38a2b49920b48e..79a850ab48a4992096c347bbd54ab4903a0c5d69 100644 (file)
@@ -1,5 +1,5 @@
 // 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
@@ -26,6 +26,7 @@ import (
        "io"
        "io/fs"
        "log"
+       "net/url"
        "os"
        "os/exec"
        "os/signal"
@@ -38,6 +39,7 @@ import (
 
        "github.com/davecgh/go-spew/spew"
        "github.com/mattermost/mattermost-server/v6/model"
+       "go.cypherpunks.ru/netrc"
        "go.stargrave.org/mmc"
 )
 
@@ -49,7 +51,7 @@ var (
 
 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)
                }
@@ -85,11 +87,15 @@ func main() {
        }
        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 {
@@ -438,7 +444,15 @@ func main() {
        }()
 
        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)
        }
@@ -508,7 +522,7 @@ func main() {
                                                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)