diff --git a/handle.go b/handle.go index d296d93..3acfd08 100644 --- a/handle.go +++ b/handle.go @@ -795,6 +795,34 @@ func (h *Handler) LogHandlerFunc(f http.HandlerFunc) http.HandlerFunc { log.Info("\"%s %s\" %d %s \"%s\"", r.Method, r.RequestURI, status, time.Since(start), r.UserAgent()) }() + if h.app.App().cfg.App.Private { + // This instance is private, so ensure it's being accessed by a valid user + // Check if authenticated with an access token + _, apiErr := optionalAPIAuth(h.app.App(), r) + if apiErr != nil { + if err, ok := apiErr.(impart.HTTPError); ok { + status = err.Status + } else { + status = 500 + } + + if apiErr == ErrNotLoggedIn { + // Fall back to web auth since there was no access token given + _, err := webAuth(h.app.App(), r) + if err != nil { + if err, ok := apiErr.(impart.HTTPError); ok { + status = err.Status + } else { + status = 500 + } + return err + } + } else { + return apiErr + } + } + } + f(w, r) return nil diff --git a/routes.go b/routes.go index a1f4439..8c0fbc8 100644 --- a/routes.go +++ b/routes.go @@ -61,7 +61,7 @@ func InitRoutes(apper Apper, r *mux.Router) *mux.Router { // Federation endpoints // host-meta - write.HandleFunc("/.well-known/host-meta", handler.Web(handleViewHostMeta, UserLevelOptional)) + write.HandleFunc("/.well-known/host-meta", handler.Web(handleViewHostMeta, UserLevelReader)) // webfinger write.HandleFunc(webfinger.WebFingerPath, handler.LogHandlerFunc(http.HandlerFunc(wf.Webfinger))) // nodeinfo