Files

56 lines
1.3 KiB
Go
Raw Permalink Normal View History

package main
import (
"encoding/xml"
2026-08-16 20:07:53 +01:00
"fmt"
"gosrc.io/xmpp/stanza"
)
// Implementation of XEP-0402: PEP Native Bookmarks
// https://xmpp.org/extensions/xep-0402.html
type Bookmark struct {
XMLName xml.Name `xml:"urn:xmpp:bookmarks:1 conference"`
Name string `xml:"name,attr,omitempty"`
Autojoin bool `xml:"autojoin,attr,omitempty"`
Nick string `xml:"nick,omitempty"`
Password string `xml:"password,omitempty"`
Extensions []any `xml:"extensions,omitempty"`
}
2026-08-16 20:07:53 +01:00
func (b *Bookmark) ToNode() *stanza.Node {
node := &stanza.Node{
XMLName: xml.Name{Space: "urn:xmpp:bookmarks:1", Local: "conference"},
Attrs: []xml.Attr{
{Name: xml.Name{Local: "name"}, Value: b.Name},
{Name: xml.Name{Local: "autojoin"}, Value: fmt.Sprintf("%t", b.Autojoin)},
},
}
if b.Nick != "" {
node.Nodes = append(node.Nodes, stanza.Node{
XMLName: xml.Name{Local: "nick"},
Content: b.Nick,
})
}
if b.Password != "" {
node.Nodes = append(node.Nodes, stanza.Node{
XMLName: xml.Name{Local: "password"},
Content: b.Password,
})
}
for _, ext := range b.Extensions {
if extNode, ok := ext.(stanza.Node); ok {
node.Nodes = append(node.Nodes, extNode)
}
}
return node
}
func init() {
stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{Space: "urn:xmpp:bookmarks:1", Local: "conference"}, Bookmark{})
}