generated from bool64/brick-starter-kit
/
serve_favicon.go
46 lines (34 loc) 路 969 Bytes
/
serve_favicon.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package usecase
import (
"context"
"net/http"
"strings"
"github.com/swaggest/rest/request"
"github.com/swaggest/rest/response"
"github.com/swaggest/usecase"
"github.com/vearutop/photo-blog/internal/infra/nethttp/ui"
"github.com/vearutop/photo-blog/internal/infra/settings"
)
type serveFaviconDeps interface {
Settings() settings.Values
}
func ServeFavicon(deps serveFaviconDeps) usecase.Interactor {
type fileReq struct {
request.EmbeddedSetter
}
u := usecase.NewInteractor(func(ctx context.Context, in fileReq, out *response.EmbeddedSetter) error {
rw := out.ResponseWriter()
rw.Header().Set("Cache-Control", "max-age=31536000")
favicon := deps.Settings().Appearance().SiteFavicon
r := in.Request()
if strings.HasPrefix(favicon, "/site/") {
http.ServeFile(rw, r, strings.TrimPrefix(favicon, "/"))
return nil
}
r.URL.Path = "/static/favicon.png"
ui.Static.ServeHTTP(rw, r)
return nil
})
u.SetTags("Site")
return u
}