pygomx/libmxclient/mxclient/utils.go
2026-01-13 16:35:08 +01:00

107 lines
2.1 KiB
Go

// Copyright (C) 2026 saces@c-base.org
// SPDX-License-Identifier: AGPL-3.0-only
package mxclient
import (
"context"
"encoding/json"
"fmt"
"time"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/id"
)
func DiscoverHS(ids string) string {
var domainname string
// probe for mxid
_mxid := id.UserID(ids)
_, _hs, err := _mxid.Parse()
if err != nil {
// not a mxid
domainname = ids
} else {
domainname = _hs
}
fmt.Printf("Attempt to discover '%s'\n", domainname)
wk, err := mautrix.DiscoverClientAPI(context.Background(), domainname)
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
if wk == nil {
return fmt.Sprintf("No well-known. hs from input: %s", domainname)
}
j, err := json.Marshal(wk)
if err != nil {
return fmt.Sprintf("ERR: %v", err)
}
return string(j)
}
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"
}