diff --git a/internal/cmd/home/home.go b/internal/cmd/home/home.go index e4b5019..1c2eb13 100644 --- a/internal/cmd/home/home.go +++ b/internal/cmd/home/home.go @@ -32,6 +32,8 @@ import ( themefsrepo "source.toby3d.me/toby3d/home/internal/theme/repository/fs" themeucase "source.toby3d.me/toby3d/home/internal/theme/usecase" "source.toby3d.me/toby3d/home/internal/urlutil" + webfingerhttpdelivery "source.toby3d.me/toby3d/home/internal/webfinger/delivery/http" + webfingerucase "source.toby3d.me/toby3d/home/internal/webfinger/usecase" ) type App struct { @@ -58,7 +60,21 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) { entries := pagefsrepo.NewFileSystemPageRepository(contentDir) entrier := pageucase.NewEntryUseCase(entries, resources) serverer := servercase.NewServerUseCase(sites) + webfingerer := webfingerucase.NewWebFingerUseCase(sites) + webfingerHandler := webfingerhttpdelivery.NewHandler(webfingerer) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + head, tail := urlutil.ShiftPath(r.URL.Path) + + switch head { + case ".well-known": + switch { + case strings.HasPrefix(tail, "/webfinger"): + webfingerHandler.ServeHTTP(w, r) + + return + } + } + // NOTE(toby3d): any static file is public and unprotected by // design, so it's safe to search it first before deep down to // any page or it's resource which might be protected by @@ -83,8 +99,7 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) { if s.IsMultiLingual() { // NOTE(toby3d): $HOME_CONTENT_DIR contains at least two // index.md with different language codes. - head, tail := urlutil.ShiftPath(r.URL.Path) - if head == "" { + if head, tail = urlutil.ShiftPath(r.URL.Path); head == "" { // NOTE(toby3d): client request just '/', try to // understand which language subdirectory is // need to redirect.