summaryrefslogtreecommitdiff
path: root/internal/web
diff options
context:
space:
mode:
Diffstat (limited to 'internal/web')
-rw-r--r--internal/web/about.go2
-rw-r--r--internal/web/confirmemail.go5
-rw-r--r--internal/web/customcss.go19
-rw-r--r--internal/web/domain-blocklist.go2
-rw-r--r--internal/web/index.go2
-rw-r--r--internal/web/profile.go3
-rw-r--r--internal/web/settings-panel.go1
-rw-r--r--internal/web/signup.go7
-rw-r--r--internal/web/tag.go2
-rw-r--r--internal/web/thread.go3
-rw-r--r--internal/web/web.go30
11 files changed, 51 insertions, 25 deletions
diff --git a/internal/web/about.go b/internal/web/about.go
index 2bc558962..843dda652 100644
--- a/internal/web/about.go
+++ b/internal/web/about.go
@@ -54,7 +54,7 @@ func (m *Module) aboutGETHandler(c *gin.Context) {
Template: "about.tmpl",
Instance: instance,
OGMeta: apiutil.OGBase(instance),
- Stylesheets: []string{cssAbout},
+ Stylesheets: []string{cssAbout, instanceCustomCSSPath},
Extra: map[string]any{
"showStrap": true,
"blocklistExposed": config.GetInstanceExposeSuspendedWeb(),
diff --git a/internal/web/confirmemail.go b/internal/web/confirmemail.go
index e512761f4..21028c6c4 100644
--- a/internal/web/confirmemail.go
+++ b/internal/web/confirmemail.go
@@ -127,8 +127,9 @@ func (m *Module) confirmEmailPOSTHandler(c *gin.Context) {
// Serve page informing user that their
// email address is now confirmed.
page := apiutil.WebPage{
- Template: "confirmed_email.tmpl",
- Instance: instance,
+ Template: "confirmed_email.tmpl",
+ Instance: instance,
+ Stylesheets: []string{instanceCustomCSSPath},
Extra: map[string]any{
"email": user.Email,
"username": user.Account.Username,
diff --git a/internal/web/customcss.go b/internal/web/customcss.go
index b4072f2a7..36ae9de55 100644
--- a/internal/web/customcss.go
+++ b/internal/web/customcss.go
@@ -55,3 +55,22 @@ func (m *Module) customCSSGETHandler(c *gin.Context) {
c.Header(cacheControlHeader, cacheControlNoCache)
c.Data(http.StatusOK, textCSSUTF8, []byte(customCSS))
}
+
+func (m *Module) instanceCustomCSSGETHandler(c *gin.Context) {
+
+ if _, err := apiutil.NegotiateAccept(c, apiutil.TextCSS); err != nil {
+ apiutil.WebErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1)
+ return
+ }
+
+ instanceV1, errWithCode := m.processor.InstanceGetV1(c.Request.Context())
+ if errWithCode != nil {
+ apiutil.WebErrorHandler(c, errWithCode, m.processor.InstanceGetV1)
+ return
+ }
+
+ instanceCustomCSS := instanceV1.CustomCSS
+
+ c.Header(cacheControlHeader, cacheControlNoCache)
+ c.Data(http.StatusOK, textCSSUTF8, []byte(instanceCustomCSS))
+}
diff --git a/internal/web/domain-blocklist.go b/internal/web/domain-blocklist.go
index 5d631e0f7..7b6710049 100644
--- a/internal/web/domain-blocklist.go
+++ b/internal/web/domain-blocklist.go
@@ -67,7 +67,7 @@ func (m *Module) domainBlockListGETHandler(c *gin.Context) {
Template: "domain-blocklist.tmpl",
Instance: instance,
OGMeta: apiutil.OGBase(instance),
- Stylesheets: []string{cssFA},
+ Stylesheets: []string{cssFA, instanceCustomCSSPath},
Javascript: []string{jsFrontend},
Extra: map[string]any{"blocklist": domainBlocks},
}
diff --git a/internal/web/index.go b/internal/web/index.go
index 25960cf7f..dd9d80561 100644
--- a/internal/web/index.go
+++ b/internal/web/index.go
@@ -59,7 +59,7 @@ func (m *Module) indexHandler(c *gin.Context) {
Template: "index.tmpl",
Instance: instance,
OGMeta: apiutil.OGBase(instance),
- Stylesheets: []string{cssAbout, cssIndex},
+ Stylesheets: []string{cssAbout, cssIndex, instanceCustomCSSPath},
Extra: map[string]any{"showStrap": true},
}
diff --git a/internal/web/profile.go b/internal/web/profile.go
index 60157fd19..741dc2a83 100644
--- a/internal/web/profile.go
+++ b/internal/web/profile.go
@@ -132,7 +132,7 @@ func (m *Module) profileGETHandler(c *gin.Context) {
}
// Prepare stylesheets for profile.
- stylesheets := make([]string, 0, 6)
+ stylesheets := make([]string, 0, 7)
// Basic profile stylesheets.
stylesheets = append(
@@ -142,6 +142,7 @@ func (m *Module) profileGETHandler(c *gin.Context) {
cssStatus,
cssThread,
cssProfile,
+ instanceCustomCSSPath,
}...,
)
diff --git a/internal/web/settings-panel.go b/internal/web/settings-panel.go
index ec8166e95..41cd8666e 100644
--- a/internal/web/settings-panel.go
+++ b/internal/web/settings-panel.go
@@ -53,6 +53,7 @@ func (m *Module) SettingsPanelHandler(c *gin.Context) {
cssProfile, // Used for rendering stub/fake profiles.
cssStatus, // Used for rendering stub/fake statuses.
cssSettings,
+ instanceCustomCSSPath,
},
Javascript: []string{jsSettings},
}
diff --git a/internal/web/signup.go b/internal/web/signup.go
index a943f3680..64b9f4e2d 100644
--- a/internal/web/signup.go
+++ b/internal/web/signup.go
@@ -126,9 +126,10 @@ func (m *Module) signupPOSTHandler(c *gin.Context) {
// Serve a page informing the
// user that they've signed up.
page := apiutil.WebPage{
- Template: "signed-up.tmpl",
- Instance: instance,
- OGMeta: apiutil.OGBase(instance),
+ Template: "signed-up.tmpl",
+ Instance: instance,
+ Stylesheets: []string{instanceCustomCSSPath},
+ OGMeta: apiutil.OGBase(instance),
Extra: map[string]any{
"email": user.UnconfirmedEmail,
"username": user.Account.Username,
diff --git a/internal/web/tag.go b/internal/web/tag.go
index 5c3cd31a6..423000f99 100644
--- a/internal/web/tag.go
+++ b/internal/web/tag.go
@@ -59,7 +59,7 @@ func (m *Module) tagGETHandler(c *gin.Context) {
Template: "tag.tmpl",
Instance: instance,
OGMeta: apiutil.OGBase(instance),
- Stylesheets: []string{cssFA, cssThread, cssTag},
+ Stylesheets: []string{cssFA, cssThread, cssTag, instanceCustomCSSPath},
Extra: map[string]any{"tagName": tagName},
}
diff --git a/internal/web/thread.go b/internal/web/thread.go
index d3ba6ea5e..246c05b97 100644
--- a/internal/web/thread.go
+++ b/internal/web/thread.go
@@ -115,7 +115,7 @@ func (m *Module) threadGETHandler(c *gin.Context) {
}
// Prepare stylesheets for thread.
- stylesheets := make([]string, 0, 5)
+ stylesheets := make([]string, 0, 6)
// Basic thread stylesheets.
stylesheets = append(
@@ -131,6 +131,7 @@ func (m *Module) threadGETHandler(c *gin.Context) {
if theme := targetAccount.Theme; theme != "" {
stylesheets = append(
stylesheets,
+ instanceCustomCSSPath,
themesPathPrefix+"/"+theme,
)
}
diff --git a/internal/web/web.go b/internal/web/web.go
index 185bf7120..35f8f21b0 100644
--- a/internal/web/web.go
+++ b/internal/web/web.go
@@ -36,20 +36,21 @@ import (
)
const (
- confirmEmailPath = "/" + uris.ConfirmEmailPath
- profileGroupPath = "/@:username"
- statusPath = "/statuses/:" + apiutil.WebStatusIDKey // leave out the '/@:username' prefix as this will be served within the profile group
- tagsPath = "/tags/:" + apiutil.TagNameKey
- customCSSPath = profileGroupPath + "/custom.css"
- rssFeedPath = profileGroupPath + "/feed.rss"
- assetsPathPrefix = "/assets"
- distPathPrefix = assetsPathPrefix + "/dist"
- themesPathPrefix = assetsPathPrefix + "/themes"
- settingsPathPrefix = "/settings"
- settingsPanelGlob = settingsPathPrefix + "/*panel"
- userPanelPath = settingsPathPrefix + "/user"
- adminPanelPath = settingsPathPrefix + "/admin"
- signupPath = "/signup"
+ confirmEmailPath = "/" + uris.ConfirmEmailPath
+ profileGroupPath = "/@:username"
+ statusPath = "/statuses/:" + apiutil.WebStatusIDKey // leave out the '/@:username' prefix as this will be served within the profile group
+ tagsPath = "/tags/:" + apiutil.TagNameKey
+ customCSSPath = profileGroupPath + "/custom.css"
+ instanceCustomCSSPath = "/custom.css"
+ rssFeedPath = profileGroupPath + "/feed.rss"
+ assetsPathPrefix = "/assets"
+ distPathPrefix = assetsPathPrefix + "/dist"
+ themesPathPrefix = assetsPathPrefix + "/themes"
+ settingsPathPrefix = "/settings"
+ settingsPanelGlob = settingsPathPrefix + "/*panel"
+ userPanelPath = settingsPathPrefix + "/user"
+ adminPanelPath = settingsPathPrefix + "/admin"
+ signupPath = "/signup"
cacheControlHeader = "Cache-Control" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
cacheControlNoCache = "no-cache" // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#response_directives
@@ -114,6 +115,7 @@ func (m *Module) Route(r *router.Router, mi ...gin.HandlerFunc) {
r.AttachHandler(http.MethodGet, settingsPathPrefix, m.SettingsPanelHandler)
r.AttachHandler(http.MethodGet, settingsPanelGlob, m.SettingsPanelHandler)
r.AttachHandler(http.MethodGet, customCSSPath, m.customCSSGETHandler)
+ r.AttachHandler(http.MethodGet, instanceCustomCSSPath, m.instanceCustomCSSGETHandler)
r.AttachHandler(http.MethodGet, rssFeedPath, m.rssFeedGETHandler)
r.AttachHandler(http.MethodGet, confirmEmailPath, m.confirmEmailGETHandler)
r.AttachHandler(http.MethodPost, confirmEmailPath, m.confirmEmailPOSTHandler)