72 lines
2.0 KiB
Go
72 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"html/template"
|
|
|
|
appbsky "github.com/bluesky-social/indigo/api/bsky"
|
|
"github.com/bluesky-social/indigo/atproto/syntax"
|
|
)
|
|
|
|
func (srv *Server) postEmbedHTML(postView *appbsky.FeedDefs_PostView) (string, error) {
|
|
// ensure that there isn't an injection from the URI
|
|
aturi, err := syntax.ParseATURI(postView.Uri)
|
|
if err != nil {
|
|
log.Error("bad AT-URI in reponse", "aturi", aturi, "err", err)
|
|
return "", err
|
|
}
|
|
|
|
post, ok := postView.Record.Val.(*appbsky.FeedPost)
|
|
if !ok {
|
|
log.Error("bad post record value", "err", err)
|
|
return "", err
|
|
}
|
|
|
|
const tpl = `<blockquote class="bluesky-embed" data-bluesky-uri="{{ .PostURI }}" data-bluesky-cid="{{ .PostCID }}"><p{{ if .PostLang }} lang="{{ .PostLang }}"{{ end }}>{{ .PostText }}</p>— {{ .PostAuthor }} {{ .PostIndexedAt }}</blockquote><script async src="{{ .WidgetURL }}" charset="utf-8"></script>`
|
|
|
|
t, err := template.New("snippet").Parse(tpl)
|
|
if err != nil {
|
|
log.Error("template parse error", "err", err)
|
|
return "", err
|
|
}
|
|
|
|
var lang string
|
|
if len(post.Langs) > 0 {
|
|
lang = post.Langs[0]
|
|
}
|
|
var authorName string
|
|
if postView.Author.DisplayName != nil {
|
|
authorName = fmt.Sprintf("%s (@%s)", *postView.Author.DisplayName, postView.Author.Handle)
|
|
} else {
|
|
authorName = fmt.Sprintf("@%s", postView.Author.Handle)
|
|
}
|
|
fmt.Println(postView.Uri)
|
|
fmt.Println(fmt.Sprintf("%s", postView.Uri))
|
|
data := struct {
|
|
PostURI template.URL
|
|
PostCID string
|
|
PostLang string
|
|
PostText string
|
|
PostAuthor string
|
|
PostIndexedAt string
|
|
WidgetURL template.URL
|
|
}{
|
|
PostURI: template.URL(postView.Uri),
|
|
PostCID: postView.Cid,
|
|
PostLang: lang,
|
|
PostText: post.Text,
|
|
PostAuthor: authorName,
|
|
PostIndexedAt: postView.IndexedAt, // TODO: createdAt?
|
|
WidgetURL: template.URL("https://embed.bsky.app/static/embed.js"),
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
err = t.Execute(&buf, data)
|
|
if err != nil {
|
|
log.Error("template parse error", "err", err)
|
|
return "", err
|
|
}
|
|
return buf.String(), nil
|
|
}
|