Serve static assets from a CDN host if provided

This commit is contained in:
Jaz Volpert
2024-10-04 13:40:45 -07:00
parent 6382fe4535
commit b0fe2c6c9a
3 changed files with 37 additions and 28 deletions
+17 -8
View File
@@ -47,6 +47,7 @@ type Config struct {
ogcardHost string ogcardHost string
linkHost string linkHost string
ipccHost string ipccHost string
staticCDNHost string
} }
func serve(cctx *cli.Context) error { func serve(cctx *cli.Context) error {
@@ -58,6 +59,7 @@ func serve(cctx *cli.Context) error {
ipccHost := cctx.String("ipcc-host") ipccHost := cctx.String("ipcc-host")
basicAuthPassword := cctx.String("basic-auth-password") basicAuthPassword := cctx.String("basic-auth-password")
corsOrigins := cctx.StringSlice("cors-allowed-origins") corsOrigins := cctx.StringSlice("cors-allowed-origins")
staticCDNHost := cctx.String("static-cdn-host")
// Echo // Echo
e := echo.New() e := echo.New()
@@ -100,6 +102,7 @@ func serve(cctx *cli.Context) error {
ogcardHost: ogcardHost, ogcardHost: ogcardHost,
linkHost: linkHost, linkHost: linkHost,
ipccHost: ipccHost, ipccHost: ipccHost,
staticCDNHost: staticCDNHost,
}, },
} }
@@ -333,15 +336,21 @@ func (srv *Server) Shutdown() error {
return srv.httpd.Shutdown(ctx) return srv.httpd.Shutdown(ctx)
} }
// NewTemplateContext returns a new pongo2 context with some default values.
func (srv *Server) NewTemplateContext() pongo2.Context {
return pongo2.Context{
"staticCDNHost": srv.cfg.staticCDNHost,
}
}
func (srv *Server) errorHandler(err error, c echo.Context) { func (srv *Server) errorHandler(err error, c echo.Context) {
code := http.StatusInternalServerError code := http.StatusInternalServerError
if he, ok := err.(*echo.HTTPError); ok { if he, ok := err.(*echo.HTTPError); ok {
code = he.Code code = he.Code
} }
c.Logger().Error(err) c.Logger().Error(err)
data := pongo2.Context{ data := srv.NewTemplateContext()
"statusCode": code, data["statusCode"] = code
}
c.Render(code, "error.html", data) c.Render(code, "error.html", data)
} }
@@ -385,18 +394,18 @@ func (srv *Server) LinkProxyMiddleware(url *url.URL) echo.MiddlewareFunc {
// handler for endpoint that have no specific server-side handling // handler for endpoint that have no specific server-side handling
func (srv *Server) WebGeneric(c echo.Context) error { func (srv *Server) WebGeneric(c echo.Context) error {
data := pongo2.Context{} data := srv.NewTemplateContext()
return c.Render(http.StatusOK, "base.html", data) return c.Render(http.StatusOK, "base.html", data)
} }
func (srv *Server) WebHome(c echo.Context) error { func (srv *Server) WebHome(c echo.Context) error {
data := pongo2.Context{} data := srv.NewTemplateContext()
return c.Render(http.StatusOK, "home.html", data) return c.Render(http.StatusOK, "home.html", data)
} }
func (srv *Server) WebPost(c echo.Context) error { func (srv *Server) WebPost(c echo.Context) error {
ctx := c.Request().Context() ctx := c.Request().Context()
data := pongo2.Context{} data := srv.NewTemplateContext()
// sanity check arguments. don't 4xx, just let app handle if not expected format // sanity check arguments. don't 4xx, just let app handle if not expected format
rkeyParam := c.Param("rkey") rkeyParam := c.Param("rkey")
@@ -471,7 +480,7 @@ func (srv *Server) WebPost(c echo.Context) error {
func (srv *Server) WebStarterPack(c echo.Context) error { func (srv *Server) WebStarterPack(c echo.Context) error {
req := c.Request() req := c.Request()
ctx := req.Context() ctx := req.Context()
data := pongo2.Context{} data := srv.NewTemplateContext()
data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path) data["requestURI"] = fmt.Sprintf("https://%s%s", req.Host, req.URL.Path)
// sanity check arguments. don't 4xx, just let app handle if not expected format // sanity check arguments. don't 4xx, just let app handle if not expected format
rkeyParam := c.Param("rkey") rkeyParam := c.Param("rkey")
@@ -509,7 +518,7 @@ func (srv *Server) WebStarterPack(c echo.Context) error {
func (srv *Server) WebProfile(c echo.Context) error { func (srv *Server) WebProfile(c echo.Context) error {
ctx := c.Request().Context() ctx := c.Request().Context()
data := pongo2.Context{} data := srv.NewTemplateContext()
// sanity check arguments. don't 4xx, just let app handle if not expected format // sanity check arguments. don't 4xx, just let app handle if not expected format
handleOrDIDParam := c.Param("handleOrDID") handleOrDIDParam := c.Param("handleOrDID")
+6 -6
View File
@@ -13,8 +13,8 @@
<!-- Hello Humans! API docs at https://atproto.com --> <!-- Hello Humans! API docs at https://atproto.com -->
<link rel="preload" as="font" type="font/ttf" href="/static/media/InterVariable.c9f788f6e7ebaec75d7c.ttf"> <link rel="preload" as="font" type="font/ttf" href="{{ staticCDNHost }}/static/media/InterVariable.c9f788f6e7ebaec75d7c.ttf">
<link rel="preload" as="font" type="font/ttf" href="/static/media/InterVariable-Italic.55d6a3f35e9b605ba6f4.ttf"> <link rel="preload" as="font" type="font/ttf" href="{{ staticCDNHost }}/static/media/InterVariable-Italic.55d6a3f35e9b605ba6f4.ttf">
<style> <style>
/** /**
@@ -64,10 +64,10 @@
</style> </style>
{% include "scripts.html" %} {% include "scripts.html" %}
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="180x180" href="{{ staticCDNHost }}/static/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="{{ staticCDNHost }}/static/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="{{ staticCDNHost }}/static/favicon-16x16.png">
<link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#1185fe"> <link rel="mask-icon" href="{{ staticCDNHost }}/static/safari-pinned-tab.svg" color="#1185fe">
<meta name="theme-color"> <meta name="theme-color">
<meta name="application-name" content="Bluesky"> <meta name="application-name" content="Bluesky">
<meta name="generator" content="bskyweb"> <meta name="generator" content="bskyweb">
+2 -2
View File
@@ -23,10 +23,10 @@ const outputFile = entrypoints
const ext = path.extname(file) const ext = path.extname(file)
if (ext === '.js') { if (ext === '.js') {
return `<script defer="defer" src="/static/js/${file}"></script>` return `<script defer="defer" src="{{staticCDNHost}}/static/js/${file}"></script>`
} }
if (ext === '.css') { if (ext === '.css') {
return `<link rel="stylesheet" href="/static/css/${file}">` return `<link rel="stylesheet" href="{{staticCDNHost}}/static/css/${file}">`
} }
return '' return ''