Serve mailing list finalize and unsubscribe endpoints

main
Brian Picciano 2 years ago
parent 7335295dc0
commit 4dc1683d3e
  1. 2
      srv/src/http/api.go
  2. 45
      srv/src/http/tpl/finalize.html
  3. 44
      srv/src/http/tpl/unsubscribe.html
  4. 4
      srv/src/mailinglist/mailinglist.go

@ -216,6 +216,8 @@ func (a *api) blogHandler() http.Handler {
mux.Handle("/static/", http.FileServer(http.FS(staticFS)))
mux.Handle("/follow", a.renderDumbTplHandler("follow.html"))
mux.Handle("/mailinglist/unsubscribe", a.renderDumbTplHandler("unsubscribe.html"))
mux.Handle("/mailinglist/finalize", a.renderDumbTplHandler("finalize.html"))
mux.Handle("/feed.xml", a.renderFeedHandler())
mux.Handle("/", a.renderIndexHandler())

@ -0,0 +1,45 @@
{{ define "body" }}
<script async type="module" src="{{ StaticURL "api.js" }}"></script>
<style>
#result.success { color: green; }
#result.fail { color: red; }
</style>
<span id="result"></span>
<script>
(async () => {
const resultSpan = document.getElementById("result");
try {
const urlParams = new URLSearchParams(window.location.search);
const subToken = urlParams.get('subToken');
if (!subToken) throw "No subscription token provided";
const api = await import("{{ StaticURL "api.js" }}");
await api.call('/api/mailinglist/finalize', {
body: { subToken },
});
resultSpan.className = "success";
resultSpan.innerHTML = "Your email subscription has been finalized! Please go on about your day.";
} catch (e) {
resultSpan.className = "fail";
resultSpan.innerHTML = e;
}
})();
</script>
{{ end }}
{{ template "base.html" . }}

@ -0,0 +1,44 @@
{{ define "body" }}
<script async type="module" src="{{ StaticURL "api.js" }}"></script>
<style>
#result.success { color: green; }
#result.fail { color: red; }
</style>
<span id="result"></span>
<script>
(async () => {
const resultSpan = document.getElementById("result");
try {
const urlParams = new URLSearchParams(window.location.search);
const unsubToken = urlParams.get('unsubToken');
if (!unsubToken) throw "No unsubscribe token provided";
const api = await import("{{ StaticURL "api.js" }}");
await api.call('/api/mailinglist/unsubscribe', {
body: { unsubToken },
});
resultSpan.className = "success";
resultSpan.innerHTML = "You have been unsubscribed! Please go on about your day.";
} catch (e) {
resultSpan.className = "fail";
resultSpan.innerHTML = e;
}
})();
</script>
{{ end }}
{{ template "base.html" . }}

@ -126,7 +126,7 @@ func (m *mailingList) BeginSubscription(email string) error {
SubLink string
}{
SubLink: fmt.Sprintf(
"%s/mailinglist/finalize.html?subToken=%s",
"%s/mailinglist/finalize?subToken=%s",
m.params.PublicURL.String(),
emailRecord.SubToken,
),
@ -242,7 +242,7 @@ func (m *mailingList) Publish(postTitle, postURL string) error {
PostTitle: postTitle,
PostURL: postURL,
UnsubURL: fmt.Sprintf(
"%s/mailinglist/unsubscribe.html?unsubToken=%s",
"%s/mailinglist/unsubscribe?unsubToken=%s",
m.params.PublicURL.String(),
emailRecord.UnsubToken,
),

Loading…
Cancel
Save