56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"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"`
|
|
}
|
|
|
|
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{})
|
|
}
|