| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package api
- import (
- apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1"
- acl "github.com/OliveTin/OliveTin/internal/acl"
- authpublic "github.com/OliveTin/OliveTin/internal/auth/authpublic"
- config "github.com/OliveTin/OliveTin/internal/config"
- entities "github.com/OliveTin/OliveTin/internal/entities"
- executor "github.com/OliveTin/OliveTin/internal/executor"
- )
- type DashboardRenderRequest struct {
- AuthenticatedUser *authpublic.AuthenticatedUser
- cfg *config.Config
- ex *executor.Executor
- }
- func (rr *DashboardRenderRequest) findAction(title string) *apiv1.Action {
- rr.ex.MapActionIdToBindingLock.RLock()
- defer rr.ex.MapActionIdToBindingLock.RUnlock()
- for _, binding := range rr.ex.MapActionIdToBinding {
- if binding.Action.Title == title {
- return buildAction(binding, rr)
- }
- }
- return nil
- }
- func buildEffectivePolicy(policy *config.ConfigurationPolicy) *apiv1.EffectivePolicy {
- ret := &apiv1.EffectivePolicy{
- ShowDiagnostics: policy.ShowDiagnostics,
- ShowLogList: policy.ShowLogList,
- }
- return ret
- }
- func buildAction(actionBinding *executor.ActionBinding, rr *DashboardRenderRequest) *apiv1.Action {
- action := actionBinding.Action
- btn := apiv1.Action{
- BindingId: actionBinding.ID,
- Title: entities.ParseTemplateWith(action.Title, actionBinding.Entity),
- Icon: entities.ParseTemplateWith(action.Icon, actionBinding.Entity),
- CanExec: acl.IsAllowedExec(rr.cfg, rr.AuthenticatedUser, action),
- PopupOnStart: action.PopupOnStart,
- Order: int32(actionBinding.ConfigOrder),
- Timeout: int32(action.Timeout),
- }
- for _, cfgArg := range action.Arguments {
- pbArg := apiv1.ActionArgument{
- Name: cfgArg.Name,
- Title: cfgArg.Title,
- Type: cfgArg.Type,
- Description: cfgArg.Description,
- DefaultValue: cfgArg.Default,
- Choices: buildChoices(cfgArg),
- Suggestions: cfgArg.Suggestions,
- }
- btn.Arguments = append(btn.Arguments, &pbArg)
- }
- return &btn
- }
- func buildChoices(arg config.ActionArgument) []*apiv1.ActionArgumentChoice {
- if arg.Entity != "" && len(arg.Choices) == 1 {
- return buildChoicesEntity(arg.Choices[0], arg.Entity)
- } else {
- return buildChoicesSimple(arg.Choices)
- }
- }
- func buildChoicesEntity(firstChoice config.ActionArgumentChoice, entityTitle string) []*apiv1.ActionArgumentChoice {
- ret := []*apiv1.ActionArgumentChoice{}
- entList := entities.GetEntityInstances(entityTitle)
- for _, ent := range entList {
- ret = append(ret, &apiv1.ActionArgumentChoice{
- Value: entities.ParseTemplateWith(firstChoice.Value, ent),
- Title: entities.ParseTemplateWith(firstChoice.Title, ent),
- })
- }
- return ret
- }
- func buildChoicesSimple(choices []config.ActionArgumentChoice) []*apiv1.ActionArgumentChoice {
- ret := []*apiv1.ActionArgumentChoice{}
- for _, cfgChoice := range choices {
- pbChoice := apiv1.ActionArgumentChoice{
- Value: cfgChoice.Value,
- Title: cfgChoice.Title,
- }
- ret = append(ret, &pbChoice)
- }
- return ret
- }
|