mirror of
https://mau.dev/mautrix/go.git
synced 2026-03-14 14:25:53 +01:00
crypto: add full support for json.RawMessage in EncryptMegolmEvent
This commit is contained in:
parent
6c07832ed7
commit
3277c529a2
1 changed files with 25 additions and 2 deletions
|
|
@ -15,6 +15,8 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/tidwall/gjson"
|
||||
"go.mau.fi/util/exgjson"
|
||||
"go.mau.fi/util/exzerolog"
|
||||
|
||||
"maunium.net/go/mautrix"
|
||||
|
|
@ -27,7 +29,24 @@ var (
|
|||
NoGroupSession = errors.New("no group session created")
|
||||
)
|
||||
|
||||
func getRelatesTo(content interface{}) *event.RelatesTo {
|
||||
func getRawJSON[T any](content json.RawMessage, path ...string) *T {
|
||||
value := gjson.GetBytes(content, exgjson.Path(path...))
|
||||
if !value.IsObject() {
|
||||
return nil
|
||||
}
|
||||
var result T
|
||||
err := json.Unmarshal([]byte(value.Raw), &result)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &result
|
||||
}
|
||||
|
||||
func getRelatesTo(content any) *event.RelatesTo {
|
||||
contentJSON, ok := content.(json.RawMessage)
|
||||
if ok {
|
||||
return getRawJSON[event.RelatesTo](contentJSON, "m.relates_to")
|
||||
}
|
||||
contentStruct, ok := content.(*event.Content)
|
||||
if ok {
|
||||
content = contentStruct.Parsed
|
||||
|
|
@ -39,7 +58,11 @@ func getRelatesTo(content interface{}) *event.RelatesTo {
|
|||
return nil
|
||||
}
|
||||
|
||||
func getMentions(content interface{}) *event.Mentions {
|
||||
func getMentions(content any) *event.Mentions {
|
||||
contentJSON, ok := content.(json.RawMessage)
|
||||
if ok {
|
||||
return getRawJSON[event.Mentions](contentJSON, "m.mentions")
|
||||
}
|
||||
contentStruct, ok := content.(*event.Content)
|
||||
if ok {
|
||||
content = contentStruct.Parsed
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue