mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-08 21:30:07 -06:00
ownCloud Web recently transitioned to Vue3. The settings ui is still written in Vue2. Since it's pretty much unused we won't take the efforts of upgrading it to Vue3.
91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
chimiddleware "github.com/go-chi/chi/v5/middleware"
|
|
"github.com/owncloud/ocis/v2/ocis-pkg/account"
|
|
"github.com/owncloud/ocis/v2/ocis-pkg/cors"
|
|
"github.com/owncloud/ocis/v2/ocis-pkg/middleware"
|
|
ohttp "github.com/owncloud/ocis/v2/ocis-pkg/service/http"
|
|
"github.com/owncloud/ocis/v2/ocis-pkg/version"
|
|
settingssvc "github.com/owncloud/ocis/v2/protogen/gen/ocis/services/settings/v0"
|
|
svc "github.com/owncloud/ocis/v2/services/settings/pkg/service/v0"
|
|
"go-micro.dev/v4"
|
|
)
|
|
|
|
// Server initializes the http service and server.
|
|
func Server(opts ...Option) (ohttp.Service, error) {
|
|
options := newOptions(opts...)
|
|
|
|
service, err := ohttp.NewService(
|
|
ohttp.TLSConfig(options.Config.HTTP.TLS),
|
|
ohttp.Logger(options.Logger),
|
|
ohttp.Name(options.Name),
|
|
ohttp.Version(version.GetString()),
|
|
ohttp.Address(options.Config.HTTP.Addr),
|
|
ohttp.Namespace(options.Config.HTTP.Namespace),
|
|
ohttp.Context(options.Context),
|
|
ohttp.Flags(options.Flags...),
|
|
)
|
|
if err != nil {
|
|
options.Logger.Error().
|
|
Err(err).
|
|
Msg("Error initializing http service")
|
|
return ohttp.Service{}, fmt.Errorf("could not initialize http service: %w", err)
|
|
}
|
|
|
|
handle := svc.NewService(options.Config, options.Logger)
|
|
|
|
{
|
|
handle = svc.NewInstrument(handle, options.Metrics)
|
|
handle = svc.NewLogging(handle, options.Logger)
|
|
handle = svc.NewTracing(handle)
|
|
}
|
|
|
|
mux := chi.NewMux()
|
|
|
|
mux.Use(chimiddleware.RealIP)
|
|
mux.Use(chimiddleware.RequestID)
|
|
mux.Use(middleware.NoCache)
|
|
mux.Use(middleware.Cors(
|
|
cors.Logger(options.Logger),
|
|
cors.AllowedOrigins(options.Config.HTTP.CORS.AllowedOrigins),
|
|
cors.AllowedMethods(options.Config.HTTP.CORS.AllowedMethods),
|
|
cors.AllowedHeaders(options.Config.HTTP.CORS.AllowedHeaders),
|
|
cors.AllowCredentials(options.Config.HTTP.CORS.AllowCredentials),
|
|
))
|
|
mux.Use(middleware.Secure)
|
|
mux.Use(middleware.ExtractAccountUUID(
|
|
account.Logger(options.Logger),
|
|
account.JWTSecret(options.Config.TokenManager.JWTSecret)),
|
|
)
|
|
|
|
mux.Use(middleware.Version(
|
|
options.Name,
|
|
version.GetString(),
|
|
))
|
|
|
|
mux.Use(middleware.Logger(
|
|
options.Logger,
|
|
))
|
|
|
|
mux.Route(options.Config.HTTP.Root, func(r chi.Router) {
|
|
settingssvc.RegisterBundleServiceWeb(r, handle)
|
|
settingssvc.RegisterValueServiceWeb(r, handle)
|
|
settingssvc.RegisterRoleServiceWeb(r, handle)
|
|
settingssvc.RegisterPermissionServiceWeb(r, handle)
|
|
})
|
|
|
|
_ = chi.Walk(mux, func(method string, route string, handler http.Handler, middlewares ...func(http.Handler) http.Handler) error {
|
|
options.Logger.Debug().Str("method", method).Str("route", route).Int("middlewares", len(middlewares)).Msg("serving endpoint")
|
|
return nil
|
|
})
|
|
|
|
micro.RegisterHandler(service.Server(), mux)
|
|
|
|
return service, nil
|
|
}
|