mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-19 02:03:40 -05:00
64 lines
2 KiB
Go
64 lines
2 KiB
Go
// Copyright (c) 2024 Tulir Asokan
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package hicli
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
"maunium.net/go/mautrix"
|
|
"maunium.net/go/mautrix/event"
|
|
"maunium.net/go/mautrix/id"
|
|
)
|
|
|
|
type hiCryptoHelper HiClient
|
|
|
|
var _ mautrix.CryptoHelper = (*hiCryptoHelper)(nil)
|
|
|
|
func (h *hiCryptoHelper) Encrypt(ctx context.Context, roomID id.RoomID, evtType event.Type, content any) (*event.EncryptedEventContent, error) {
|
|
roomMeta, err := h.DB.Room.Get(ctx, roomID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get room metadata: %w", err)
|
|
} else if roomMeta == nil {
|
|
return nil, fmt.Errorf("unknown room")
|
|
}
|
|
return (*HiClient)(h).Encrypt(ctx, roomMeta, evtType, content)
|
|
}
|
|
|
|
func (h *hiCryptoHelper) Decrypt(ctx context.Context, evt *event.Event) (*event.Event, error) {
|
|
return h.Crypto.DecryptMegolmEvent(ctx, evt)
|
|
}
|
|
|
|
func (h *hiCryptoHelper) WaitForSession(ctx context.Context, roomID id.RoomID, senderKey id.SenderKey, sessionID id.SessionID, timeout time.Duration) bool {
|
|
return h.Crypto.WaitForSession(ctx, roomID, senderKey, sessionID, timeout)
|
|
}
|
|
|
|
func (h *hiCryptoHelper) RequestSession(ctx context.Context, roomID id.RoomID, senderKey id.SenderKey, sessionID id.SessionID, userID id.UserID, deviceID id.DeviceID) {
|
|
err := h.Crypto.SendRoomKeyRequest(ctx, roomID, senderKey, sessionID, "", map[id.UserID][]id.DeviceID{
|
|
userID: {deviceID},
|
|
h.Account.UserID: {"*"},
|
|
})
|
|
if err != nil {
|
|
zerolog.Ctx(ctx).Err(err).
|
|
Stringer("room_id", roomID).
|
|
Stringer("session_id", sessionID).
|
|
Stringer("user_id", userID).
|
|
Msg("Failed to send room key request")
|
|
} else {
|
|
zerolog.Ctx(ctx).Debug().
|
|
Stringer("room_id", roomID).
|
|
Stringer("session_id", sessionID).
|
|
Stringer("user_id", userID).
|
|
Msg("Sent room key request")
|
|
}
|
|
}
|
|
|
|
func (h *hiCryptoHelper) Init(ctx context.Context) error {
|
|
return nil
|
|
}
|