wisski-cloud-distillery/internal/wisski/ingredient/php/extras/requirements.go
Tom Wiesing 8235ea9105
Require access to Still via method
This commit adds a safeguard to accessing the still from a specific
component by requiring access via the component.GetStill method.
2024-04-08 22:39:32 +02:00

67 lines
1.5 KiB
Go

package extras
import (
"context"
"strings"
"github.com/FAU-CDI/wisski-distillery/internal/phpx"
"github.com/FAU-CDI/wisski-distillery/internal/status"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/php"
"golang.org/x/exp/slices"
_ "embed"
)
type Requirements struct {
ingredient.Base
dependencies struct {
PHP *php.PHP
}
}
var (
_ ingredient.WissKIFetcher = (*Requirements)(nil)
)
//go:embed requirements.php
var requirementsPHP string
// Create creates a new block with the given title and html content
func (requirements *Requirements) Get(ctx context.Context, server *phpx.Server) (data []status.Requirement, err error) {
err = requirements.dependencies.PHP.ExecScript(ctx, server, &data, requirementsPHP, "get_requirements", ingredient.GetLiquid(requirements).URL().String())
if err == nil {
// sort first by weight, then by id!
slices.SortFunc(data, func(a, b status.Requirement) int {
// compare first by severity
if a.Severity < b.Severity {
return 1
}
if a.Severity > b.Severity {
return -1
}
// then by weight
if a.Weight < b.Weight {
return 1
}
if a.Weight > b.Weight {
return -1
}
// and finally by id
return strings.Compare(a.ID, b.ID)
})
}
return
}
// Fetch fetches information
func (requirements *Requirements) Fetch(flags ingredient.FetcherFlags, target *status.WissKI) error {
if flags.Quick {
return nil
}
target.Requirements, _ = requirements.Get(flags.Context, flags.Server)
return nil
}