hicli: check spec versions on startup

This commit is contained in:
Tulir Asokan 2024-06-15 19:44:46 +03:00
commit 9ed8ca3d37
2 changed files with 23 additions and 0 deletions

View file

@ -19,6 +19,7 @@ import (
"github.com/rs/zerolog"
"go.mau.fi/util/dbutil"
"go.mau.fi/util/exerrors"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/crypto"
@ -145,6 +146,10 @@ func (h *HiClient) Start(ctx context.Context, userID id.UserID, expectedAccount
if err != nil {
return err
}
err = h.CheckServerVersions(ctx)
if err != nil {
return err
}
err = h.Crypto.Load(ctx)
if err != nil {
return fmt.Errorf("failed to load olm machine: %w", err)
@ -167,6 +172,20 @@ func (h *HiClient) Start(ctx context.Context, userID id.UserID, expectedAccount
return nil
}
var ErrFailedToCheckServerVersions = errors.New("failed to check server versions")
var ErrOutdatedServer = errors.New("homeserver is outdated")
var MinimumSpecVersion = mautrix.SpecV11
func (h *HiClient) CheckServerVersions(ctx context.Context) error {
versions, err := h.Client.Versions(ctx)
if err != nil {
return exerrors.NewDualError(ErrFailedToCheckServerVersions, err)
} else if !versions.Contains(MinimumSpecVersion) {
return fmt.Errorf("%w (minimum: %s, highest supported: %s)", ErrOutdatedServer, MinimumSpecVersion, versions.GetLatest())
}
return nil
}
func (h *HiClient) Sync() {
h.Client.StopSync()
if fn := h.stopSync; fn != nil {

View file

@ -36,6 +36,10 @@ func (h *HiClient) LoginPassword(ctx context.Context, homeserverURL, username, p
}
func (h *HiClient) Login(ctx context.Context, req *mautrix.ReqLogin) error {
err := h.CheckServerVersions(ctx)
if err != nil {
return err
}
req.StoreCredentials = true
req.StoreHomeserverURL = true
resp, err := h.Client.Login(ctx, req)