| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
- // SPDX-License-Identifier: Apache-2.0
- package server // import "miniflux.app/v2/internal/http/server"
- import (
- "net/http"
- "miniflux.app/v2/internal/api"
- "miniflux.app/v2/internal/config"
- "miniflux.app/v2/internal/fever"
- "miniflux.app/v2/internal/googlereader"
- "miniflux.app/v2/internal/storage"
- "miniflux.app/v2/internal/ui"
- "miniflux.app/v2/internal/worker"
- )
- func newRouter(store *storage.Storage, pool *worker.Pool) http.Handler {
- readinessProbe := newReadinessProbe(store)
- // Application routes served under the base path.
- appMux := http.NewServeMux()
- appMux.HandleFunc("GET /healthcheck", readinessProbe)
- // Fever API routing.
- feverHandler := fever.Middleware(store)(fever.NewHandler(store))
- appMux.Handle("/fever/", feverHandler)
- // Google Reader API routing.
- googleReaderHandler := googlereader.NewHandler(store)
- appMux.HandleFunc("POST /accounts/ClientLogin", googleReaderHandler.ServeHTTP)
- appMux.Handle("/reader/api/0/", googleReaderHandler)
- // REST API routing.
- if config.Opts.HasAPI() {
- appMux.Handle("/v1/", api.NewHandler(store, pool))
- }
- // Metrics endpoint.
- if config.Opts.HasMetricsCollector() {
- appMux.Handle("GET /metrics", metricsHandler())
- }
- // UI routing (catch-all).
- appMux.Handle("/", ui.Serve(store, pool))
- // Apply shared middleware.
- var appHandler http.Handler = appMux
- if config.Opts.HasMaintenanceMode() {
- appHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- w.Write([]byte(config.Opts.MaintenanceMessage()))
- })
- }
- appHandler = middleware(appHandler)
- // Root router: health probes at root, app routes under base path.
- rootMux := http.NewServeMux()
- // These routes do not take the base path into consideration and are always available at the root of the server.
- rootMux.HandleFunc("/liveness", livenessProbe)
- rootMux.HandleFunc("/healthz", livenessProbe)
- rootMux.HandleFunc("/readiness", readinessProbe)
- rootMux.HandleFunc("/readyz", readinessProbe)
- basePath := config.Opts.BasePath()
- if basePath != "" {
- rootMux.Handle(basePath+"/", http.StripPrefix(basePath, appHandler))
- } else {
- rootMux.Handle("/", appHandler)
- }
- return rootMux
- }
|