pygomx/libmxclient/mxclient/utils.go

108 lines
2.1 KiB
Go
Raw Permalink Normal View History

2026-01-13 13:11:02 +01:00
// Copyright (C) 2026 saces@c-base.org
// SPDX-License-Identifier: AGPL-3.0-only
2026-01-12 17:39:34 +01:00
package mxclient
import (
"context"
"encoding/json"
"fmt"
2026-01-13 13:11:02 +01:00
"time"
2026-01-12 17:39:34 +01:00
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/id"
)
func DiscoverHS(ids string) string {
2026-01-13 13:11:02 +01:00
var domainname string
// probe for mxid
_mxid := id.UserID(ids)
_, _hs, err := _mxid.Parse()
2026-01-12 17:39:34 +01:00
if err != nil {
2026-01-13 13:11:02 +01:00
// not a mxid
domainname = ids
} else {
domainname = _hs
2026-01-12 17:39:34 +01:00
}
2026-01-13 13:11:02 +01:00
fmt.Printf("Attempt to discover '%s'\n", domainname)
2026-01-12 17:39:34 +01:00
2026-01-13 13:11:02 +01:00
wk, err := mautrix.DiscoverClientAPI(context.Background(), domainname)
2026-01-12 17:39:34 +01:00
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
if wk == nil {
2026-01-13 13:11:02 +01:00
return fmt.Sprintf("No well-known. hs from input: %s", domainname)
2026-01-12 17:39:34 +01:00
}
j, err := json.Marshal(wk)
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
return string(j)
}
2026-01-13 13:11:02 +01:00
func MkToken(ids string, pw string) string {
mxid := id.UserID(ids)
_, hs, err := mxid.Parse()
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
wk, err := mautrix.DiscoverClientAPI(context.Background(), hs)
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
if wk != nil {
hs = wk.Homeserver.BaseURL
}
mauclient, err := mautrix.NewClient(hs, mxid, "")
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
deviceName := fmt.Sprintf("mxtokenizer-%d", time.Now().Unix())
resp, err := mauclient.Login(context.Background(), &mautrix.ReqLogin{
Type: "m.login.password",
Identifier: mautrix.UserIdentifier{
Type: "m.id.user",
User: mxid.Localpart(),
},
Password: pw,
DeviceID: id.DeviceID(deviceName),
InitialDeviceDisplayName: deviceName,
StoreCredentials: false,
StoreHomeserverURL: false,
RefreshToken: false,
})
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
return resp.AccessToken
}
func Whoami(hs string, accessToken string) string {
return "nope. whoami"
}
func AccountInfo(hs string, accessToken string) string {
return "nope. accountinfo"
}
func ClearAccount(hs string, accessToken string) string {
return "nope. clearaccount"
}
func ServerInfo(url string) string {
return "nope. serverinfo"
}