web/apps/maintenance.go
Rama master · réplica de lectura del repositorio original.
package apps
import (
"net/http"
"github.com/cozy/cozy-stack/model/app"
"github.com/cozy/cozy-stack/pkg/config/config"
"github.com/cozy/cozy-stack/pkg/consts"
"github.com/cozy/cozy-stack/pkg/couchdb"
"github.com/cozy/cozy-stack/pkg/jsonapi"
"github.com/cozy/cozy-stack/pkg/registry"
"github.com/labstack/echo/v4"
)
type apiMaintenance struct {
couchdb.JSONDoc
}
// Links is part of the Manifest interface
func (man *apiMaintenance) Links() *jsonapi.LinksList { return nil }
// Relationships is part of the Manifest interface
func (man *apiMaintenance) Relationships() jsonapi.RelationshipMap {
return jsonapi.RelationshipMap{}
}
// Included is part of the Manifest interface
func (man *apiMaintenance) Included() []jsonapi.Object { return nil }
// apiMaintenance is a jsonapi.Object
var _ jsonapi.Object = (*apiMaintenance)(nil)
func listMaintenance(c echo.Context) error {
list, err := app.ListMaintenance()
if err != nil {
return err
}
objs := make([]jsonapi.Object, len(list))
for i, item := range list {
item["level"] = "stack"
doc := couchdb.JSONDoc{
Type: consts.KonnectorsMaintenance,
M: item,
}
objs[i] = &apiMaintenance{doc}
}
if ctx := c.QueryParam("Context"); ctx != "" {
contexts := config.GetConfig().Registries
registries, ok := contexts[ctx]
if !ok {
registries = contexts[config.DefaultInstanceContext]
}
apps, err := registry.ListMaintenance(registries)
if err != nil {
return err
}
for _, app := range apps {
app.M["level"] = "registry"
objs = append(objs, &apiMaintenance{app})
}
}
return jsonapi.DataList(c, http.StatusOK, objs, nil)
}
func activateMaintenance(c echo.Context) error {
slug := c.Param("slug")
var doc couchdb.JSONDoc
if _, err := jsonapi.Bind(c.Request().Body, &doc); err != nil {
return err
}
if err := app.ActivateMaintenance(slug, doc.M); err != nil {
return err
}
return c.NoContent(http.StatusNoContent)
}
func deactivateMaintenance(c echo.Context) error {
slug := c.Param("slug")
if err := app.DeactivateMaintenance(slug); err != nil {
return err
}
return c.NoContent(http.StatusNoContent)
}
// AdminRoutes sets the routing for the admin interface to configure
// maintenance for the konnectors.
func AdminRoutes(router *echo.Group) {
router.GET("/maintenance", listMaintenance)
router.PUT("/maintenance/:slug", activateMaintenance)
router.DELETE("/maintenance/:slug", deactivateMaintenance)
}