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"
|
|
|
|
|
}
|