about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bskyweb/cmd/bskyweb/server.go14
-rw-r--r--bskyweb/templates/base.html2
-rw-r--r--bskyweb/templates/post.html45
3 files changed, 51 insertions, 10 deletions
diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go
index 8d75bb6ef..672e8d25e 100644
--- a/bskyweb/cmd/bskyweb/server.go
+++ b/bskyweb/cmd/bskyweb/server.go
@@ -488,20 +488,26 @@ func (srv *Server) WebPost(c echo.Context) error {
 		}
 	}
 
+	req := c.Request()
 	if !unauthedViewingOkay {
+		// Provide minimal OpenGraph data for auth-required posts
+		data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path)
+		data["requiresAuth"] = true
+		data["profileHandle"] = pv.Handle
+		if pv.DisplayName != nil {
+			data["profileDisplayName"] = *pv.DisplayName
+		}
 		return c.Render(http.StatusOK, "post.html", data)
 	}
-	did := pv.Did
-	data["did"] = did
 
 	// then fetch the post thread (with extra context)
-	uri := fmt.Sprintf("at://%s/app.bsky.feed.post/%s", did, rkey)
+	uri := fmt.Sprintf("at://%s/app.bsky.feed.post/%s", pv.Did, rkey)
 	tpv, err := appbsky.FeedGetPostThread(ctx, srv.xrpcc, 1, 0, uri)
 	if err != nil {
 		log.Warnf("failed to fetch post: %s\t%v", uri, err)
 		return c.Render(http.StatusOK, "post.html", data)
 	}
-	req := c.Request()
+
 	postView := tpv.Thread.FeedDefs_ThreadViewPost.Post
 	data["postView"] = postView
 	data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path)
diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
index 715b39fd2..c8dec0e22 100644
--- a/bskyweb/templates/base.html
+++ b/bskyweb/templates/base.html
@@ -94,7 +94,7 @@
   <meta name="theme-color">
   <meta name="application-name" content="Bluesky">
   <meta name="generator" content="bskyweb">
-  <meta property="og:site_name" content="Bluesky Social" />
+  <meta property="og:site_name" content="Bluesky Social">
   <meta name="twitter:site" content="@bluesky" />
   <link type="application/activity+json" href="" />
 
diff --git a/bskyweb/templates/post.html b/bskyweb/templates/post.html
index 6473bc284..983f84535 100644
--- a/bskyweb/templates/post.html
+++ b/bskyweb/templates/post.html
@@ -3,6 +3,8 @@
 {% block head_title %}
 {%- if postView -%}
   @{{ postView.Author.Handle }} on Bluesky
+{%- elif requiresAuth and profileHandle -%}
+  @{{ profileHandle }} on Bluesky
 {%- else -%}
   Bluesky
 {%- endif -%}
@@ -11,7 +13,7 @@
 {% block html_head_extra -%}
 {%- if postView -%}
   <meta property="og:type" content="article">
-  <meta property="profile:username" content="{{ profileView.Handle }}">
+  <meta property="profile:username" content="{{ postView.Author.Handle }}">
   {%- if requestURI %}
   <meta property="og:url" content="{{ requestURI }}">
   <link rel="canonical" href="{{ requestURI|canonicalize_url }}" />
@@ -32,17 +34,44 @@
   <meta property="twitter:image" content="{{ imgThumbUrl }}">
   {% endfor %}
   <meta name="twitter:card" content="summary_large_image">
-  {%- elif postView.Author.Avatar %}
-  <meta name="twitter:card" content="summary">
+  {% else %}
   <meta property="og:image" content="{{ postView.Author.Avatar }}">
   <meta property="twitter:image" content="{{ postView.Author.Avatar }}">
+  <meta name="twitter:card" content="summary">
   {% endif %}
   <meta name="twitter:label1" content="Posted At">
   <meta name="twitter:value1" content="{{ postView.IndexedAt }}">
-  <meta name="article:published_time" content="{{ postView.IndexedAt }}">
-  <meta name="article:published_time" content="{{ postView.IndexedAt }}">
+  {%- if postView.LikeCount %}
+  <meta name="twitter:label2" content="Likes">
+  <meta name="twitter:value2" content="{{ postView.LikeCount }}">
+  {% endif -%}
+  {%- if postView.ReplyCount %}
+  <meta name="twitter:label3" content="Replies">
+  <meta name="twitter:value3" content="{{ postView.ReplyCount }}">
+  {% endif -%}
+  {%- if postView.RepostCount %}
+  <meta name="twitter:label4" content="Reposts">
+  <meta name="twitter:value4" content="{{ postView.RepostCount }}">
+  {% endif -%}
+  <meta property="article:published_time" content="{{ postView.IndexedAt }}">
   <link rel="alternate" type="application/json+oembed" href="https://embed.bsky.app/oembed?format=json&url={{ postView.Uri | urlencode }}" />
   <link rel="alternate" href="{{ postView.Uri }}" />
+{%- elif requiresAuth and profileHandle -%}
+  <meta property="og:type" content="article">
+  <meta property="profile:username" content="{{ profileHandle }}">
+  {%- if requestURI %}
+  <meta property="og:url" content="{{ requestURI }}">
+  <link rel="canonical" href="{{ requestURI|canonicalize_url }}" />
+  {% endif -%}
+  {%- if profileDisplayName %}
+  <meta property="og:title" content="{{ profileDisplayName }} (@{{ profileHandle }})">
+  {% else %}
+  <meta property="og:title" content="@{{ profileHandle }}">
+  {% endif -%}
+  <meta name="description" content="This post requires authentication to view.">
+  <meta property="og:description" content="This post requires authentication to view.">
+  <meta property="twitter:description" content="This post requires authentication to view.">
+  <meta name="twitter:card" content="summary">
 {% endif -%}
 {%- endblock %}
 
@@ -56,5 +85,11 @@
   <p id="bsky_post_text">{{ postText }}</p>
   <p id="bsky_post_indexedat">{{ postView.IndexedAt }}</p>
 </div>
+{%- elif requiresAuth and profileHandle -%}
+<div id="bsky_post_summary">
+  <h3>Post</h3>
+  <p id="bsky_handle">{{ profileHandle }}</p>
+  <p id="bsky_post_text">This post requires authentication to view.</p>
+</div>
 {% endif -%}
 {%- endblock %}