rebased embedr (#3511)
* skeleton of embedr service, based on bskyweb * embedr container setup * builds on this branch * actual routes * fix embedr go:embed * tweak embedr dockerfile * progress on embedr * fix path params * tweaks to build process * try to get embedr dockerfile to install embed deps * build this branch * updates to match sam's output HTML * try to unbreak embedr dockerfile * small embedr tweak * docker hack * get embed.js copied over to embedr * don't x-frame-options for embed.bsky.app * bskyembed: remove a console.log * use html/template for golang snippet generation * simplify embedr API fetches * missing file * Rm console.log fully --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
This commit is contained in:
parent
196dd3a8ab
commit
58842d03a9
30 changed files with 912 additions and 42 deletions
71
bskyweb/cmd/embedr/snippet.go
Normal file
71
bskyweb/cmd/embedr/snippet.go
Normal file
|
@ -0,0 +1,71 @@
|
|||
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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue