mirror of
https://github.com/absmach/magistrala.git
synced 2026-08-07 07:14:46 +00:00
61d0427898
Signed-off-by: dusan <borovcanindusan1@gmail.com>
150 lines
4.3 KiB
Go
150 lines
4.3 KiB
Go
// Copyright (c) Abstract Machines
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package http
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"github.com/absmach/magistrala"
|
|
api "github.com/absmach/magistrala/api/http"
|
|
apiutil "github.com/absmach/magistrala/api/http/util"
|
|
"github.com/absmach/magistrala/channels"
|
|
smqauthn "github.com/absmach/magistrala/pkg/authn"
|
|
roleManagerHttp "github.com/absmach/magistrala/pkg/roles/rolemanager/api"
|
|
"github.com/go-chi/chi/v5"
|
|
kithttp "github.com/go-kit/kit/transport/http"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
|
)
|
|
|
|
// MakeHandler returns a HTTP handler for Channels API endpoints.
|
|
func MakeHandler(svc channels.Service, authn smqauthn.AuthNMiddleware, mux *chi.Mux, logger *slog.Logger, instanceID string, idp magistrala.IDProvider) *chi.Mux {
|
|
opts := []kithttp.ServerOption{
|
|
kithttp.ServerErrorEncoder(apiutil.LoggingErrorEncoder(logger, api.EncodeError)),
|
|
}
|
|
|
|
d := roleManagerHttp.NewDecoder("channelID")
|
|
|
|
mux.Route("/{domainID}/channels", func(r chi.Router) {
|
|
r.Use(authn.Middleware())
|
|
r.Use(api.RequestIDMiddleware(idp))
|
|
|
|
r.Post("/", otelhttp.NewHandler(kithttp.NewServer(
|
|
createChannelEndpoint(svc),
|
|
decodeCreateChannelReq,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "create_channel").ServeHTTP)
|
|
|
|
r.Post("/bulk", otelhttp.NewHandler(kithttp.NewServer(
|
|
createChannelsEndpoint(svc),
|
|
decodeCreateChannelsReq,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "create_channels").ServeHTTP)
|
|
|
|
r.Get("/", otelhttp.NewHandler(kithttp.NewServer(
|
|
listChannelsEndpoint(svc),
|
|
decodeListChannels,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "list_channels").ServeHTTP)
|
|
|
|
r.Post("/connect", otelhttp.NewHandler(kithttp.NewServer(
|
|
connectEndpoint(svc),
|
|
decodeConnectRequest,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "connect").ServeHTTP)
|
|
|
|
r.Post("/disconnect", otelhttp.NewHandler(kithttp.NewServer(
|
|
disconnectEndpoint(svc),
|
|
decodeDisconnectRequest,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "disconnect").ServeHTTP)
|
|
|
|
r = roleManagerHttp.EntityAvailableActionsRouter(svc, d, r, opts)
|
|
|
|
r.Route("/{channelID}", func(r chi.Router) {
|
|
r.Get("/", otelhttp.NewHandler(kithttp.NewServer(
|
|
viewChannelEndpoint(svc),
|
|
decodeViewChannel,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "view_channel").ServeHTTP)
|
|
|
|
r.Patch("/", otelhttp.NewHandler(kithttp.NewServer(
|
|
updateChannelEndpoint(svc),
|
|
decodeUpdateChannel,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "update_channel_name_and_metadata").ServeHTTP)
|
|
|
|
r.Patch("/tags", otelhttp.NewHandler(kithttp.NewServer(
|
|
updateChannelTagsEndpoint(svc),
|
|
decodeUpdateChannelTags,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "update_channel_tag").ServeHTTP)
|
|
|
|
r.Delete("/", otelhttp.NewHandler(kithttp.NewServer(
|
|
deleteChannelEndpoint(svc),
|
|
decodeDeleteChannelReq,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "delete_channel").ServeHTTP)
|
|
|
|
r.Post("/enable", otelhttp.NewHandler(kithttp.NewServer(
|
|
enableChannelEndpoint(svc),
|
|
decodeChangeChannelStatus,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "enable_channel").ServeHTTP)
|
|
|
|
r.Post("/disable", otelhttp.NewHandler(kithttp.NewServer(
|
|
disableChannelEndpoint(svc),
|
|
decodeChangeChannelStatus,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "disable_channel").ServeHTTP)
|
|
|
|
r.Post("/parent", otelhttp.NewHandler(kithttp.NewServer(
|
|
setChannelParentGroupEndpoint(svc),
|
|
decodeSetChannelParentGroupStatus,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "set_channel_parent_group").ServeHTTP)
|
|
|
|
r.Delete("/parent", otelhttp.NewHandler(kithttp.NewServer(
|
|
removeChannelParentGroupEndpoint(svc),
|
|
decodeRemoveChannelParentGroupStatus,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "remove_channel_parent_group").ServeHTTP)
|
|
|
|
r.Post("/connect", otelhttp.NewHandler(kithttp.NewServer(
|
|
connectChannelClientEndpoint(svc),
|
|
decodeConnectChannelClientRequest,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "connect_channel_client").ServeHTTP)
|
|
|
|
r.Post("/disconnect", otelhttp.NewHandler(kithttp.NewServer(
|
|
disconnectChannelClientsEndpoint(svc),
|
|
decodeDisconnectChannelClientsRequest,
|
|
api.EncodeResponse,
|
|
opts...,
|
|
), "disconnect_channel_client").ServeHTTP)
|
|
|
|
roleManagerHttp.EntityRoleMangerRouter(svc, d, r, opts)
|
|
})
|
|
})
|
|
|
|
mux.Get("/health", magistrala.Health("channels", instanceID))
|
|
mux.Handle("/metrics", promhttp.Handler())
|
|
|
|
return mux
|
|
}
|