4
0

api_justification.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package api
  2. import (
  3. "fmt"
  4. "strings"
  5. "connectrpc.com/connect"
  6. apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1"
  7. authpublic "github.com/OliveTin/OliveTin/internal/auth/authpublic"
  8. "github.com/OliveTin/OliveTin/internal/config"
  9. "github.com/OliveTin/OliveTin/internal/executor"
  10. )
  11. func validateJustificationRequired(action *config.Action, justification string, user *authpublic.AuthenticatedUser) error {
  12. if !actionRequiresJustificationConfig(action) || justificationProvided(justification, user) {
  13. return nil
  14. }
  15. return fmt.Errorf("justification is required for this action")
  16. }
  17. func actionRequiresJustificationConfig(action *config.Action) bool {
  18. return action != nil && action.Justification
  19. }
  20. func justificationProvided(justification string, user *authpublic.AuthenticatedUser) bool {
  21. return strings.TrimSpace(justification) != "" || executor.IsSystemExecution(user)
  22. }
  23. func connectInvalidJustification(err error) error {
  24. return connect.NewError(connect.CodeInvalidArgument, err)
  25. }
  26. func startActionArgumentsFromProto(args []*apiv1.StartActionArgument) map[string]string {
  27. result := make(map[string]string, len(args))
  28. for _, arg := range args {
  29. result[arg.Name] = arg.Value
  30. }
  31. return result
  32. }
  33. func restartRequiresJustificationError() error {
  34. return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("justification is required for this action; use StartAction with a justification instead"))
  35. }